<?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>222072</bug_id>
          
          <creation_ts>2021-02-17 14:24:50 -0800</creation_ts>
          <short_desc>[iOS] Specify a _UIDataOwner when reading or writing from the system pasteboard</short_desc>
          <delta_ts>2021-02-19 16:51:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>222071</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>annulen</cc>
    
    <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1730534</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-17 14:24:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/74208576&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731062</commentid>
    <comment_count>1</comment_count>
      <attachid>420882</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-18 15:58:13 -0800</bug_when>
    <thetext>Created attachment 420882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731395</commentid>
    <comment_count>2</comment_count>
      <attachid>420882</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 09:51:48 -0800</bug_when>
    <thetext>Comment on attachment 420882
Patch

I&apos;m going to see if I can make this patch simpler...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731423</commentid>
    <comment_count>3</comment_count>
      <attachid>420988</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 10:45:38 -0800</bug_when>
    <thetext>Created attachment 420988
v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731427</commentid>
    <comment_count>4</comment_count>
      <attachid>420989</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 10:52:53 -0800</bug_when>
    <thetext>Created attachment 420989
Non-internal SDK build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731447</commentid>
    <comment_count>5</comment_count>
      <attachid>420989</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-02-19 11:12:42 -0800</bug_when>
    <thetext>Comment on attachment 420989
Non-internal SDK build fix

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

r=me, nice work!

&gt; Source/WebCore/platform/DataOwnerType.h:34
&gt; +    Shared

Style: missing trailing comma

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:108
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();
&gt; +        break;

Is this actually needed?  I try to avoid using `default` because it can make finding all the uses of an `enum` inside a `switch` harder because there is no build error.

&gt; Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:148
&gt; +    MESSAGE_CHECK_COMPLETION(dataOwner.hasValue(), completionHandler({ }));

NIT: Is the `.hasValue()` actually needed?

&gt; Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:657
&gt; +Optional&lt;DataOwnerType&gt; WebPasteboardProxy::dataOwner(IPC::Connection&amp; connection, const String&amp; pasteboardName, Optional&lt;PageIdentifier&gt; pageID, PasteboardAccessIntent intent) const

NIT: This function name makes me think that it&apos;s a simple getter, but it&apos;s not.  Perhaps a more specific name like `determineDataOwner` (or even `dataOwnerForPasteboard`)?

&gt; Source/WebKit/UIProcess/PasteboardAccessIntent.h:32
&gt; +    Write

Style: missing trailing comma

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:7475
&gt; +    auto coreType = [] (_UIDataOwner platformType) {

NIT: Can you just make this a `static` function outside?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731457</commentid>
    <comment_count>6</comment_count>
      <attachid>420989</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 11:21:16 -0800</bug_when>
    <thetext>Comment on attachment 420989
Non-internal SDK build fix

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

&gt;&gt; Source/WebCore/platform/DataOwnerType.h:34
&gt;&gt; +    Shared
&gt; 
&gt; Style: missing trailing comma

Added!

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:108
&gt;&gt; +        break;
&gt; 
&gt; Is this actually needed?  I try to avoid using `default` because it can make finding all the uses of an `enum` inside a `switch` harder because there is no build error.

Good point — removed this `default` case.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:148
&gt;&gt; +    MESSAGE_CHECK_COMPLETION(dataOwner.hasValue(), completionHandler({ }));
&gt; 
&gt; NIT: Is the `.hasValue()` actually needed?

I added it here for a bit more clarity, though it is indeed not needed.

I&apos;ll make this just `MESSAGE_CHECK_COMPLETION(dataOwner, ~);`

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:657
&gt;&gt; +Optional&lt;DataOwnerType&gt; WebPasteboardProxy::dataOwner(IPC::Connection&amp; connection, const String&amp; pasteboardName, Optional&lt;PageIdentifier&gt; pageID, PasteboardAccessIntent intent) const
&gt; 
&gt; NIT: This function name makes me think that it&apos;s a simple getter, but it&apos;s not.  Perhaps a more specific name like `determineDataOwner` (or even `dataOwnerForPasteboard`)?

Fair point! I think `dataOwnerForPasteboard` is redundant because we&apos;re already in `WebPasteboardProxy`, so I&apos;ll rename this to `determineDataOwner`.

&gt;&gt; Source/WebKit/UIProcess/PasteboardAccessIntent.h:32
&gt;&gt; +    Write
&gt; 
&gt; Style: missing trailing comma

Added!

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:7475
&gt;&gt; +    auto coreType = [] (_UIDataOwner platformType) {
&gt; 
&gt; NIT: Can you just make this a `static` function outside?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731491</commentid>
    <comment_count>7</comment_count>
      <attachid>421005</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 12:02:57 -0800</bug_when>
    <thetext>Created attachment 421005
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731569</commentid>
    <comment_count>8</comment_count>
      <attachid>420989</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 13:32:06 -0800</bug_when>
    <thetext>Comment on attachment 420989
Non-internal SDK build fix

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

&gt; Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:339
&gt; +            return completionHandler(newChangeCount);

Oops. Since the `return` here is now inside the lambda, we&apos;ll end up calling the completion handle twice in this method, which is what&apos;s causing these API tests to fail:

• DragAndDropTests.DragImageLocationForLinkInSubframe
• DragAndDropTests.DataTransferTypesOnDragStartForLink
• DragAndDropTests.PreventingMouseDownShouldPreventDragStart

I changed this to MESSAGE_CHECK on a null `webProcessProxy` instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731571</commentid>
    <comment_count>9</comment_count>
      <attachid>421028</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 13:35:14 -0800</bug_when>
    <thetext>Created attachment 421028
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731683</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-19 16:51:48 -0800</bug_when>
    <thetext>Committed r273184: &lt;https://commits.webkit.org/r273184&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420882</attachid>
            <date>2021-02-18 15:58:13 -0800</date>
            <delta_ts>2021-02-19 09:51:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222072-20210218155812.patch</filename>
            <type>text/plain</type>
            <size>120007</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxZjI2OWZkYWFlOWIzYTczMTM1Y2U4
MTlhYWFmYjRhMWUxMDcwMzguLjMzNWQ4MDRiOWE1M2VhOTgzZGY1Y2FjOWY5MzhjZGFiNGQ2Njcx
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25l
ciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUhhdmUuaDoKKworICAgICAgICBU
dXJuIHNldmVyYWwgY29tcGlsZS10aW1lIGd1YXJkcyBwcmV2aW91c2x5IGluIGBQbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW1gIGludG8gYEhBVkUoKWAtcy4KKwogMjAyMS0wMi0xOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0IEVOQUJMRV9WUDkgdG8gMSBv
biBJT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBmZTdkM2ZkMWUwNDAzMTA3MDk4YjkwN2MxODFiYTc3YzYwMzIy
ODA0Li5kZWM2M2M2M2YzNGMyODgzNzNjODU5NWE5ZWMzNTVkMDZlMjdlMTBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTYgQEAKKzIwMjEtMDItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVu
IHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0czogIFVJUGFzdGVib2FyZFRlc3RzLlBlcmZvcm1XaXRoRGF0
YU93bmVyV2hlbkNvcHlpbmcKKyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5QZXJm
b3JtV2l0aERhdGFPd25lcldoZW5QYXN0aW5nCisKKyAgICAgICAgUmVmYWN0b3IgYFBsYXRmb3Jt
UGFzdGVib2FyZGAgb24gaU9TIHNvIHRoYXQgaXQgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYSBk
YXRhIG93bmVyIHR5cGUsIHdoaWNoIHdlIHRoZW4gY29udmVydAorICAgICAgICB0byBhIGBfVUlE
YXRhT3duZXJgIHR5cGUuIFdlIHRoZW4gdXNlIHRoaXMgZGF0YSBvd25lciB0eXBlIHRvIHdyYXAg
YWxsIHBhc3RlYm9hcmQgYWNjZXNzIChyZWFkaW5nLCB3cml0aW5nLCBhbmQKKyAgICAgICAgZXZl
biBzaW1wbHkgZ3JhYmJpbmcgdGhlIGNoYW5nZUNvdW50LCBldGMuKSBpbnNpZGUgY2FsbHMgdG8g
YCtbVUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XWAuCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
UGFzdGVib2FyZERhdGFPd25lci5oOiBBZGRlZC4KKworICAgICAgICBBZGQgYSBuZXcgZW51bSB0
byByZXByZXNlbnQgYSBkYXRhIG93bmVyIHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0
Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF0Zm9ybVBhc3Rl
Ym9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YWxs
UGFzdGVib2FyZEl0ZW1JbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0
ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpQbGF0
Zm9ybVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9ybUFzRGF0YU93bmVyKToK
KworICAgICAgICBJbnRyb2R1Y2UgYHBlcmZvcm1Bc0RhdGFPd25lcigpYCwgYSB0ZW1wbGF0ZWQg
aGVscGVyIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIHVzZSB0byB3cmFwIGFsbCBwYXN0ZWJvYXJkIGFj
Y2VzcyBvbgorICAgICAgICBpT1MgaW5zaWRlIGEgY2FsbCB0byBgK1tVSVBhc3RlYm9hcmQgX3Bl
cmZvcm1Bc0RhdGFPd25lcjpibG9jazpdYC4KKworICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkOjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmJ1ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJk
OjpudW1iZXJPZkZpbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVi
b2FyZDo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwYXN0
ZWJvYXJkTWF5Q29udGFpbkZpbGVQYXRocyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1QYXN0ZWJvYXJkOjpjb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmNoYW5nZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVi
b2FyZDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpz
aG91bGRBbGxvd1JlYWRpbmdVUkxBdEluZGV4IGNvbnN0KToKKworICAgICAgICBEcml2ZS1ieSBj
aGFuZ2U6IHJlbmFtZSBgYWxsb3dSZWFkaW5nVVJMQXRJbmRleCgpYCB0byBgc2hvdWxkQWxsb3dS
ZWFkaW5nVVJMQXRJbmRleCgpYCwgdG8gbWFrZSBpdCBjbGVhciB0aGF0CisgICAgICAgIHRoZSBw
dXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGp1c3QgcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRo
ZXJlIGlzIGEgVVJMIGF0IHRoZSBnaXZlbiBpdGVtIGluZGV4LgorCisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3VudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OmFsbFN0cmluZ3NGb3JUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZEJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkVVJMIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YWxsb3dSZWFkaW5nVVJMQXRJbmRl
eCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjEtMDItMTcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1bWIgYW4gT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHRocm91Z2ggV2ViUGFzdGVib2FyZFByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA4MDg0
Nzk0MmZiNjNkMmQ1MWI3Yzk4ZTRkYmJkNzlmNDFjMWM3NWU1Li5mMWFhMDY3OGNkZmFjMDIwYTI3
NDhlMmFlMjNjYmE2Njg5MWQ3Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbaU9TXSBTcGVjaWZ5IGEgX1VJRGF0YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0
aW5nIGZyb20gdGhlIHN5c3RlbSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIwNzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0
MjA4NTc2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcG9ydCBgVUlQYXN0ZWJvYXJkX1ByaXZhdGUuaGAgc28gdGhhdCBgUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tYCBjYW4gdXNlIHRoZSBuZXcgU1BJLgorCisgICAgICAgICogcGFsL3NwaS9pb3Mv
VUlLaXRTUEkuaDoKKwogMjAyMS0wMi0xOCAgUGVyIEFybmUgIDxwdm9sbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBbbWFjT1NdIE9ic2VydmUgc3lzdGVtIHNsZWVwIGV2ZW50cyBpbiB0aGUgVUkg
cHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCA2MDQyZTBmZjJiOGJkMmM2OTgxYjI0MGMyNmU3ZTQ0NDNmZmE3
MDVlLi5jMDBjZmFhOGM3MTM0YzVlZDUxMWU0OWZjMjUyZDc0ZjZjZDdmYWY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDg3IEBACisyMDIxLTAyLTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiBy
ZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBXZWJLaXQyIHN1cHBvcnQgZm9yIHRhZ2dpbmcgYFBsYXRmb3Jt
UGFzdGVib2FyZGAgd2l0aCB0aGUgY29udGVudCB2aWV3J3MgcGFzdGVib2FyZCBkYXRhIG93bmVy
IHR5cGUuIFNlZQorICAgICAgICBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICog
UGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorCisgICAgICAgIEltcG9ydCBgVUlQYXN0ZWJv
YXJkX1ByaXZhdGUuaGAgc28gdGhhdCB3ZSBrbm93IGFib3V0IGArX3BlcmZvcm1Bc0RhdGFPd25l
cjpibG9jazpgIGluIHRoZSBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRQcm94eTo6Z2V0UGFzdGVib2FyZFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRTdHJpbmdzRm9y
VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6Omdl
dFBhc3RlYm9hcmRDaGFuZ2VDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6Z2V0UGFzdGVib2FyZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjphZGRQYXN0ZWJvYXJkVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJv
YXJkUHJveHk6OnNldFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6c2V0UGFzdGVib2FyZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFz
dGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNVUkxTdHJpbmdTdWl0YWJsZUZvckxvYWRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnVybFN0cmluZ1N1aXRh
YmxlRm9yTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6c2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
UHJveHk6OmdldE51bWJlck9mRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
UHJveHk6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUN1c3RvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVSTEZy
b21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFk
QnVmZmVyRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUpOgorCisgICAgICAgIE1h
a2UgYWxsIG9mIHRoZXNlIG1ldGhvZHMgdXNlIGVpdGhlciBgY3JlYXRlUGxhdGZvcm1QYXN0ZWJv
YXJkRm9yUmVhZGluZ2Agb3IgYGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvcldyaXRpbmdgCisg
ICAgICAgIHRvIGdyYWIgYSBgUGxhdGZvcm1QYXN0ZWJvYXJkYCAod2hpY2gsIGlmIGBIQVZFKFBB
U1RFQk9BUkRfREFUQV9PV05FUilgIGlzIHNldCwgd2lsbCBiZSB0YWdnZWQgd2l0aCBhIGRhdGEg
b3duZXIKKyAgICAgICAgdHlwZSkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFBy
b3h5OjpjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JX
cml0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpjcmVh
dGVQbGF0Zm9ybVBhc3RlYm9hcmQgY29uc3QpOgorCisgICAgICAgIFVzZSB0aGUgZ2l2ZW4gcGFn
ZSBpZGVudGlmaWVyIGluIHZhcmlvdXMgcGFzdGVib2FyZCBJUEMgZW5kcG9pbnRzIGluIGBXZWJQ
YXN0ZWJvYXJkUHJveHlgIHRvIGFzayBgV2ViUGFnZVByb3h5YAorICAgICAgICBmb3IgaXRzIHBh
c3RlYm9hcmQgZGF0YSBvd25lciB0eXBlIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIHBhc3RlYm9h
cmQgZGF0YS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlVVJM
VG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0
ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
UHJveHk6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkUHJveHk6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFzdGVib2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisKKyAgICAgICAgQWRkIGEgY2xpZW50IGhv
b2sgdG8gcmV0dXJuIGEgYFBhc3RlYm9hcmREYXRhT3duZXJgIGVudW0sIGdpdmVuIGEgYFBhc3Rl
Ym9hcmRBY2Nlc3NJbnRlbnRgIChpLmUuIGNvcHkgb3IgcGFzdGUpLgorCisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnQ6OnBhc3RlYm9hcmREYXRhT3duZXIgY29uc3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg6IEFkZGVkLgorCisgICAgICAgIEFkZCBh
IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGEgcGFzdGVib2FyZCBvcGVyYXRpb24gcmVhZHMgZnJv
bSBvciB3cml0ZXMgdG8gdGhlIHN5c3RlbSBwYXN0ZWJvYXJkLgorCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGFz
dGVib2FyZERhdGFPd25lciBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
cGFzdGVib2FyZERhdGFPd25lciBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcGFzdGVib2Fy
ZERhdGFPd25lcjpdKToKKworICAgICAgICBSZXR1cm4gYC1fZGF0YU93bmVyRm9yUGFzdGVgIG9y
IGAtX2RhdGFPd25lckZvckNvcHlgIChkZXBlbmRpbmcgb24gdGhlIGBQYXN0ZWJvYXJkQWNjZXNz
SW50ZW50YCkuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KwogMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQbHVtYiBhbiBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gdGhyb3VnaCBXZWJQYXN0
ZWJvYXJkUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKaW5kZXggMDQ4NmZjZTJjNDE4NmQyZDhiZjI1
OTEyNTU5NmU4NjM5Y2QzNDUxMS4uYzc0N2Q0ZTEwZjM3MzhiNWVjMDc5MmRiNzEwNDgyMjBjNzJl
ZmQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKQEAgLTg4OCwzICs4ODgsMTUgQEAKICNpZiBQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIwMDAwCiAj
ZGVmaW5lIEhBVkVfU1RBVElDX0ZPTlRfUkVHSVNUUlkgMQogI2VuZGlmCisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYp
CisjZGVmaW5lIEhBVkVfUEFTVEVCT0FSRF9JVEVNX1BST1ZJREVSUyAxCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0o
QVBQTEVUVikgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorI2RlZmluZSBIQVZFX1BBU1RFQk9B
UkRfUFJFU0VOVEFUSU9OX1NUWUxFX0FORF9URUFNX0RBVEEgMQorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCisjZGVmaW5lIEhBVkVf
TlNVUkxfVElUTEUgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9VSUtp
dFNQSS5oCmluZGV4IGEyMDUyNzkwZTc5N2Q3NzQxZWVmYTc2ZDI0NTNhN2I0NDM4NjE1ODkuLjNi
ZTA3OGM3MzYwNmI1Y2Q0MzZhOTA4NjA5NGY4ZTY3NjVlNmQ5MDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC00MSw2ICs0MSw3IEBAIFdURl9FWFRFUk5f
Q19FTkQKICNpbXBvcnQgPFVJS2l0L1VJRm9jdXNSaW5nU3R5bGUuaD4KICNpbXBvcnQgPFVJS2l0
L1VJRm9udF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUludGVyZmFjZV9Qcml2YXRlLmg+
CisjaW1wb3J0IDxVSUtpdC9VSVBhc3RlYm9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQv
VUlTY3JlZW5fUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlcl9Qcml2
YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9OU0l0ZW1Qcm92aWRlcitVSUtpdEFkZGl0aW9ucy5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDgyODIwZDVmODI2ZjRhNmZkN2U2YmUwODAxOWRlNTdlNGY3ZmFjZWUuLjg4MWEyYzcyZmE5
NjA5ZjMwM2M4YjM2MjUyZjMyZmM3ZTFhNmE3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyODEsNiArNTI4MSw3IEBACiAJ
CUY0NTc3NUNFMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1Nzc1Q0QyNDE0MzdENTAwMkRG
MUEwIC8qIElubGluZVBhdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBP
ZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ2NzI5MjUxRTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NkM0NDdF
MjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ3QzIzNDY1
NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oICovOyB9Owor
CQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogUGFzdGVib2FyZERhdGFPd25lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3Mzg0NTcyNURERTlG
QjAwNkRFOEREIC8qIFBhc3RlYm9hcmREYXRhT3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDdBMDlEMTIwQTkzQTk3MDAyNDBGQUUgLyog
RGlzYWJsZWRBZGFwdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQ3QTA5Q0YyMEE5MzlGNjAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
NDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQjE5NUI4QzhB
MDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTYzM0QxRkY2RkQ1MDAwODFCM0NDIC8q
IFByb21pc2VkQXR0YWNobWVudEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0N0E2MzNDMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9taXNlZEF0dGFj
aG1lbnRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTE2NjI4LDYgKzE2NjI5LDcgQEAKIAkJRjQ2QzQ0N0QyMzQ2NTQ1NDAwMzlBNzlEIC8q
IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0NkM0NDgwMjM0NjU0N0EwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtUGFzdGVi
b2FyZERhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmRE
YXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NkM0NDgxMjM0NjU0
N0EwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ3Mzg0NTcyNURERTlGQjAwNkRFOEREIC8qIFBh
c3RlYm9hcmREYXRhT3duZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZERhdGFPd25lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlDRjIwQTkzOUY2MDAyNDBGQUUg
LyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhYmxlZEFkYXB0YXRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwOUQ0MjBBOUREMDQwMDI0
MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc2Fi
bGVkQWRhcHRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUz
QjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjc2NjAsNiArMjc2NjIsNyBAQAogCQkJCUY0MERBQUVCMjVE
OUYyNUUwMDExQjRGQSAvKiBQYXN0ZWJvYXJkQ29udGV4dC5oICovLAogCQkJCUY0RkIzNEZCMjM1
MEM4NUQwMEYwMDk0QSAvKiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAgKi8sCiAJCQkJRjRGQjM0
RkEyMzUwQzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmggKi8sCisJCQkJRjQ3
Mzg0NTcyNURERTlGQjAwNkRFOEREIC8qIFBhc3RlYm9hcmREYXRhT3duZXIuaCAqLywKIAkJCQlG
NDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi8sCiAJCQkJ
QzVGNzY1QjQxNEUxRDQxNDAwNkM4OTlCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oICovLAogCQkJ
CTFBRjVFNEQyMUU1NjczNUEwMDRBMUYwMSAvKiBQYXN0ZWJvYXJkV3JpdGVyRGF0YS5jcHAgKi8s
CkBAIC0zNDA0Miw2ICszNDA0NSw3IEBACiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8q
IFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0MERBQUVDMjVEOUYyNUUwMDExQjRG
QSAvKiBQYXN0ZWJvYXJkQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjRGQjM0RkMyMzUw
Qzg1RDAwRjAwOTRBIC8qIFBhc3RlYm9hcmRDdXN0b21EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogUGFzdGVib2FyZERhdGFPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjQ5Nzg2ODgxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVt
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkwNTcxNEU5QzI4MDAwRThEMThCIC8qIFBh
c3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNUU0RTMxRTU3NzlCMTAw
NEExRjAxIC8qIFBhc3RlYm9hcmRXcml0ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZERhdGFPd25lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZERhdGFPd25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNzkxOWZk
ODA3NTUzYjUzNDRhMTNhNTJmZWQxMTY1ODU1MzE3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkRGF0YU93bmVyLmgKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFf
T1dORVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBQYXN0ZWJvYXJkRGF0
YU93bmVyIDogdWludDhfdCB7CisgICAgVW5kZWZpbmVkLAorICAgIFVzZXIsCisgICAgRW50ZXJw
cmlzZSwKKyAgICBTaGFyZWQKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAppbmRleCA2NGI4ODUyMDAwZTU1YjA0ODhjYWIyZGY1MzA5
YzAzMDg4OWZlMmExLi45MTcwM2UxMmE1OWZlNDRiZGE4NDYyZmEyMjU0ZmI5MTIxN2ZkOGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApAQCAtMjMs
MTQgKzIzLDE3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUGxhdGZvcm1QYXN0
ZWJvYXJkX2gKLSNkZWZpbmUgUGxhdGZvcm1QYXN0ZWJvYXJkX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgSEFW
RShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisjaW5jbHVkZSAiUGFzdGVib2FyZERhdGFPd25lci5o
IgorI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TUGFzdGVib2FyZDsK
IE9CSkNfQ0xBU1MgTlNQYXN0ZWJvYXJkSXRlbTsKQEAgLTU3LDcgKzYwLDEyIEBAIHN0cnVjdCBQ
YXN0ZWJvYXJkV2ViQ29udGVudDsKIAogY2xhc3MgUGxhdGZvcm1QYXN0ZWJvYXJkIHsKIHB1Ymxp
YzoKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICBXRUJDT1JFX0VYUE9SVCBl
eHBsaWNpdCBQbGF0Zm9ybVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
UGFzdGVib2FyZERhdGFPd25lciA9IFBhc3RlYm9hcmREYXRhT3duZXI6OlVuZGVmaW5lZCk7Cisj
ZWxzZQogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFBsYXRmb3JtUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkgfHwgVVNFKExJQldQRSkKICAgICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVBhc3RlYm9h
cmQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlm
aWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdHlwZXMpOwpAQCAtMTA4LDcgKzExNiw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgYWxs
b3dSZWFkaW5nVVJMQXRJbmRleChjb25zdCBVUkwmLCBpbnQgaW5kZXgpIGNvbnN0OworICAgIGJv
b2wgc2hvdWxkQWxsb3dSZWFkaW5nVVJMQXRJbmRleChjb25zdCBVUkwmLCBpbnQgaW5kZXgpIGNv
bnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMjQsOCArMTMyLDkgQEAgcHJp
dmF0ZToKICNpZiBVU0UoTElCV1BFKQogICAgIHN0cnVjdCB3cGVfcGFzdGVib2FyZCogbV9wYXN0
ZWJvYXJkOwogI2VuZGlmCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgUGFz
dGVib2FyZERhdGFPd25lciBtX2RhdGFPd25lciB7IFBhc3RlYm9hcmREYXRhT3duZXI6OlVuZGVm
aW5lZCB9OworI2VuZGlmCiB9OwogCi19Ci0KLSNlbmRpZiAvLyAhUGxhdGZvcm1QYXN0ZWJvYXJk
X2gKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1BsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvUGxhdGZvcm1QYXN0ZWJvYXJkQ29jb2EubW0KaW5kZXggZDM5Zjc1ZDQ4
MWVjY2FmN2NhMjY2YzYxNjVhYmRmMmRkYTEwN2MxNi4uYzcxZDcyOWEyODE3Y2YwY2ZmZDVkZDZm
YTFhMWIzZDNkMzMzMWU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGxhdGZvcm1QYXN0ZWJvYXJkQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGxhdGZvcm1QYXN0ZWJvYXJkQ29jb2EubW0KQEAgLTQwLDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBPcHRpb25hbDxWZWN0b3I8UGFzdGVib2FyZEl0ZW1JbmZvPj4g
UGxhdGZvcm1QYXN0ZWJvYXJkOjphbGxQYXN0ZWJvYXJkSXRlbUluZm8oaW50NjRfdCBjaGFuZ2VD
b3VudCkKIHsKLSAgICBpZiAoY2hhbmdlQ291bnQgIT0gW21fcGFzdGVib2FyZCBjaGFuZ2VDb3Vu
dF0pCisgICAgaWYgKGNoYW5nZUNvdW50ICE9IHRoaXMtPmNoYW5nZUNvdW50KCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UGFzdGVib2FyZEl0ZW1JbmZvPiBp
dGVtSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9y
bVBhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1Q
YXN0ZWJvYXJkSU9TLm1tCmluZGV4IGY5ZDhkOTJjMTZjN2U2N2M5MDc2NDFhMTM4YmUwZjVlZjdm
ZThiOTkuLjI1YzRlY2RjZmZhYzAyMDA2OTA2YzZlYzNiOGNjZTM3MTZmMDI1MTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQpAQCAtNDAsNyArNDAsOSBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbWFnZS5oPgogI2ltcG9ydCA8
VUlLaXQvVUlQYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9VSUtpdFNQSS5oPgor
I2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNp
bXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9ydCA8
d3RmL2NvY29hL05TVVJMRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aD4KQEAgLTQ4LDEwICs1MCw2IEBACiAKICNpbXBvcnQgPHBhbC9pb3MvVUlLaXRTb2Z0TGluay5o
PgogCi0jZGVmaW5lIFBBU1RFQk9BUkRfU1VQUE9SVFNfSVRFTV9QUk9WSURFUlMgKFBMQVRGT1JN
KElPU19GQU1JTFkpICYmICEoUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikp
KQotI2RlZmluZSBQQVNURUJPQVJEX1NVUFBPUlRTX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVB
TV9EQVRBIChQQVNURUJPQVJEX1NVUFBPUlRTX0lURU1fUFJPVklERVJTICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkpCi0jZGVmaW5lIE5TVVJMX1NVUFBPUlRTX1RJVExFICghUExBVEZPUk0oTUFD
Q0FUQUxZU1QpKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsYXRmb3JtUGFzdGVib2FyZDo6
UGxhdGZvcm1QYXN0ZWJvYXJkKCkKQEAgLTU5LDggKzU3LDEzIEBAIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKCkKIHsKIH0KIAotI2lmIFBBU1RFQk9BUkRfU1VQUE9SVFNf
SVRFTV9QUk9WSURFUlMKKyNpZiBIQVZFKFBBU1RFQk9BUkRfSVRFTV9QUk9WSURFUlMpCisjaWYg
SEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCitQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3Jt
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3RlYm9hcmREYXRhT3duZXIgZGF0YU93
bmVyKQorICAgIDogbV9kYXRhT3duZXIoZGF0YU93bmVyKQorI2Vsc2UKIFBsYXRmb3JtUGFzdGVi
b2FyZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgbmFtZSkKKyNlbmRpZgogewog
ICAgIGlmIChuYW1lID09IFBhc3RlYm9hcmQ6Om5hbWVPZkRyYWdQYXN0ZWJvYXJkKCkpCiAgICAg
ICAgIG1fcGFzdGVib2FyZCA9IFtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3Rh
bmNlXTsKQEAgLTY4LDIyICs3MSw5MiBAQCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFz
dGVib2FyZChjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgICAgIG1fcGFzdGVib2FyZCA9IFtQQUw6
OmdldFVJUGFzdGVib2FyZENsYXNzKCkgZ2VuZXJhbFBhc3RlYm9hcmRdOwogfQogI2Vsc2UKKyNp
ZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKK1BsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZv
cm1QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYsIFBhc3RlYm9hcmREYXRhT3duZXIgZGF0YU93bmVy
KQorICAgIDogbV9kYXRhT3duZXIoZGF0YU93bmVyKQorI2Vsc2UKIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCisjZW5kaWYKICAgICA6IG1fcGFz
dGVib2FyZChbUEFMOjpnZXRVSVBhc3RlYm9hcmRDbGFzcygpIGdlbmVyYWxQYXN0ZWJvYXJkXSkK
IHsKIH0KICNlbmRpZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGU+CitzdGF0aWMgUmV0dXJuVHlwZSBwZXJmb3JtQXNEYXRh
T3duZXIoUGFzdGVib2FyZERhdGFPd25lciBjb3JlVHlwZSwgRnVuY3Rpb248UmV0dXJuVHlwZSgp
PiYmIGFjdGlvbnMpCit7CisgICAgaWYgKGNvcmVUeXBlID09IFBhc3RlYm9hcmREYXRhT3duZXI6
OlVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIGFjdGlvbnMoKTsKKworICAgIHN0YXRpYyBPcHRp
b25hbDxQYXN0ZWJvYXJkRGF0YU93bmVyPiBjdXJyZW50RGF0YU93bmVyOworICAgIGlmIChjdXJy
ZW50RGF0YU93bmVyKSB7CisgICAgICAgIEFTU0VSVCgqY3VycmVudERhdGFPd25lciA9PSBjb3Jl
VHlwZSk7CisgICAgICAgIHJldHVybiBhY3Rpb25zKCk7CisgICAgfQorCisgICAgU2V0Rm9yU2Nv
cGU8T3B0aW9uYWw8UGFzdGVib2FyZERhdGFPd25lcj4+IGRhdGFPd25lclNjb3BlKGN1cnJlbnRE
YXRhT3duZXIsIG1ha2VPcHRpb25hbChjb3JlVHlwZSkpOworCisgICAgYXV0byBkYXRhT3duZXIg
PSBfVUlEYXRhT3duZXJVbmRlZmluZWQ7CisgICAgc3dpdGNoIChjb3JlVHlwZSkgeworICAgIGNh
c2UgUGFzdGVib2FyZERhdGFPd25lcjo6VW5kZWZpbmVkOgorICAgICAgICBkYXRhT3duZXIgPSBf
VUlEYXRhT3duZXJVbmRlZmluZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFzdGVib2Fy
ZERhdGFPd25lcjo6VXNlcjoKKyAgICAgICAgZGF0YU93bmVyID0gX1VJRGF0YU93bmVyVXNlcjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXN0ZWJvYXJkRGF0YU93bmVyOjpFbnRlcnByaXNl
OgorICAgICAgICBkYXRhT3duZXIgPSBfVUlEYXRhT3duZXJFbnRlcnByaXNlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBhc3RlYm9hcmREYXRhT3duZXI6OlNoYXJlZDoKKyAgICAgICAgZGF0
YU93bmVyID0gX1VJRGF0YU93bmVyU2hhcmVkOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3ZvaWQ8UmV0dXJuVHlwZT46OnZhbHVlKSB7Cisg
ICAgICAgIGF1dG8gYWN0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoV1RGTW92ZShhY3Rpb25zKSk7
CisgICAgICAgIFtQQUw6OmdldFVJUGFzdGVib2FyZENsYXNzKCkgX3BlcmZvcm1Bc0RhdGFPd25l
cjpkYXRhT3duZXIgYmxvY2s6YWN0aW9uQmxvY2suZ2V0KCldOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICBbUEFMOjpnZXRVSVBhc3RlYm9hcmRDbGFz
cygpIF9wZXJmb3JtQXNEYXRhT3duZXI6ZGF0YU93bmVyIGJsb2NrOlsmXSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBhY3Rpb25zKCk7CisgICAgICAgIH1dOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KK30KKworI2VuZGlmIC8vIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCiB2
b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKQog
ewotICAgIHR5cGVzID0gbWFrZVZlY3RvcjxTdHJpbmc+KFttX3Bhc3RlYm9hcmQgcGFzdGVib2Fy
ZFR5cGVzXSk7CisgICAgYXV0byBnZXRUeXBlcyA9IFsmXSB7CisgICAgICAgIHJldHVybiBtYWtl
VmVjdG9yPFN0cmluZz4oW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZXNdKTsKKyAgICB9Owor
CisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgdHlwZXMgPSBwZXJmb3JtQXNE
YXRhT3duZXI8VmVjdG9yPFN0cmluZz4+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKGdldFR5cGVzKSk7
CisjZWxzZQorICAgIHR5cGVzID0gZ2V0VHlwZXMoKTsKKyNlbmRpZgogfQogCiBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQogewotICAgIGlmIChOU0RhdGEgKmRhdGEgPSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQ
YXN0ZWJvYXJkVHlwZTp0eXBlXSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEpOwotICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gZ2V0QnVmZmVyRm9yVHlwZSA9
IFsmXSgpIC0+IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHsKKyAgICAgICAgaWYgKE5TRGF0YSAqZGF0
YSA9IFttX3Bhc3RlYm9hcmQgZGF0YUZvclBhc3RlYm9hcmRUeXBlOnR5cGVdKQorICAgICAgICAg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9OworCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgcmV0
dXJuIHBlcmZvcm1Bc0RhdGFPd25lcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4obV9kYXRhT3duZXIs
IFdURk1vdmUoZ2V0QnVmZmVyRm9yVHlwZSkpOworI2Vsc2UKKyAgICByZXR1cm4gZ2V0QnVmZmVy
Rm9yVHlwZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRo
bmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikgY29uc3QKQEAgLTky
LDcgKzE2NSwxNSBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0UGF0aG5hbWVzRm9yVHlw
ZShWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpIGNvbgogCiBpbnQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fcGFzdGVib2Fy
ZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKG51bWJlck9mRmlsZXMpXSA/IFttX3Bhc3Rl
Ym9hcmQgbnVtYmVyT2ZGaWxlc10gOiAwOworICAgIGF1dG8gZ2V0TnVtYmVyT2ZGaWxlcyA9IFsm
XSgpIC0+IGludCB7CisgICAgICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobnVtYmVyT2ZGaWxlcyldID8gW21fcGFzdGVib2FyZCBudW1iZXJPZkZp
bGVzXSA6IDA7CisgICAgfTsKKworI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAg
IHJldHVybiBwZXJmb3JtQXNEYXRhT3duZXI8aW50PihtX2RhdGFPd25lciwgV1RGTW92ZShnZXRO
dW1iZXJPZkZpbGVzKSk7CisjZWxzZQorICAgIHJldHVybiBnZXROdW1iZXJPZkZpbGVzKCk7Cisj
ZW5kaWYKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBdExlYXN0T25lVHlwZUFzRmlsZShO
U0FycmF5PE5TU3RyaW5nICo+ICpwbGF0Zm9ybVR5cGVzKQpAQCAtMTA0LDcgKzE4NSw3IEBAIHN0
YXRpYyBib29sIHNob3VsZFRyZWF0QXRMZWFzdE9uZVR5cGVBc0ZpbGUoTlNBcnJheTxOU1N0cmlu
ZyAqPiAqcGxhdGZvcm1UeXBlcykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBQQVNURUJP
QVJEX1NVUFBPUlRTX0lURU1fUFJPVklERVJTCisjaWYgSEFWRShQQVNURUJPQVJEX0lURU1fUFJP
VklERVJTKQogCiBzdGF0aWMgY29uc3QgY2hhciAqc2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0
ZUZvclBsYXRmb3JtVHlwZShjb25zdCBTdHJpbmcmIHBsYXRmb3JtVHlwZSwgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpJbmNsdWRlSW1hZ2VUeXBlcyBpbmNsdWRlSW1hZ2VUeXBlcykKIHsKQEAgLTE1Miw3
ICsyMzMsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICByZXR1cm4g
Y29weVRvVmVjdG9yKGRvbVBhc3RlYm9hcmRUeXBlcyk7CiB9CiAKLSNpZiBQQVNURUJPQVJEX1NV
UFBPUlRTX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBCisjaWYgSEFWRShQQVNURUJP
QVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBKQogCiBzdGF0aWMgUGFzdGVib2Fy
ZEl0ZW1QcmVzZW50YXRpb25TdHlsZSBwYXN0ZWJvYXJkSXRlbVByZXNlbnRhdGlvblN0eWxlKFVJ
UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUgc3R5bGUpCiB7CkBAIC0xNjksODYgKzI1MCw5NCBA
QCBzdGF0aWMgUGFzdGVib2FyZEl0ZW1QcmVzZW50YXRpb25TdHlsZSBwYXN0ZWJvYXJkSXRlbVBy
ZXNlbnRhdGlvblN0eWxlKFVJUHJlZmVycgogICAgIH0KIH0KIAotI2VuZGlmIC8vIFBBU1RFQk9B
UkRfU1VQUE9SVFNfUFJFU0VOVEFUSU9OX1NUWUxFX0FORF9URUFNX0RBVEEKKyNlbmRpZiAvLyBI
QVZFKFBBU1RFQk9BUkRfUFJFU0VOVEFUSU9OX1NUWUxFX0FORF9URUFNX0RBVEEpCiAKIE9wdGlv
bmFsPFBhc3RlYm9hcmRJdGVtSW5mbz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjppbmZvcm1hdGlvbkZv
ckl0ZW1BdEluZGV4KHNpemVfdCBpbmRleCwgaW50NjRfdCBjaGFuZ2VDb3VudCkKIHsKLSAgICBp
ZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oW21fcGFzdGVib2FyZCBudW1iZXJP
Zkl0ZW1zXSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAodGhpcy0+
Y2hhbmdlQ291bnQoKSAhPSBjaGFuZ2VDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIFBhc3RlYm9hcmRJdGVtSW5mbyBpbmZvOwotICAgIE5TSXRlbVByb3ZpZGVyICpp
dGVtUHJvdmlkZXIgPSBbW21fcGFzdGVib2FyZCBpdGVtUHJvdmlkZXJzXSBvYmplY3RBdEluZGV4
OmluZGV4XTsKLSAgICBpZiAoW21fcGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGZpbGVVcGxvYWRVUkxzQXRJbmRleDpmaWxlVHlwZXM6KV0pIHsKLSAgICAgICAgTlNBcnJh
eTxOU1N0cmluZyAqPiAqZmlsZVR5cGVzID0gbmlsOwotICAgICAgICBOU0FycmF5ICp1cmxzID0g
W21fcGFzdGVib2FyZCBmaWxlVXBsb2FkVVJMc0F0SW5kZXg6aW5kZXggZmlsZVR5cGVzOiZmaWxl
VHlwZXNdOwotICAgICAgICBBU1NFUlQoZmlsZVR5cGVzLmNvdW50ID09IHVybHMuY291bnQpOwot
Ci0gICAgICAgIGluZm8ucGF0aHNGb3JGaWxlVXBsb2FkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
dXJscy5jb3VudCk7Ci0gICAgICAgIGZvciAoTlNVUkwgKnVybCBpbiB1cmxzKQotICAgICAgICAg
ICAgaW5mby5wYXRoc0ZvckZpbGVVcGxvYWQudW5jaGVja2VkQXBwZW5kKHVybC5wYXRoKTsKLQot
ICAgICAgICBpbmZvLnBsYXRmb3JtVHlwZXNGb3JGaWxlVXBsb2FkLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZmlsZVR5cGVzLmNvdW50KTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqZmlsZVR5cGUg
aW4gZmlsZVR5cGVzKQotICAgICAgICAgICAgaW5mby5wbGF0Zm9ybVR5cGVzRm9yRmlsZVVwbG9h
ZC51bmNoZWNrZWRBcHBlbmQoZmlsZVR5cGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TQXJy
YXkgKmZpbGVUeXBlcyA9IGl0ZW1Qcm92aWRlci53ZWJfZmlsZVVwbG9hZENvbnRlbnRUeXBlczsK
LSAgICAgICAgaW5mby5wbGF0Zm9ybVR5cGVzRm9yRmlsZVVwbG9hZC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGZpbGVUeXBlcy5jb3VudCk7Ci0gICAgICAgIGluZm8ucGF0aHNGb3JGaWxlVXBsb2Fk
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZVR5cGVzLmNvdW50KTsKLSAgICAgICAgZm9yIChO
U1N0cmluZyAqZmlsZVR5cGUgaW4gZmlsZVR5cGVzKSB7Ci0gICAgICAgICAgICBpbmZvLnBsYXRm
b3JtVHlwZXNGb3JGaWxlVXBsb2FkLnVuY2hlY2tlZEFwcGVuZChmaWxlVHlwZSk7Ci0gICAgICAg
ICAgICBpbmZvLnBhdGhzRm9yRmlsZVVwbG9hZC51bmNoZWNrZWRBcHBlbmQoeyB9KTsKKyAgICBh
dXRvIGdldEluZm9ybWF0aW9uID0gWyZdKCkgLT4gT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZv
PiB7CisgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihbbV9wYXN0
ZWJvYXJkIG51bWJlck9mSXRlbXNdKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAgICAgaWYgKHRoaXMtPmNoYW5nZUNvdW50KCkgIT0gY2hhbmdlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIFBhc3RlYm9hcmRJdGVtSW5m
byBpbmZvOworICAgICAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW1ttX3Bhc3Rl
Ym9hcmQgaXRlbVByb3ZpZGVyc10gb2JqZWN0QXRJbmRleDppbmRleF07CisgICAgICAgIGlmIChb
bV9wYXN0ZWJvYXJkIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZmlsZVVwbG9hZFVSTHNB
dEluZGV4OmZpbGVUeXBlczopXSkgeworICAgICAgICAgICAgTlNBcnJheTxOU1N0cmluZyAqPiAq
ZmlsZVR5cGVzID0gbmlsOworICAgICAgICAgICAgTlNBcnJheSAqdXJscyA9IFttX3Bhc3RlYm9h
cmQgZmlsZVVwbG9hZFVSTHNBdEluZGV4OmluZGV4IGZpbGVUeXBlczomZmlsZVR5cGVzXTsKKyAg
ICAgICAgICAgIEFTU0VSVChmaWxlVHlwZXMuY291bnQgPT0gdXJscy5jb3VudCk7CisKKyAgICAg
ICAgICAgIGluZm8ucGF0aHNGb3JGaWxlVXBsb2FkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodXJs
cy5jb3VudCk7CisgICAgICAgICAgICBmb3IgKE5TVVJMICp1cmwgaW4gdXJscykKKyAgICAgICAg
ICAgICAgICBpbmZvLnBhdGhzRm9yRmlsZVVwbG9hZC51bmNoZWNrZWRBcHBlbmQodXJsLnBhdGgp
OworCisgICAgICAgICAgICBpbmZvLnBsYXRmb3JtVHlwZXNGb3JGaWxlVXBsb2FkLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoZmlsZVR5cGVzLmNvdW50KTsKKyAgICAgICAgICAgIGZvciAoTlNTdHJp
bmcgKmZpbGVUeXBlIGluIGZpbGVUeXBlcykKKyAgICAgICAgICAgICAgICBpbmZvLnBsYXRmb3Jt
VHlwZXNGb3JGaWxlVXBsb2FkLnVuY2hlY2tlZEFwcGVuZChmaWxlVHlwZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBOU0FycmF5ICpmaWxlVHlwZXMgPSBpdGVtUHJvdmlkZXIud2Vi
X2ZpbGVVcGxvYWRDb250ZW50VHlwZXM7CisgICAgICAgICAgICBpbmZvLnBsYXRmb3JtVHlwZXNG
b3JGaWxlVXBsb2FkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZVR5cGVzLmNvdW50KTsKKyAg
ICAgICAgICAgIGluZm8ucGF0aHNGb3JGaWxlVXBsb2FkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZmlsZVR5cGVzLmNvdW50KTsKKyAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmZpbGVUeXBlIGlu
IGZpbGVUeXBlcykgeworICAgICAgICAgICAgICAgIGluZm8ucGxhdGZvcm1UeXBlc0ZvckZpbGVV
cGxvYWQudW5jaGVja2VkQXBwZW5kKGZpbGVUeXBlKTsKKyAgICAgICAgICAgICAgICBpbmZvLnBh
dGhzRm9yRmlsZVVwbG9hZC51bmNoZWNrZWRBcHBlbmQoeyB9KTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgIH0KIAotI2lmIFBBU1RFQk9BUkRfU1VQUE9SVFNfUFJFU0VOVEFUSU9OX1NU
WUxFX0FORF9URUFNX0RBVEEKLSAgICBpbmZvLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlID0g
cGFzdGVib2FyZEl0ZW1QcmVzZW50YXRpb25TdHlsZShpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGUpOworI2lmIEhBVkUoUEFTVEVCT0FSRF9QUkVTRU5UQVRJT05fU1RZTEVf
QU5EX1RFQU1fREFUQSkKKyAgICAgICAgaW5mby5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSA9
IHBhc3RlYm9hcmRJdGVtUHJlc2VudGF0aW9uU3R5bGUoaXRlbVByb3ZpZGVyLnByZWZlcnJlZFBy
ZXNlbnRhdGlvblN0eWxlKTsKICNlbmRpZgotICAgIGlmICghQ0dTaXplRXF1YWxUb1NpemUoaXRl
bVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUsIENHU2l6ZVplcm8pKSB7Ci0gICAg
ICAgIGF1dG8gYWRqdXN0ZWRQcmVmZXJyZWRQcmVzZW50YXRpb25IZWlnaHQgPSBbXShhdXRvIGhl
aWdodCkgLT4gT3B0aW9uYWw8ZG91YmxlPiB7Ci0gICAgICAgICAgICBpZiAoIUlPU0FwcGxpY2F0
aW9uOjppc01vYmlsZU1haWwoKSAmJiAhSU9TQXBwbGljYXRpb246OmlzTWFpbENvbXBvc2l0aW9u
U2VydmljZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IGhlaWdodCB9OwotICAgICAgICAg
ICAgLy8gTWFpbCdzIG1heC13aWR0aDogMTAwJTsgZGVmYXVsdCBzdHlsZSBpcyBpbiBjb25mbGlj
dCB3aXRoIHRoZSBwcmVmZXJyZWQgcHJlc2VudGF0aW9uIHNpemUgYW5kIGNhbiBsZWFkIHRvIHVu
ZXhwZWN0ZWRseSBzdHJldGNoZWQgaW1hZ2VzLiBOb3Qgc2V0dGluZyB0aGUgaGVpZ2h0IGZvcmNl
cyBsYXlvdXQgdG8gcHJlc2VydmUgdGhlIGFzcGVjdCByYXRpby4KLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgIH07Ci0gICAgICAgIGluZm8ucHJlZmVycmVkUHJlc2VudGF0aW9uU2l6
ZSA9IFByZXNlbnRhdGlvblNpemUgeyBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9u
U2l6ZS53aWR0aCwgYWRqdXN0ZWRQcmVmZXJyZWRQcmVzZW50YXRpb25IZWlnaHQoaXRlbVByb3Zp
ZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblNpemUuaGVpZ2h0KSB9OwotICAgIH0KLSAgICBpbmZv
LmNvbnRhaW5zRmlsZVVSTEFuZEZpbGVVcGxvYWRDb250ZW50ID0gaXRlbVByb3ZpZGVyLndlYl9j
b250YWluc0ZpbGVVUkxBbmRGaWxlVXBsb2FkQ29udGVudDsKLSAgICBpbmZvLnN1Z2dlc3RlZEZp
bGVOYW1lID0gaXRlbVByb3ZpZGVyLnN1Z2dlc3RlZE5hbWU7Ci0gICAgTlNBcnJheTxOU1N0cmlu
ZyAqPiAqcmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycyA9IGl0ZW1Qcm92aWRlci5yZWdpc3RlcmVk
VHlwZUlkZW50aWZpZXJzOwotICAgIGluZm8ucGxhdGZvcm1UeXBlc0J5RmlkZWxpdHkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShyZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzLmNvdW50KTsKLSAgICBm
b3IgKE5TU3RyaW5nICp0eXBlSWRlbnRpZmllciBpbiByZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJz
KSB7Ci0gICAgICAgIGluZm8ucGxhdGZvcm1UeXBlc0J5RmlkZWxpdHkudW5jaGVja2VkQXBwZW5k
KHR5cGVJZGVudGlmaWVyKTsKLSAgICAgICAgQ0ZTdHJpbmdSZWYgY2ZUeXBlSWRlbnRpZmllciA9
IChDRlN0cmluZ1JlZil0eXBlSWRlbnRpZmllcjsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCi0gICAgICAgIGlmICghVVRUeXBlSXNEZWNsYXJlZChjZlR5cGVJZGVudGlmaWVy
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIUNHU2l6ZUVxdWFsVG9TaXpl
KGl0ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLCBDR1NpemVaZXJvKSkgewor
ICAgICAgICAgICAgYXV0byBhZGp1c3RlZFByZWZlcnJlZFByZXNlbnRhdGlvbkhlaWdodCA9IFtd
KGF1dG8gaGVpZ2h0KSAtPiBPcHRpb25hbDxkb3VibGU+IHsKKyAgICAgICAgICAgICAgICBpZiAo
IUlPU0FwcGxpY2F0aW9uOjppc01vYmlsZU1haWwoKSAmJiAhSU9TQXBwbGljYXRpb246OmlzTWFp
bENvbXBvc2l0aW9uU2VydmljZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBoZWln
aHQgfTsKKyAgICAgICAgICAgICAgICAvLyBNYWlsJ3MgbWF4LXdpZHRoOiAxMDAlOyBkZWZhdWx0
IHN0eWxlIGlzIGluIGNvbmZsaWN0IHdpdGggdGhlIHByZWZlcnJlZCBwcmVzZW50YXRpb24gc2l6
ZSBhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZGx5IHN0cmV0Y2hlZCBpbWFnZXMuIE5vdCBzZXR0
aW5nIHRoZSBoZWlnaHQgZm9yY2VzIGxheW91dCB0byBwcmVzZXJ2ZSB0aGUgYXNwZWN0IHJhdGlv
LgorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgaW5mby5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplID0gUHJlc2VudGF0aW9uU2l6ZSB7IGl0
ZW1Qcm92aWRlci5wcmVmZXJyZWRQcmVzZW50YXRpb25TaXplLndpZHRoLCBhZGp1c3RlZFByZWZl
cnJlZFByZXNlbnRhdGlvbkhlaWdodChpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9u
U2l6ZS5oZWlnaHQpIH07CisgICAgICAgIH0KKyAgICAgICAgaW5mby5jb250YWluc0ZpbGVVUkxB
bmRGaWxlVXBsb2FkQ29udGVudCA9IGl0ZW1Qcm92aWRlci53ZWJfY29udGFpbnNGaWxlVVJMQW5k
RmlsZVVwbG9hZENvbnRlbnQ7CisgICAgICAgIGluZm8uc3VnZ2VzdGVkRmlsZU5hbWUgPSBpdGVt
UHJvdmlkZXIuc3VnZ2VzdGVkTmFtZTsKKyAgICAgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqcmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVycyA9IGl0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlkZW50
aWZpZXJzOworICAgICAgICBpbmZvLnBsYXRmb3JtVHlwZXNCeUZpZGVsaXR5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkocmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycy5jb3VudCk7CisgICAgICAgIGZv
ciAoTlNTdHJpbmcgKnR5cGVJZGVudGlmaWVyIGluIHJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMp
IHsKKyAgICAgICAgICAgIGluZm8ucGxhdGZvcm1UeXBlc0J5RmlkZWxpdHkudW5jaGVja2VkQXBw
ZW5kKHR5cGVJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIGNmVHlwZUlkZW50
aWZpZXIgPSAoQ0ZTdHJpbmdSZWYpdHlwZUlkZW50aWZpZXI7CisgICAgICAgICAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgaWYgKCFVVFR5cGVJc0Rl
Y2xhcmVkKGNmVHlwZUlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZUlkZW50aWZpZXIsIGtVVFR5cGVUZXh0
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKFVUVHlwZUNvbmZvcm1z
VG8oY2ZUeXBlSWRlbnRpZmllciwga1VUVHlwZVRleHQpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZUlkZW50aWZpZXIsIGtV
VFR5cGVVUkwpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoVVRUeXBl
Q29uZm9ybXNUbyhjZlR5cGVJZGVudGlmaWVyLCBrVVRUeXBlVVJMKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjZlR5cGVJZGVudGlm
aWVyLCBrVVRUeXBlUlRGRCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZUlkZW50aWZpZXIsIGtVVFR5cGVSVEZEKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjZlR5
cGVJZGVudGlmaWVyLCBrVVRUeXBlRmxhdFJURkQpKQotICAgICAgICAgICAgY29udGludWU7Ci1B
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgICAgIGlmIChVVFR5cGVD
b25mb3Jtc1RvKGNmVHlwZUlkZW50aWZpZXIsIGtVVFR5cGVGbGF0UlRGRCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKIAotICAgICAgICBpbmZvLmlzTm9uVGV4dFR5cGUgPSB0cnVlOwotICAgIH0KKyAgICAg
ICAgICAgIGluZm8uaXNOb25UZXh0VHlwZSA9IHRydWU7CisgICAgICAgIH0KIAotICAgIGluZm8u
d2ViU2FmZVR5cGVzQnlGaWRlbGl0eSA9IHdlYlNhZmVUeXBlcyhyZWdpc3RlcmVkVHlwZUlkZW50
aWZpZXJzLCBJbmNsdWRlSW1hZ2VUeXBlczo6WWVzLCBbJl0gewotQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgcmV0dXJuIHNob3VsZFRyZWF0QXRMZWFzdE9uZVR5
cGVBc0ZpbGUocmVnaXN0ZXJlZFR5cGVJZGVudGlmaWVycykgJiYgIVBhc3RlYm9hcmQ6OmNhbkV4
cG9zZVVSTFRvRE9NV2hlblBhc3RlYm9hcmRDb250YWluc0ZpbGVzKHJlYWRTdHJpbmcoaW5kZXgs
IGtVVFR5cGVVUkwpKTsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIH0p
OworICAgICAgICBpbmZvLndlYlNhZmVUeXBlc0J5RmlkZWxpdHkgPSB3ZWJTYWZlVHlwZXMocmVn
aXN0ZXJlZFR5cGVJZGVudGlmaWVycywgSW5jbHVkZUltYWdlVHlwZXM6OlllcywgWyZdIHsKKyAg
ICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAg
ICByZXR1cm4gc2hvdWxkVHJlYXRBdExlYXN0T25lVHlwZUFzRmlsZShyZWdpc3RlcmVkVHlwZUlk
ZW50aWZpZXJzKSAmJiAhUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9ET01XaGVuUGFzdGVib2Fy
ZENvbnRhaW5zRmlsZXMocmVhZFN0cmluZyhpbmRleCwga1VUVHlwZVVSTCkpOworICAgICAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAgIH0pOwogCi0gICAg
cmV0dXJuIGluZm87CisgICAgICAgIHJldHVybiBpbmZvOworICAgIH07CisKKyNpZiBIQVZFKFBB
U1RFQk9BUkRfREFUQV9PV05FUikKKyAgICByZXR1cm4gcGVyZm9ybUFzRGF0YU93bmVyPE9wdGlv
bmFsPFBhc3RlYm9hcmRJdGVtSW5mbz4+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKGdldEluZm9ybWF0
aW9uKSk7CisjZWxzZQorICAgIHJldHVybiBnZXRJbmZvcm1hdGlvbigpOworI2VuZGlmCiB9CiAK
ICNlbHNlCkBAIC0yNjIsNyArMzUxLDcgQEAgT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZvPiBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoc2l6ZV8KIAogc3Rh
dGljIGJvb2wgcGFzdGVib2FyZE1heUNvbnRhaW5GaWxlUGF0aHMoaWQ8QWJzdHJhY3RQYXN0ZWJv
YXJkPiBwYXN0ZWJvYXJkKQogewotI2lmIFBBU1RFQk9BUkRfU1VQUE9SVFNfSVRFTV9QUk9WSURF
UlMKKyNpZiBIQVZFKFBBU1RFQk9BUkRfSVRFTV9QUk9WSURFUlMpCiAgICAgaWYgKFtwYXN0ZWJv
YXJkIGlzS2luZE9mQ2xhc3M6W1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgY2xhc3NdXSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0yNzEsMjMgKzM2MCwzOSBAQCBzdGF0aWMg
Ym9vbCBwYXN0ZWJvYXJkTWF5Q29udGFpbkZpbGVQYXRocyhpZDxBYnN0cmFjdFBhc3RlYm9hcmQ+
IHBhc3RlYm9hcmQpCiAKIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewotICAgIGF1dG8gcmVzdWx0ID0gcmVhZFN0cmlu
ZygwLCB0eXBlKTsKKyAgICBhdXRvIGdldFN0cmluZ0ZvclR5cGUgPSBbJl0oKSAtPiBTdHJpbmcg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlYWRTdHJpbmcoMCwgdHlwZSk7CiAKLUFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKHBhc3RlYm9hcmRNYXlDb250YWlu
RmlsZVBhdGhzKG1fcGFzdGVib2FyZC5nZXQoKSkgJiYgdHlwZSA9PSBTdHJpbmcgeyBrVVRUeXBl
VVJMIH0pIHsKLSAgICAgICAgaWYgKCFQYXN0ZWJvYXJkOjpjYW5FeHBvc2VVUkxUb0RPTVdoZW5Q
YXN0ZWJvYXJkQ29udGFpbnNGaWxlcyhyZXN1bHQpKQotICAgICAgICAgICAgcmVzdWx0ID0geyB9
OwotICAgIH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZiAocGFzdGVib2FyZE1h
eUNvbnRhaW5GaWxlUGF0aHMobV9wYXN0ZWJvYXJkLmdldCgpKSAmJiB0eXBlID09IFN0cmluZyB7
IGtVVFR5cGVVUkwgfSkgeworICAgICAgICAgICAgaWYgKCFQYXN0ZWJvYXJkOjpjYW5FeHBvc2VV
UkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyhyZXN1bHQpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHsgfTsKKyAgICAgICAgfQorICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CiAKLSAgICBy
ZXR1cm4gcmVzdWx0OworI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIHJldHVy
biBwZXJmb3JtQXNEYXRhT3duZXI8U3RyaW5nPihtX2RhdGFPd25lciwgV1RGTW92ZShnZXRTdHJp
bmdGb3JUeXBlKSk7CisjZWxzZQorICAgIHJldHVybiBnZXRTdHJpbmdGb3JUeXBlKCk7CisjZW5k
aWYKIH0KIAogQ29sb3IgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb2xvcigpCiB7Ci0gICAgTlNEYXRh
ICpkYXRhID0gW21fcGFzdGVib2FyZCBkYXRhRm9yUGFzdGVib2FyZFR5cGU6VUlDb2xvclBib2Fy
ZFR5cGVdOwotICAgIFVJQ29sb3IgKnVpQ29sb3IgPSBbTlNLZXllZFVuYXJjaGl2ZXIgdW5hcmNo
aXZlZE9iamVjdE9mQ2xhc3M6UEFMOjpnZXRVSUNvbG9yQ2xhc3MoKSBmcm9tRGF0YTpkYXRhIGVy
cm9yOm5pbF07Ci0gICAgcmV0dXJuIENvbG9yKHVpQ29sb3IuQ0dDb2xvcik7CisgICAgYXV0byBn
ZXRDb2xvciA9IFsmXSB7CisgICAgICAgIE5TRGF0YSAqZGF0YSA9IFttX3Bhc3RlYm9hcmQgZGF0
YUZvclBhc3RlYm9hcmRUeXBlOlVJQ29sb3JQYm9hcmRUeXBlXTsKKyAgICAgICAgVUlDb2xvciAq
dWlDb2xvciA9IFtOU0tleWVkVW5hcmNoaXZlciB1bmFyY2hpdmVkT2JqZWN0T2ZDbGFzczpQQUw6
OmdldFVJQ29sb3JDbGFzcygpIGZyb21EYXRhOmRhdGEgZXJyb3I6bmlsXTsKKyAgICAgICAgcmV0
dXJuIENvbG9yKHVpQ29sb3IuQ0dDb2xvcik7CisgICAgfTsKKworI2lmIEhBVkUoUEFTVEVCT0FS
RF9EQVRBX09XTkVSKQorICAgIHJldHVybiBwZXJmb3JtQXNEYXRhT3duZXI8Q29sb3I+KG1fZGF0
YU93bmVyLCBXVEZNb3ZlKGdldENvbG9yKSk7CisjZWxzZQorICAgIHJldHVybiBnZXRDb2xvcigp
OworI2VuZGlmCiB9CiAKIFVSTCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVybCgpCkBAIC0zMjcsNyAr
NDMyLDE1IEBAIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAKIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJk
OjpjaGFuZ2VDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQgY2hhbmdl
Q291bnRdOworICAgIGF1dG8gZ2V0Q2hhbmdlQ291bnQgPSBbJl0oKSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQgY2hhbmdlQ291bnRdOworICAgIH07CisKKyNpZiBI
QVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICByZXR1cm4gcGVyZm9ybUFzRGF0YU93bmVy
PGludDY0X3Q+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKGdldENoYW5nZUNvdW50KSk7CisjZWxzZQor
ICAgIHJldHVybiBnZXRDaGFuZ2VDb3VudCgpOworI2VuZGlmCiB9CiAKIFN0cmluZyBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBsYXRmb3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgSW5jbHVkZUltYWdlVHlwZXMgaW5jbHVk
ZUltYWdlVHlwZXMpCkBAIC0zNDksNyArNDYyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECiAgICAgcmV0dXJuIHsgfTsKIH0KIAotI2lmIFBBU1RFQk9BUkRfU1VQUE9SVFNf
SVRFTV9QUk9WSURFUlMKKyNpZiBIQVZFKFBBU1RFQk9BUkRfSVRFTV9QUk9WSURFUlMpCiAKIHN0
YXRpYyBOU1N0cmluZyAqd2ViSU9TUGFzdGVQYm9hcmRUeXBlID0gQCJpT1MgcmljaCBjb250ZW50
IHBhc3RlIHBhc3RlYm9hcmQgdHlwZSI7CiAKQEAgLTM5MiwxMSArNTA1LDIwIEBAIHN0YXRpYyB2
b2lkIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25J
bmZvTGlzdCAqcmVwcmVzCiAKIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
ID0gYWRvcHROUyhbW1dlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0IGFsbG9jXSBp
bml0XSk7Ci0gICAgVUlDb2xvciAqdWlDb2xvciA9IFtQQUw6OmdldFVJQ29sb3JDbGFzcygpIGNv
bG9yV2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihjb2xvcildOwotICAgIFtyZXByZXNlbnRhdGlv
bnNUb1JlZ2lzdGVyIGFkZERhdGE6W05TS2V5ZWRBcmNoaXZlciBhcmNoaXZlZERhdGFXaXRoUm9v
dE9iamVjdDp1aUNvbG9yIHJlcXVpcmluZ1NlY3VyZUNvZGluZzpOTyBlcnJvcjpuaWxdIGZvclR5
cGU6VUlDb2xvclBib2FyZFR5cGVdOwotICAgIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChyZXBy
ZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOwotICAgIHJl
dHVybiAwOworICAgIGF1dG8gc2V0Q29sb3IgPSBbJl0geworICAgICAgICBhdXRvIHJlcHJlc2Vu
dGF0aW9uc1RvUmVnaXN0ZXIgPSBhZG9wdE5TKFtbV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9u
SW5mb0xpc3QgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgVUlDb2xvciAqdWlDb2xvciA9IFtQQUw6
OmdldFVJQ29sb3JDbGFzcygpIGNvbG9yV2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihjb2xvcild
OworICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRhOltOU0tleWVkQXJj
aGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6dWlDb2xvciByZXF1aXJpbmdTZWN1cmVD
b2Rpbmc6Tk8gZXJyb3I6bmlsXSBmb3JUeXBlOlVJQ29sb3JQYm9hcmRUeXBlXTsKKyAgICAgICAg
cmVnaXN0ZXJJdGVtVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCks
IG1fcGFzdGVib2FyZC5nZXQoKSk7CisgICAgfTsKKworI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRB
X09XTkVSKQorICAgIHBlcmZvcm1Bc0RhdGFPd25lcjx2b2lkPihtX2RhdGFPd25lciwgV1RGTW92
ZShzZXRDb2xvcikpOworI2Vsc2UKKyAgICBzZXRDb2xvcigpOworI2VuZGlmCisKKyAgICByZXR1
cm4gY2hhbmdlQ291bnQoKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkUmVwcmVzZW50YXRpb25zRm9y
UGxhaW5UZXh0KFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICppdGVtc1RvUmVn
aXN0ZXIsIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KQpAQCAtNDEzLDE0MSArNTM1LDE4MCBAQCBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiB9CiAKLWJvb2wgUGxhdGZvcm1QYXN0ZWJvYXJkOjphbGxvd1JlYWRpbmdV
UkxBdEluZGV4KGNvbnN0IFVSTCYgdXJsLCBpbnQgaW5kZXgpIGNvbnN0Citib29sIFBsYXRmb3Jt
UGFzdGVib2FyZDo6c2hvdWxkQWxsb3dSZWFkaW5nVVJMQXRJbmRleChjb25zdCBVUkwmIHVybCwg
aW50IGluZGV4KSBjb25zdAogewotICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSAo
TlNVSW50ZWdlcilpbmRleCA8IFttX3Bhc3RlYm9hcmQgaXRlbVByb3ZpZGVyc10uY291bnQgPyBb
W21fcGFzdGVib2FyZCBpdGVtUHJvdmlkZXJzXSBvYmplY3RBdEluZGV4OmluZGV4XSA6IG5pbDsK
LSAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIGl0ZW1Qcm92aWRlci5yZWdpc3RlcmVkVHlwZUlk
ZW50aWZpZXJzKSB7Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAg
ICBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpdHlwZSwga1VUVHlwZVVSTCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAotICAgIH0KKyAgICBhdXRvIGdldFNob3VsZEFsbG93UmVhZGluZ1VSTEF0SW5kZXggPSBbJl0g
eworICAgICAgICBOU0l0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gKE5TVUludGVnZXIpaW5k
ZXggPCBbbV9wYXN0ZWJvYXJkIGl0ZW1Qcm92aWRlcnNdLmNvdW50ID8gW1ttX3Bhc3RlYm9hcmQg
aXRlbVByb3ZpZGVyc10gb2JqZWN0QXRJbmRleDppbmRleF0gOiBuaWw7CisgICAgICAgIGZvciAo
TlNTdHJpbmcgKnR5cGUgaW4gaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMp
IHsKKyAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAg
ICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpdHlwZSwga1VUVHlwZVVS
TCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXJsLmlz
VmFsaWQoKTsKKyAgICB9OwogCi0gICAgcmV0dXJuIHVybC5pc1ZhbGlkKCk7CisjaWYgSEFWRShQ
QVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgcmV0dXJuIHBlcmZvcm1Bc0RhdGFPd25lcjxib29s
PihtX2RhdGFPd25lciwgV1RGTW92ZShnZXRTaG91bGRBbGxvd1JlYWRpbmdVUkxBdEluZGV4KSk7
CisjZWxzZQorICAgIHJldHVybiBnZXRTaG91bGRBbGxvd1JlYWRpbmdVUkxBdEluZGV4KCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9h
cmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIGF1dG8gcmVwcmVzZW50YXRpb25zVG9SZWdp
c3RlciA9IGFkb3B0TlMoW1tXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCBhbGxv
Y10gaW5pdF0pOworICAgIGF1dG8gcGVyZm9ybVdyaXRlID0gWyZdIHsKKyAgICAgICAgYXV0byBy
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyID0gYWRvcHROUyhbW1dlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0IGFsbG9jXSBpbml0XSk7CiAKICNpZiAhUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCi0gICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpbd2ViSU9TUGFzdGVQ
Ym9hcmRUeXBlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBmb3JUeXBl
OndlYklPU1Bhc3RlUGJvYXJkVHlwZV07CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lz
dGVyIGFkZERhdGE6W3dlYklPU1Bhc3RlUGJvYXJkVHlwZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ10gZm9yVHlwZTp3ZWJJT1NQYXN0ZVBib2FyZFR5cGVdOwogI2VuZGlm
CiAKLSAgICBBU1NFUlQoY29udGVudC5jbGllbnRUeXBlcy5zaXplKCkgPT0gY29udGVudC5jbGll
bnREYXRhLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBjb250ZW50LmNs
aWVudFR5cGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9u
c1RvUmVnaXN0ZXIgYWRkRGF0YTpjb250ZW50LmNsaWVudERhdGFbaV0tPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGZvclR5cGU6Y29udGVudC5jbGllbnRUeXBlc1tpXV07CisgICAgICAgIEFTU0VSVChj
b250ZW50LmNsaWVudFR5cGVzLnNpemUoKSA9PSBjb250ZW50LmNsaWVudERhdGEuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBjb250ZW50LmNsaWVudFR5cGVzLnNp
emUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lz
dGVyIGFkZERhdGE6Y29udGVudC5jbGllbnREYXRhW2ldLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBm
b3JUeXBlOmNvbnRlbnQuY2xpZW50VHlwZXNbaV1dOwogCi0gICAgaWYgKGNvbnRlbnQuZGF0YUlu
V2ViQXJjaGl2ZUZvcm1hdCkgewotICAgICAgICBhdXRvIHdlYkFyY2hpdmVEYXRhID0gY29udGVu
dC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAgaWYgKGNv
bnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCkgeworICAgICAgICAgICAgYXV0byB3ZWJBcmNo
aXZlRGF0YSA9IGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdC0+Y3JlYXRlTlNEYXRhKCk7
CiAjaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgotICAgICAgICBOU1N0cmluZyAqd2ViQXJjaGl2ZVR5cGUgPSAoX19icmlkZ2UgTlNT
dHJpbmcgKilrVVRUeXBlV2ViQXJjaGl2ZTsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0VORAorICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAg
ICAgICAgICAgIE5TU3RyaW5nICp3ZWJBcmNoaXZlVHlwZSA9IChfX2JyaWRnZSBOU1N0cmluZyAq
KWtVVFR5cGVXZWJBcmNoaXZlOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECiAjZWxzZQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZGl0aW9uYWxs
eSByZWdpc3RlciAiY29tLmFwcGxlLndlYmFyY2hpdmUiIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzQ2
ODMwMjc3PiBpcyBmaXhlZC4KLSAgICAgICAgTlNTdHJpbmcgKndlYkFyY2hpdmVUeXBlID0gV2Vi
QXJjaGl2ZVBib2FyZFR5cGU7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZGl0
aW9uYWxseSByZWdpc3RlciAiY29tLmFwcGxlLndlYmFyY2hpdmUiIG9uY2UgPHJkYXI6Ly9wcm9i
bGVtLzQ2ODMwMjc3PiBpcyBmaXhlZC4KKyAgICAgICAgICAgIE5TU3RyaW5nICp3ZWJBcmNoaXZl
VHlwZSA9IFdlYkFyY2hpdmVQYm9hcmRUeXBlOwogI2VuZGlmCi0gICAgICAgIFtyZXByZXNlbnRh
dGlvbnNUb1JlZ2lzdGVyIGFkZERhdGE6d2ViQXJjaGl2ZURhdGEuZ2V0KCkgZm9yVHlwZTp3ZWJB
cmNoaXZlVHlwZV07Ci0gICAgfQorICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0
ZXIgYWRkRGF0YTp3ZWJBcmNoaXZlRGF0YS5nZXQoKSBmb3JUeXBlOndlYkFyY2hpdmVUeXBlXTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1h
dCkgewotICAgICAgICBpZiAoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0g
W05TS2V5ZWRVbmFyY2hpdmVyIHVuYXJjaGl2ZWRPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdp
dGhPYmplY3Q6TlNBdHRyaWJ1dGVkU3RyaW5nLmNsYXNzXSBmcm9tRGF0YTpjb250ZW50LmRhdGFJ
bkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVycm9yOm51bGxw
dHJdKQotICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkUmVwcmVzZW50
aW5nT2JqZWN0OmF0dHJpYnV0ZWRTdHJpbmddOwotICAgIH0KKyAgICAgICAgaWYgKGNvbnRlbnQu
ZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCkgeworICAgICAgICAgICAgaWYgKE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtOU0tleWVkVW5hcmNoaXZlciB1bmFyY2hp
dmVkT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoT2JqZWN0Ok5TQXR0cmlidXRlZFN0cmlu
Zy5jbGFzc10gZnJvbURhdGE6Y29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0LT5j
cmVhdGVOU0RhdGEoKS5nZXQoKSBlcnJvcjpudWxscHRyXSkKKyAgICAgICAgICAgICAgICBbcmVw
cmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGRSZXByZXNlbnRpbmdPYmplY3Q6YXR0cmlidXRlZFN0
cmluZ107CisgICAgICAgIH0KIAotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
LSAgICBpZiAoY29udGVudC5kYXRhSW5SVEZERm9ybWF0KQotICAgICAgICBbcmVwcmVzZW50YXRp
b25zVG9SZWdpc3RlciBhZGREYXRhOmNvbnRlbnQuZGF0YUluUlRGREZvcm1hdC0+Y3JlYXRlTlNE
YXRhKCkuZ2V0KCkgZm9yVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlRmxhdFJURkRdOworICAgICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZiAoY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0KQorICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0
ZXIgYWRkRGF0YTpjb250ZW50LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgp
IGZvclR5cGU6KE5TU3RyaW5nICopa1VUVHlwZUZsYXRSVEZEXTsKIAotICAgIGlmIChjb250ZW50
LmRhdGFJblJURkZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRk
RGF0YTpjb250ZW50LmRhdGFJblJURkZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yVHlw
ZTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKKyAgICAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRG
Rm9ybWF0KQorICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpj
b250ZW50LmRhdGFJblJURkZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yVHlwZTooTlNT
dHJpbmcgKilrVVRUeXBlUlRGXTsKIAotICAgIGlmICghY29udGVudC5kYXRhSW5IVE1MRm9ybWF0
LmlzRW1wdHkoKSkgewotICAgICAgICBOU0RhdGEgKmh0bWxBc0RhdGEgPSBbKE5TU3RyaW5nICop
Y29udGVudC5kYXRhSW5IVE1MRm9ybWF0IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkRGF0YTpodG1s
QXNEYXRhIGZvclR5cGU6KE5TU3RyaW5nICopa1VUVHlwZUhUTUxdOwotICAgIH0KLUFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICBpZiAoIWNvbnRlbnQuZGF0YUluSFRN
TEZvcm1hdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5TRGF0YSAqaHRtbEFzRGF0YSA9IFso
TlNTdHJpbmcgKiljb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0
ZXIgYWRkRGF0YTpodG1sQXNEYXRhIGZvclR5cGU6KE5TU3RyaW5nICopa1VUVHlwZUhUTUxdOwor
ICAgICAgICB9CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorCisg
ICAgICAgIGlmICghY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgYWRkUmVwcmVzZW50YXRpb25zRm9yUGxhaW5UZXh0KHJlcHJlc2VudGF0aW9uc1RvUmVn
aXN0ZXIuZ2V0KCksIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0KTsKIAotICAgIGlmICghY29u
dGVudC5kYXRhSW5TdHJpbmdGb3JtYXQuaXNFbXB0eSgpKQotICAgICAgICBhZGRSZXByZXNlbnRh
dGlvbnNGb3JQbGFpblRleHQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5nZXQoKSwgY29udGVu
dC5kYXRhSW5TdHJpbmdGb3JtYXQpOworICAgICAgICBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBjdXN0
b21EYXRhOworICAgICAgICBjdXN0b21EYXRhLnNldE9yaWdpbihjb250ZW50LmNvbnRlbnRPcmln
aW4pOworICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRhOmN1c3RvbURh
dGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvclR5cGU6QChQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKIAotICAgIFBhc3RlYm9hcmRDdXN0
b21EYXRhIGN1c3RvbURhdGE7Ci0gICAgY3VzdG9tRGF0YS5zZXRPcmlnaW4oY29udGVudC5jb250
ZW50T3JpZ2luKTsKLSAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRhOmN1c3Rv
bURhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCktPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvclR5cGU6
QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXTsKKyAgICAgICAgcmVnaXN0ZXJJ
dGVtVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCksIG1fcGFzdGVi
b2FyZC5nZXQoKSk7CisgICAgfTsKIAotICAgIHJlZ2lzdGVySXRlbVRvUGFzdGVib2FyZChyZXBy
ZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOworI2lmIEhB
VkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIHBlcmZvcm1Bc0RhdGFPd25lcjx2b2lkPiht
X2RhdGFPd25lciwgV1RGTW92ZShwZXJmb3JtV3JpdGUpKTsKKyNlbHNlCisgICAgcGVyZm9ybVdy
aXRlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQogewotICAgIGF1dG8gcmVwcmVzZW50
YXRpb25zVG9SZWdpc3RlciA9IGFkb3B0TlMoW1tXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25J
bmZvTGlzdCBhbGxvY10gaW5pdF0pOwotCi0gICAgYXV0byYgdHlwZXMgPSBwYXN0ZWJvYXJkSW1h
Z2UuY2xpZW50VHlwZXM7Ci0gICAgYXV0byYgZGF0YSA9IHBhc3RlYm9hcmRJbWFnZS5jbGllbnRE
YXRhOwotICAgIEFTU0VSVCh0eXBlcy5zaXplKCkgPT0gZGF0YS5zaXplKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gdHlwZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGREYXRhOmRhdGFbaV0tPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvclR5cGU6dHlwZXNbaV1dOwotCi0gICAgaWYgKHBhc3RlYm9hcmRJbWFnZS5y
ZXNvdXJjZURhdGEgJiYgIXBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvIHV0aU9yTUlNRVR5cGUgPSBwYXN0ZWJvYXJkSW1hZ2UucmVzb3Vy
Y2VNSU1FVHlwZTsKLSAgICAgICAgaWYgKCFpc0RlY2xhcmVkVVRJKHV0aU9yTUlNRVR5cGUpKQot
ICAgICAgICAgICAgdXRpT3JNSU1FVHlwZSA9IFVUSUZyb21NSU1FVHlwZSh1dGlPck1JTUVUeXBl
KTsKLQotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZURh
dGEtPmNyZWF0ZU5TRGF0YSgpOwotICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBh
ZGREYXRhOmltYWdlRGF0YS5nZXQoKSBmb3JUeXBlOihOU1N0cmluZyAqKXV0aU9yTUlNRVR5cGVd
OwotICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBzZXRQcmVmZXJyZWRQcmVzZW50
YXRpb25TaXplOnBhc3RlYm9hcmRJbWFnZS5pbWFnZVNpemVdOwotICAgICAgICBbcmVwcmVzZW50
YXRpb25zVG9SZWdpc3RlciBzZXRTdWdnZXN0ZWROYW1lOnBhc3RlYm9hcmRJbWFnZS5zdWdnZXN0
ZWROYW1lXTsKLSAgICB9CisgICAgYXV0byBwZXJmb3JtV3JpdGUgPSBbJl0geworICAgICAgICBh
dXRvIHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgPSBhZG9wdE5TKFtbV2ViSXRlbVByb3ZpZGVy
UmVnaXN0cmF0aW9uSW5mb0xpc3QgYWxsb2NdIGluaXRdKTsKKworICAgICAgICBhdXRvJiB0eXBl
cyA9IHBhc3RlYm9hcmRJbWFnZS5jbGllbnRUeXBlczsKKyAgICAgICAgYXV0byYgZGF0YSA9IHBh
c3RlYm9hcmRJbWFnZS5jbGllbnREYXRhOworICAgICAgICBBU1NFUlQodHlwZXMuc2l6ZSgpID09
IGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSB0eXBlcy5z
aXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdp
c3RlciBhZGREYXRhOmRhdGFbaV0tPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvclR5cGU6dHlwZXNb
aV1dOworCisgICAgICAgIGlmIChwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VEYXRhICYmICFwYXN0
ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1
dG8gdXRpT3JNSU1FVHlwZSA9IHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlOworICAg
ICAgICAgICAgaWYgKCFpc0RlY2xhcmVkVVRJKHV0aU9yTUlNRVR5cGUpKQorICAgICAgICAgICAg
ICAgIHV0aU9yTUlNRVR5cGUgPSBVVElGcm9tTUlNRVR5cGUodXRpT3JNSU1FVHlwZSk7CisKKyAg
ICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gcGFzdGVib2FyZEltYWdlLnJlc291cmNlRGF0YS0+
Y3JlYXRlTlNEYXRhKCk7CisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBh
ZGREYXRhOmltYWdlRGF0YS5nZXQoKSBmb3JUeXBlOihOU1N0cmluZyAqKXV0aU9yTUlNRVR5cGVd
OworICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0UHJlZmVycmVkUHJl
c2VudGF0aW9uU2l6ZTpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2VTaXplXTsKKyAgICAgICAgICAgIFty
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIHNldFN1Z2dlc3RlZE5hbWU6cGFzdGVib2FyZEltYWdl
LnN1Z2dlc3RlZE5hbWVdOworICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2hlbiB3cml0aW5n
IGEgUGFzdGVib2FyZEltYWdlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIHBsYWNlIHRoZSBpbWFnZSBk
YXRhIGF0IGEgaGlnZXIgZmlkZWxpdHkgdGhhbiB0aGUKLSAgICAvLyBhc3NvY2lhdGVkIGltYWdl
IFVSTC4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YgYW4gaW1hZ2UgZW5jbG9zZWQgYnkgYW4gYW5j
aG9yLCB3ZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHRoZQotICAgIC8vIHRoZSBVUkwgKGkuZS4g
dGhlIGFuY2hvcidzIGhyZWYgYXR0cmlidXRlKSB0byBiZSBhIGhpZ2hlciBmaWRlbGl0eSByZXBy
ZXNlbnRhdGlvbi4KLSAgICBhdXRvJiBwYXN0ZWJvYXJkVVJMID0gcGFzdGVib2FyZEltYWdlLnVy
bDsKLSAgICBpZiAoTlNVUkwgKm5zVVJMID0gcGFzdGVib2FyZFVSTC51cmwpIHsKLSNpZiBOU1VS
TF9TVVBQT1JUU19USVRMRQotICAgICAgICBuc1VSTC5fdGl0bGUgPSBwYXN0ZWJvYXJkVVJMLnRp
dGxlLmlzRW1wdHkoKSA/IFdURjo6dXNlclZpc2libGVTdHJpbmcocGFzdGVib2FyZFVSTC51cmwp
IDogKE5TU3RyaW5nICopcGFzdGVib2FyZFVSTC50aXRsZTsKKyAgICAgICAgLy8gRklYTUU6IFdo
ZW4gd3JpdGluZyBhIFBhc3RlYm9hcmRJbWFnZSwgd2UgY3VycmVudGx5IGFsd2F5cyBwbGFjZSB0
aGUgaW1hZ2UgZGF0YSBhdCBhIGhpZ2VyIGZpZGVsaXR5IHRoYW4gdGhlCisgICAgICAgIC8vIGFz
c29jaWF0ZWQgaW1hZ2UgVVJMLiBIb3dldmVyLCBpbiB0aGUgY2FzZSBvZiBhbiBpbWFnZSBlbmNs
b3NlZCBieSBhbiBhbmNob3IsIHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgdGhlCisgICAgICAg
IC8vIHRoZSBVUkwgKGkuZS4gdGhlIGFuY2hvcidzIGhyZWYgYXR0cmlidXRlKSB0byBiZSBhIGhp
Z2hlciBmaWRlbGl0eSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgYXV0byYgcGFzdGVib2FyZFVS
TCA9IHBhc3RlYm9hcmRJbWFnZS51cmw7CisgICAgICAgIGlmIChOU1VSTCAqbnNVUkwgPSBwYXN0
ZWJvYXJkVVJMLnVybCkgeworI2lmIEhBVkUoTlNVUkxfVElUTEUpCisgICAgICAgICAgICBuc1VS
TC5fdGl0bGUgPSBwYXN0ZWJvYXJkVVJMLnRpdGxlLmlzRW1wdHkoKSA/IFdURjo6dXNlclZpc2li
bGVTdHJpbmcocGFzdGVib2FyZFVSTC51cmwpIDogKE5TU3RyaW5nICopcGFzdGVib2FyZFVSTC50
aXRsZTsKICNlbmRpZgotICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGRSZXBy
ZXNlbnRpbmdPYmplY3Q6bnNVUkxdOwotICAgIH0KKyAgICAgICAgICAgIFtyZXByZXNlbnRhdGlv
bnNUb1JlZ2lzdGVyIGFkZFJlcHJlc2VudGluZ09iamVjdDpuc1VSTF07CisgICAgICAgIH0KKwor
ICAgICAgICByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rl
ci5nZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKKyAgICB9OwogCi0gICAgcmVnaXN0ZXJJdGVt
VG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCksIG1fcGFzdGVib2Fy
ZC5nZXQoKSk7CisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgcGVyZm9ybUFz
RGF0YU93bmVyPHZvaWQ+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKHBlcmZvcm1Xcml0ZSkpOworI2Vs
c2UKKyAgICBwZXJmb3JtV3JpdGUoKTsKKyNlbmRpZgogfQogCiB2b2lkIFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogewotICAgIGF1dG8gcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciA9IGFkb3B0TlMoW1tX
ZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCBhbGxvY10gaW5pdF0pOwotICAgIFty
ZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOldl
YlByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lXTsKKyAgICBhdXRvIHBlcmZvcm1Xcml0
ZSA9IFsmXSB7CisgICAgICAgIGF1dG8gcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciA9IGFkb3B0
TlMoW1tXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBzZXRQcmVmZXJyZWRQcmVzZW50YXRp
b25TdHlsZTpXZWJQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUlubGluZV07CisKKyAgICAgICAg
TlNTdHJpbmcgKnBhc3RlYm9hcmRUeXBlQXNOU1N0cmluZyA9IHBhc3RlYm9hcmRUeXBlOworICAg
ICAgICBpZiAoIXRleHQuaXNFbXB0eSgpICYmIHBhc3RlYm9hcmRUeXBlQXNOU1N0cmluZy5sZW5n
dGgpIHsKKyAgICAgICAgICAgIGF1dG8gcGFzdGVib2FyZFR5cGVBc0NGU3RyaW5nID0gKENGU3Ry
aW5nUmVmKXBhc3RlYm9hcmRUeXBlQXNOU1N0cmluZzsKKyAgICAgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNU
byhwYXN0ZWJvYXJkVHlwZUFzQ0ZTdHJpbmcsIGtVVFR5cGVVUkwpIHx8IFVUVHlwZUNvbmZvcm1z
VG8ocGFzdGVib2FyZFR5cGVBc0NGU3RyaW5nLCBrVVRUeXBlVGV4dCkpCisgICAgICAgICAgICAg
ICAgYWRkUmVwcmVzZW50YXRpb25zRm9yUGxhaW5UZXh0KHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0
ZXIuZ2V0KCksIHRleHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtyZXBy
ZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZERhdGE6W3Bhc3RlYm9hcmRUeXBlQXNOU1N0cmluZyBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gZm9yVHlwZTpwYXN0ZWJvYXJk
VHlwZV07CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAg
ICAgICAgfQogCi0gICAgTlNTdHJpbmcgKnBhc3RlYm9hcmRUeXBlQXNOU1N0cmluZyA9IHBhc3Rl
Ym9hcmRUeXBlOwotICAgIGlmICghdGV4dC5pc0VtcHR5KCkgJiYgcGFzdGVib2FyZFR5cGVBc05T
U3RyaW5nLmxlbmd0aCkgewotICAgICAgICBhdXRvIHBhc3RlYm9hcmRUeXBlQXNDRlN0cmluZyA9
IChDRlN0cmluZ1JlZilwYXN0ZWJvYXJkVHlwZUFzTlNTdHJpbmc7Ci1BTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhwYXN0ZWJv
YXJkVHlwZUFzQ0ZTdHJpbmcsIGtVVFR5cGVVUkwpIHx8IFVUVHlwZUNvbmZvcm1zVG8ocGFzdGVi
b2FyZFR5cGVBc0NGU3RyaW5nLCBrVVRUeXBlVGV4dCkpCi0gICAgICAgICAgICBhZGRSZXByZXNl
bnRhdGlvbnNGb3JQbGFpblRleHQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5nZXQoKSwgdGV4
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVy
IGFkZERhdGE6W3Bhc3RlYm9hcmRUeXBlQXNOU1N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ10gZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07Ci1BTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICB9CisgICAgICAgIHJlZ2lzdGVySXRlbVRvUGFzdGVi
b2FyZChyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9hcmQuZ2V0KCkp
OworICAgIH07CiAKLSAgICByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25z
VG9SZWdpc3Rlci5nZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKKyNpZiBIQVZFKFBBU1RFQk9B
UkRfREFUQV9PV05FUikKKyAgICBwZXJmb3JtQXNEYXRhT3duZXI8dm9pZD4obV9kYXRhT3duZXIs
IFdURk1vdmUocGVyZm9ybVdyaXRlKSk7CisjZWxzZQorICAgIHBlcmZvcm1Xcml0ZSgpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJk
VVJMJiB1cmwpCiB7Ci0gICAgYXV0byByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyID0gYWRvcHRO
UyhbW1dlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0IGFsbG9jXSBpbml0XSk7Ci0g
ICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5
bGU6V2ViUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmVdOwotCi0gICAgaWYgKE5TVVJM
ICpuc1VSTCA9IHVybC51cmwpIHsKLSNpZiBOU1VSTF9TVVBQT1JUU19USVRMRQotICAgICAgICBp
ZiAoIXVybC50aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBuc1VSTC5fdGl0bGUgPSB1cmwu
dGl0bGU7CisgICAgYXV0byBwZXJmb3JtV3JpdGUgPSBbJl0geworICAgICAgICBhdXRvIHJlcHJl
c2VudGF0aW9uc1RvUmVnaXN0ZXIgPSBhZG9wdE5TKFtbV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0
aW9uSW5mb0xpc3QgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVn
aXN0ZXIgc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6V2ViUHJlZmVycmVkUHJlc2VudGF0
aW9uU3R5bGVJbmxpbmVdOworCisgICAgICAgIGlmIChOU1VSTCAqbnNVUkwgPSB1cmwudXJsKSB7
CisjaWYgSEFWRShOU1VSTF9USVRMRSkKKyAgICAgICAgICAgIGlmICghdXJsLnRpdGxlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBuc1VSTC5fdGl0bGUgPSB1cmwudGl0bGU7CiAjZW5kaWYK
LSAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkUmVwcmVzZW50aW5nT2JqZWN0
Om5zVVJMXTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIgYWRkUmVwcmVzZW50
aW5nT2JqZWN0OihOU1N0cmluZyAqKXVybC51cmwuc3RyaW5nKCldOwotICAgIH0KKyAgICAgICAg
ICAgIFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGFkZFJlcHJlc2VudGluZ09iamVjdDpuc1VS
TF07CisgICAgICAgICAgICBbcmVwcmVzZW50YXRpb25zVG9SZWdpc3RlciBhZGRSZXByZXNlbnRp
bmdPYmplY3Q6KE5TU3RyaW5nICopdXJsLnVybC5zdHJpbmcoKV07CisgICAgICAgIH0KKworICAg
ICAgICByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zVG9SZWdpc3Rlci5n
ZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKKyAgICB9OwogCi0gICAgcmVnaXN0ZXJJdGVtVG9Q
YXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuZ2V0KCksIG1fcGFzdGVib2FyZC5n
ZXQoKSk7CisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgcGVyZm9ybUFzRGF0
YU93bmVyPHZvaWQ+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKHBlcmZvcm1Xcml0ZSkpOworI2Vsc2UK
KyAgICBwZXJmb3JtV3JpdGUoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgY29uc3QgY2hhciBvcmln
aW5LZXlGb3JUZWFtRGF0YVtdID0gImNvbS5hcHBsZS5XZWJLaXQuZHJhZy1hbmQtZHJvcC10ZWFt
LWRhdGEub3JpZ2luIjsKQEAgLTU1NSw1MSArNzE2LDU5IEBAIHN0YXRpYyBjb25zdCBjaGFyIGN1
c3RvbVR5cGVzS2V5Rm9yVGVhbURhdGFbXSA9ICJjb20uYXBwbGUuV2ViS2l0LmRyYWctYW5kLWRy
b3AtCiAKIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9N
VG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiBvcmlnaW4pIGNvbnN0CiB7Ci0gICAgTGlzdEhh
c2hTZXQ8U3RyaW5nPiBkb21QYXN0ZWJvYXJkVHlwZXM7Ci0jaWYgUEFTVEVCT0FSRF9TVVBQT1JU
U19QUkVTRU5UQVRJT05fU1RZTEVfQU5EX1RFQU1fREFUQQotICAgIGZvciAoTlNJdGVtUHJvdmlk
ZXIgKnByb3ZpZGVyIGluIFttX3Bhc3RlYm9hcmQgaXRlbVByb3ZpZGVyc10pIHsKLSAgICAgICAg
aWYgKCFwcm92aWRlci50ZWFtRGF0YS5sZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBOU1NldCAqY2xhc3NlcyA9IFtOU1NldCBzZXRXaXRoT2JqZWN0czpOU0RpY3Rpb25h
cnkuY2xhc3MsIE5TU3RyaW5nLmNsYXNzLCBOU0FycmF5LmNsYXNzLCBuaWxdOwotICAgICAgICBp
ZCB0ZWFtRGF0YU9iamVjdCA9IFtOU0tleWVkVW5hcmNoaXZlciB1bmFyY2hpdmVkT2JqZWN0T2ZD
bGFzc2VzOmNsYXNzZXMgZnJvbURhdGE6cHJvdmlkZXIudGVhbURhdGEgZXJyb3I6bnVsbHB0cl07
Ci0gICAgICAgIGlmICghW3RlYW1EYXRhT2JqZWN0IGlzS2luZE9mQ2xhc3M6TlNEaWN0aW9uYXJ5
LmNsYXNzXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGF1dG8gZ2V0VHlwZXNTYWZlRm9y
RE9NVG9SZWFkQW5kV3JpdGUgPSBbJl0geworICAgICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGRv
bVBhc3RlYm9hcmRUeXBlczsKKyNpZiBIQVZFKFBBU1RFQk9BUkRfUFJFU0VOVEFUSU9OX1NUWUxF
X0FORF9URUFNX0RBVEEpCisgICAgICAgIGZvciAoTlNJdGVtUHJvdmlkZXIgKnByb3ZpZGVyIGlu
IFttX3Bhc3RlYm9hcmQgaXRlbVByb3ZpZGVyc10pIHsKKyAgICAgICAgICAgIGlmICghcHJvdmlk
ZXIudGVhbURhdGEubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlkIG9yaWdpbkluVGVhbURhdGEgPSBbdGVhbURhdGFPYmplY3Qgb2JqZWN0Rm9yS2V5OkAob3Jp
Z2luS2V5Rm9yVGVhbURhdGEpXTsKLSAgICAgICAgaWYgKCFbb3JpZ2luSW5UZWFtRGF0YSBpc0tp
bmRPZkNsYXNzOk5TU3RyaW5nLmNsYXNzXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoU3RyaW5nKChOU1N0cmluZyAqKW9yaWdpbkluVGVhbURhdGEpICE9IG9yaWdpbikKLSAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgTlNTZXQgKmNsYXNzZXMgPSBbTlNTZXQg
c2V0V2l0aE9iamVjdHM6TlNEaWN0aW9uYXJ5LmNsYXNzLCBOU1N0cmluZy5jbGFzcywgTlNBcnJh
eS5jbGFzcywgbmlsXTsKKyAgICAgICAgICAgIGlkIHRlYW1EYXRhT2JqZWN0ID0gW05TS2V5ZWRV
bmFyY2hpdmVyIHVuYXJjaGl2ZWRPYmplY3RPZkNsYXNzZXM6Y2xhc3NlcyBmcm9tRGF0YTpwcm92
aWRlci50ZWFtRGF0YSBlcnJvcjpudWxscHRyXTsKKyAgICAgICAgICAgIGlmICghW3RlYW1EYXRh
T2JqZWN0IGlzS2luZE9mQ2xhc3M6TlNEaWN0aW9uYXJ5LmNsYXNzXSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZCBjdXN0b21UeXBlcyA9IFt0ZWFtRGF0YU9iamVjdCBv
YmplY3RGb3JLZXk6QChjdXN0b21UeXBlc0tleUZvclRlYW1EYXRhKV07Ci0gICAgICAgIGlmICgh
W2N1c3RvbVR5cGVzIGlzS2luZE9mQ2xhc3M6TlNBcnJheS5jbGFzc10pCi0gICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlkIG9yaWdpbkluVGVhbURhdGEgPSBbdGVhbURhdGFPYmpl
Y3Qgb2JqZWN0Rm9yS2V5OkAob3JpZ2luS2V5Rm9yVGVhbURhdGEpXTsKKyAgICAgICAgICAgIGlm
ICghW29yaWdpbkluVGVhbURhdGEgaXNLaW5kT2ZDbGFzczpOU1N0cmluZy5jbGFzc10pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoU3RyaW5nKChOU1N0cmluZyAq
KW9yaWdpbkluVGVhbURhdGEpICE9IG9yaWdpbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIGN1c3RvbVR5cGVzKQotICAgICAgICAg
ICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKLSAgICB9Ci0jZW5kaWYgLy8gUEFTVEVC
T0FSRF9TVVBQT1JUU19QUkVTRU5UQVRJT05fU1RZTEVfQU5EX1RFQU1fREFUQQorICAgICAgICAg
ICAgaWQgY3VzdG9tVHlwZXMgPSBbdGVhbURhdGFPYmplY3Qgb2JqZWN0Rm9yS2V5OkAoY3VzdG9t
VHlwZXNLZXlGb3JUZWFtRGF0YSldOworICAgICAgICAgICAgaWYgKCFbY3VzdG9tVHlwZXMgaXNL
aW5kT2ZDbGFzczpOU0FycmF5LmNsYXNzXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgIGlmIChOU0RhdGEgKnNlcmlhbGl6ZWRDdXN0b21EYXRhID0gW21fcGFzdGVib2FyZCBkYXRh
Rm9yUGFzdGVib2FyZFR5cGU6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXSkg
ewotICAgICAgICBhdXRvIGRhdGEgPSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1
ZmZlcihTaGFyZWRCdWZmZXI6OmNyZWF0ZShzZXJpYWxpemVkQ3VzdG9tRGF0YSkuZ2V0KCkpOwot
ICAgICAgICBpZiAoZGF0YS5vcmlnaW4oKSA9PSBvcmlnaW4pIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKCkpCisgICAgICAgICAgICBmb3IgKE5TU3Ry
aW5nICp0eXBlIGluIGN1c3RvbVR5cGVzKQogICAgICAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRU
eXBlcy5hZGQodHlwZSk7CiAgICAgICAgIH0KLSAgICB9CisjZW5kaWYgLy8gSEFWRShQQVNURUJP
QVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBKQogCi0gICAgYXV0byB3ZWJTYWZl
UGFzdGVib2FyZFR5cGVzID0gd2ViU2FmZVR5cGVzKFttX3Bhc3RlYm9hcmQgcGFzdGVib2FyZFR5
cGVzXSwgSW5jbHVkZUltYWdlVHlwZXM6Ok5vLCBbJl0gewotICAgICAgICBCT09MIGFibGVUb0Rl
dGVybWluZVByb3RvY29sT2ZQYXN0ZWJvYXJkVVJMID0gIVttX3Bhc3RlYm9hcmQgaXNLaW5kT2ZD
bGFzczpbV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBjbGFzc11dOwotQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgcmV0dXJuIGFibGVUb0RldGVybWluZVByb3Rv
Y29sT2ZQYXN0ZWJvYXJkVVJMICYmIHN0cmluZ0ZvclR5cGUoa1VUVHlwZVVSTCkuaXNFbXB0eSgp
OwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgfSk7CisgICAgICAgIGlm
IChOU0RhdGEgKnNlcmlhbGl6ZWRDdXN0b21EYXRhID0gW21fcGFzdGVib2FyZCBkYXRhRm9yUGFz
dGVib2FyZFR5cGU6QChQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXSkgeworICAg
ICAgICAgICAgYXV0byBkYXRhID0gUGFzdGVib2FyZEN1c3RvbURhdGE6OmZyb21TaGFyZWRCdWZm
ZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2VyaWFsaXplZEN1c3RvbURhdGEpLmdldCgpKTsKKyAg
ICAgICAgICAgIGlmIChkYXRhLm9yaWdpbigpID09IG9yaWdpbikgeworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdHlwZSA6IGRhdGEub3JkZXJlZFR5cGVzKCkpCisgICAgICAgICAgICAgICAg
ICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KIAotICAgIGZvciAoYXV0byYgdHlwZSA6IHdlYlNhZmVQYXN0ZWJvYXJkVHlwZXMpCi0gICAg
ICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CisgICAgICAgIGF1dG8gd2ViU2FmZVBh
c3RlYm9hcmRUeXBlcyA9IHdlYlNhZmVUeXBlcyhbbV9wYXN0ZWJvYXJkIHBhc3RlYm9hcmRUeXBl
c10sIEluY2x1ZGVJbWFnZVR5cGVzOjpObywgWyZdIHsKKyAgICAgICAgICAgIEJPT0wgYWJsZVRv
RGV0ZXJtaW5lUHJvdG9jb2xPZlBhc3RlYm9hcmRVUkwgPSAhW21fcGFzdGVib2FyZCBpc0tpbmRP
ZkNsYXNzOltXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIGNsYXNzXV07CisgICAgICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgcmV0dXJuIGFi
bGVUb0RldGVybWluZVByb3RvY29sT2ZQYXN0ZWJvYXJkVVJMICYmIHN0cmluZ0ZvclR5cGUoa1VU
VHlwZVVSTCkuaXNFbXB0eSgpOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECisgICAgICAgIH0pOwogCi0gICAgcmV0dXJuIGNvcHlUb1ZlY3Rvcihkb21QYXN0
ZWJvYXJkVHlwZXMpOworICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiB3ZWJTYWZlUGFzdGVib2Fy
ZFR5cGVzKQorICAgICAgICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKKworICAg
ICAgICByZXR1cm4gY29weVRvVmVjdG9yKGRvbVBhc3RlYm9hcmRUeXBlcyk7CisgICAgfTsKKwor
I2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIHJldHVybiBwZXJmb3JtQXNEYXRh
T3duZXI8VmVjdG9yPFN0cmluZz4+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKGdldFR5cGVzU2FmZUZv
ckRPTVRvUmVhZEFuZFdyaXRlKSk7CisjZWxzZQorICAgIHJldHVybiBnZXRUeXBlc1NhZmVGb3JE
T01Ub1JlYWRBbmRXcml0ZSgpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBSZXRhaW5QdHI8V2ViSXRl
bVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q+IGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJh
dGlvbkxpc3QoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCkBAIC02NTQsMTEgKzgy
MywyMCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogaW50NjRfdCBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4m
IGl0ZW1EYXRhKQogewotICAgIGF1dG8gcmVnaXN0cmF0aW9uTGlzdHMgPSBjcmVhdGVOU0FycmF5
KGl0ZW1EYXRhLCBbXSAoYXV0byYgZGF0YSkgewotICAgICAgICByZXR1cm4gY3JlYXRlSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uTGlzdChkYXRhKTsKLSAgICB9KTsKLSAgICByZWdpc3Rlckl0ZW1z
VG9QYXN0ZWJvYXJkKHJlZ2lzdHJhdGlvbkxpc3RzLmdldCgpLCBtX3Bhc3RlYm9hcmQuZ2V0KCkp
OwotICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkIGNoYW5nZUNvdW50XTsKKyAgICBhdXRvIHBlcmZv
cm1Xcml0ZSA9IFsmXSB7CisgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uTGlzdHMgPSBjcmVhdGVO
U0FycmF5KGl0ZW1EYXRhLCBbXSAoYXV0byYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSk7CisgICAgICAgIH0pOworICAg
ICAgICByZWdpc3Rlckl0ZW1zVG9QYXN0ZWJvYXJkKHJlZ2lzdHJhdGlvbkxpc3RzLmdldCgpLCBt
X3Bhc3RlYm9hcmQuZ2V0KCkpOworICAgIH07CisKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9P
V05FUikKKyAgICBwZXJmb3JtQXNEYXRhT3duZXI8dm9pZD4obV9kYXRhT3duZXIsIFdURk1vdmUo
cGVyZm9ybVdyaXRlKSk7CisjZWxzZQorICAgIHBlcmZvcm1Xcml0ZSgpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAogI2Vsc2UKQEAgLTY2OCw3ICs4NDYsNyBAQCBp
bnQ2NF90IFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0Q29sb3IoY29uc3QgQ29sb3ImKQogICAgIHJl
dHVybiAwOwogfQogCi1ib29sIFBsYXRmb3JtUGFzdGVib2FyZDo6YWxsb3dSZWFkaW5nVVJMQXRJ
bmRleChjb25zdCBVUkwmLCBpbnQpIGNvbnN0Citib29sIFBsYXRmb3JtUGFzdGVib2FyZDo6c2hv
dWxkQWxsb3dSZWFkaW5nVVJMQXRJbmRleChjb25zdCBVUkwmLCBpbnQpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtNzAzLDk3ICs4ODEsMTM4IEBAIGludDY0X3QgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JikKIAog
aW50IFBsYXRmb3JtUGFzdGVib2FyZDo6Y291bnQoKSBjb25zdAogewotICAgIHJldHVybiBbbV9w
YXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdOworICAgIGF1dG8gZ2V0Q291bnQgPSBbJl0oKSAtPiBp
bnQgeworICAgICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBudW1iZXJPZkl0ZW1zXTsKKyAgICB9
OworCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgcmV0dXJuIHBlcmZvcm1B
c0RhdGFPd25lcjxpbnQ+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKGdldENvdW50KSk7CisjZWxzZQor
ICAgIHJldHVybiBnZXRDb3VudCgpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxTdHJpbmc+IFBsYXRm
b3JtUGFzdGVib2FyZDo6YWxsU3RyaW5nc0ZvclR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25z
dAogewotICAgIGF1dG8gbnVtYmVyT2ZJdGVtcyA9IGNvdW50KCk7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gc3RyaW5nczsKLSAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZJ
dGVtcyk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mSXRlbXM7ICsr
aW5kZXgpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZFN0cmluZyhpbmRleCwgdHlwZSk7
Ci0gICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgc3RyaW5ncy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLSAgICByZXR1cm4gc3RyaW5nczsK
KyAgICBhdXRvIGdldEFsbFN0cmluZ3NGb3JUeXBlID0gWyZdKCkgLT4gVmVjdG9yPFN0cmluZz4g
eworICAgICAgICBhdXRvIG51bWJlck9mSXRlbXMgPSBjb3VudCgpOworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBzdHJpbmdzOworICAgICAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtYmVyT2ZJdGVtcyk7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1i
ZXJPZkl0ZW1zOyArK2luZGV4KSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWFkU3Ry
aW5nKGluZGV4LCB0eXBlKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHN0cmluZ3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUodmFsdWUpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gc3RyaW5nczsKKyAgICB9OworCisjaWYgSEFWRShQQVNU
RUJPQVJEX0RBVEFfT1dORVIpCisgICAgcmV0dXJuIHBlcmZvcm1Bc0RhdGFPd25lcjxWZWN0b3I8
U3RyaW5nPj4obV9kYXRhT3duZXIsIFdURk1vdmUoZ2V0QWxsU3RyaW5nc0ZvclR5cGUpKTsKKyNl
bHNlCisgICAgcmV0dXJuIGdldEFsbFN0cmluZ3NGb3JUeXBlKCk7CisjZW5kaWYKIH0KIAogUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkQnVmZmVyKHNpemVfdCBp
bmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewotICAgIGlmICgoTlNJbnRlZ2VyKWlu
ZGV4IDwgMCB8fCAoTlNJbnRlZ2VyKWluZGV4ID49IFttX3Bhc3RlYm9hcmQgbnVtYmVyT2ZJdGVt
c10pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVhZEJ1ZmZlciA9IFsmXSgp
IC0+IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHsKKyAgICAgICAgaWYgKChOU0ludGVnZXIpaW5kZXgg
PCAwIHx8IChOU0ludGVnZXIpaW5kZXggPj0gW21fcGFzdGVib2FyZCBudW1iZXJPZkl0ZW1zXSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTlNJbmRleFNldCAqaW5kZXhTZXQg
PSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDppbmRleF07CisgICAgICAgIE5TSW5kZXhT
ZXQgKmluZGV4U2V0ID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhdOwogCi0g
ICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVtID0gW21fcGFzdGVib2FyZCBkYXRh
Rm9yUGFzdGVib2FyZFR5cGU6dHlwZSBpbkl0ZW1TZXQ6aW5kZXhTZXRdOworICAgICAgICBSZXRh
aW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQYXN0
ZWJvYXJkVHlwZTp0eXBlIGluSXRlbVNldDppbmRleFNldF07CiAKLSAgICBpZiAoIVtwYXN0ZWJv
YXJkSXRlbSBjb3VudF0pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXSk7
CisgICAgICAgIGlmICghW3Bhc3RlYm9hcmRJdGVtIGNvdW50XSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShbcGFzdGVi
b2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXSk7CisgICAgfTsKKworI2lmIEhBVkUoUEFT
VEVCT0FSRF9EQVRBX09XTkVSKQorICAgIHJldHVybiBwZXJmb3JtQXNEYXRhT3duZXI8UmVmUHRy
PFNoYXJlZEJ1ZmZlcj4+KG1fZGF0YU93bmVyLCBXVEZNb3ZlKHJlYWRCdWZmZXIpKTsKKyNlbHNl
CisgICAgcmV0dXJuIHJlYWRCdWZmZXIoKTsKKyNlbmRpZgogfQogCiBTdHJpbmcgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nKHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKSBj
b25zdAogewotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAodHlw
ZSA9PSBTdHJpbmcoa1VUVHlwZVVSTCkpIHsKLSAgICAgICAgU3RyaW5nIHRpdGxlOwotICAgICAg
ICByZXR1cm4gWyhOU1VSTCAqKXJlYWRVUkwoaW5kZXgsIHRpdGxlKSBhYnNvbHV0ZVN0cmluZ107
Ci0gICAgfQorICAgIGF1dG8gcmVhZFN0cmluZyA9IFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIGlmICh0eXBlID09
IFN0cmluZyhrVVRUeXBlVVJMKSkgeworICAgICAgICAgICAgU3RyaW5nIHRpdGxlOworICAgICAg
ICAgICAgcmV0dXJuIFsoTlNVUkwgKilyZWFkVVJMKGluZGV4LCB0aXRsZSkgYWJzb2x1dGVTdHJp
bmddOworICAgICAgICB9CiAKLSAgICBpZiAoKE5TSW50ZWdlcilpbmRleCA8IDAgfHwgKE5TSW50
ZWdlcilpbmRleCA+PSBbbV9wYXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdKQotICAgICAgICByZXR1
cm4geyB9OworICAgICAgICBpZiAoKE5TSW50ZWdlcilpbmRleCA8IDAgfHwgKE5TSW50ZWdlcilp
bmRleCA+PSBbbV9wYXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05TSW5kZXhTZXQgaW5kZXhTZXRX
aXRoSW5kZXg6aW5kZXhdOwotICAgIGF1dG8gdmFsdWUgPSByZXRhaW5QdHIoW21fcGFzdGVib2Fy
ZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTp0eXBlIGluSXRlbVNldDppbmRleFNldF0uZmlyc3RP
YmplY3QgPzogW21fcGFzdGVib2FyZCBkYXRhRm9yUGFzdGVib2FyZFR5cGU6dHlwZSBpbkl0ZW1T
ZXQ6aW5kZXhTZXRdLmZpcnN0T2JqZWN0KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm4geyB9OworICAgICAgICBOU0luZGV4U2V0ICppbmRleFNldCA9IFtOU0luZGV4U2V0IGluZGV4
U2V0V2l0aEluZGV4OmluZGV4XTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHJldGFpblB0cihbbV9w
YXN0ZWJvYXJkIHZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOnR5cGUgaW5JdGVtU2V0OmluZGV4U2V0
XS5maXJzdE9iamVjdCA/OiBbbV9wYXN0ZWJvYXJkIGRhdGFGb3JQYXN0ZWJvYXJkVHlwZTp0eXBl
IGluSXRlbVNldDppbmRleFNldF0uZmlyc3RPYmplY3QpOworICAgICAgICBpZiAoIXZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNEYXRhIGNsYXNzXV0pCi0gICAgICAgIHZhbHVlID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKXZhbHVlLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSk7Ci0gICAgCi0gICAgaWYgKHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVQbGFpblRl
eHQpIHx8IHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVIVE1MKSkgewotICAgICAgICBBU1NFUlQoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwotICAgICAgICByZXR1cm4gW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gPyB2YWx1ZS5nZXQoKSA6IG5pbDsK
LSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVUZXh0KSkgewotICAgICAgICBB
U1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dKTsKLSAgICAgICAgaWYgKFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmdldCgpOwotICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXR0cmli
dXRlZFN0cmluZyBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuIFsoTlNBdHRyaWJ1dGVkU3Ry
aW5nICopdmFsdWUgc3RyaW5nXTsKLSAgICB9Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKKyAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkK
KyAgICAgICAgICAgIHZhbHVlID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERh
dGE6KE5TRGF0YSAqKXZhbHVlLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7
CisKKyAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVQbGFpblRleHQpIHx8IHR5cGUg
PT0gU3RyaW5nKGtVVFR5cGVIVE1MKSkgeworICAgICAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tp
bmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKyAgICAgICAgICAgIHJldHVybiBbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSA/IHZhbHVlLmdldCgpIDogbmlsOworICAg
ICAgICB9CisgICAgICAgIGlmICh0eXBlID09IFN0cmluZyhrVVRUeXBlVGV4dCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV0pOworICAgICAg
ICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIFsoTlNBdHRyaWJ1dGVkU3RyaW5nICopdmFsdWUgc3RyaW5nXTsKKyAgICAgICAgfQor
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgfTsKIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyNpZiBIQVZFKFBB
U1RFQk9BUkRfREFUQV9PV05FUikKKyAgICByZXR1cm4gcGVyZm9ybUFzRGF0YU93bmVyPFN0cmlu
Zz4obV9kYXRhT3duZXIsIFdURk1vdmUocmVhZFN0cmluZykpOworI2Vsc2UKKyAgICByZXR1cm4g
cmVhZFN0cmluZygpOworI2VuZGlmCiB9CiAKIFVSTCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRV
Ukwoc2l6ZV90IGluZGV4LCBTdHJpbmcmIHRpdGxlKSBjb25zdAogewotICAgIGlmICgoTlNJbnRl
Z2VyKWluZGV4IDwgMCB8fCAoTlNJbnRlZ2VyKWluZGV4ID49IFttX3Bhc3RlYm9hcmQgbnVtYmVy
T2ZJdGVtc10pCi0gICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byByZWFkVVJMID0gWyZdKCkg
LT4gVVJMIHsKKyAgICAgICAgaWYgKChOU0ludGVnZXIpaW5kZXggPCAwIHx8IChOU0ludGVnZXIp
aW5kZXggPj0gW21fcGFzdGVib2FyZCBudW1iZXJPZkl0ZW1zXSkKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWQgdmFs
dWUgPSBbbV9wYXN0ZWJvYXJkIHZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOihfX2JyaWRnZSBOU1N0
cmluZyAqKWtVVFR5cGVVUkwgaW5JdGVtU2V0OltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4
OmluZGV4XV0uZmlyc3RPYmplY3Q7Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4geyB9OworICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZCB2YWx1ZSA9IFttX3Bhc3RlYm9h
cmQgdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVVS
TCBpbkl0ZW1TZXQ6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhdXS5maXJzdE9i
amVjdDsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgQVNTRVJUKFt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1VSTCBjbGFzc11dKTsKLSAgICBpZiAoIVt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU1VSTCBjbGFzc11dKQotICAgICAgICByZXR1cm4geyB9OworICAgICAgICBBU1NF
UlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pOworICAgICAgICBpZiAoIVt2
YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1VSTCBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIE5TVVJMICp1cmwgPSAoTlNVUkwgKil2YWx1ZTsKLSAgICBpZiAoIWFsbG93UmVh
ZGluZ1VSTEF0SW5kZXgodXJsLCBpbmRleCkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IE5TVVJMICp1cmwgPSAoTlNVUkwgKil2YWx1ZTsKKyAgICAgICAgaWYgKCFzaG91bGRBbGxvd1Jl
YWRpbmdVUkxBdEluZGV4KHVybCwgaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAot
I2lmIFBBU1RFQk9BUkRfU1VQUE9SVFNfSVRFTV9QUk9WSURFUlMgJiYgTlNVUkxfU1VQUE9SVFNf
VElUTEUKLSAgICB0aXRsZSA9IFt1cmwgX3RpdGxlXTsKKyNpZiBIQVZFKFBBU1RFQk9BUkRfSVRF
TV9QUk9WSURFUlMpICYmIEhBVkUoTlNVUkxfVElUTEUpCisgICAgICAgIHRpdGxlID0gW3VybCBf
dGl0bGVdOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGl0bGUpOworICAgICAgICBVTlVTRURf
UEFSQU0odGl0bGUpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gdXJsOworICAgICAgICByZXR1cm4g
dXJsOworICAgIH07CisKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICByZXR1
cm4gcGVyZm9ybUFzRGF0YU93bmVyPFVSTD4obV9kYXRhT3duZXIsIFdURk1vdmUocmVhZFVSTCkp
OworI2Vsc2UKKyAgICByZXR1cm4gcmVhZFVSTCgpOworI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZv
cm1QYXN0ZWJvYXJkOjp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aAppbmRleCBmODRjNTFmYTA3NzYzYjBkOWNiM2FlZDQxZTU0YmU1NGMxMmRlOTg1Li4xZTE3Yjgx
ZGIyNDQ1N2U1NTUwODJiY2U1NjQzZDliMGQ1NmRmMzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCA8VUlLaXQv
VUlLZXlib2FyZF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUxvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTWVudUNvbnRyb2xsZXJfUHJp
dmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQYXN0ZWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQg
PFVJS2l0L1VJUGVyaXBoZXJhbEhvc3QuaD4KICNpbXBvcnQgPFVJS2l0L1VJUGVyaXBoZXJhbEhv
c3RfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQaWNrZXJDb250ZW50Vmlld19Qcml2YXRl
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJv
YXJkUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3Rl
Ym9hcmRQcm94eUNvY29hLm1tCmluZGV4IGMwNzZkOTRiNmUyNGJjZDJkMTlkYjQ3NTljZDE5YmJh
ZjNiYWZhODkuLjkxMTk5OGY2NGU4ODk3MzY3M2JlOWZjMDhhY2Y2NWFlZDE4ZWVkYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQ
cm94eUNvY29hLm1tCkBAIC0xNDIsOCArMTQyLDExIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpnZXRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAorICAgIGF1
dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvclJlYWRpbmcoY29ubmVj
dGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVU
SU9OKHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKICAg
ICBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXM7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5nZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworICAgIHBhc3RlYm9h
cmQtPmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShwYXN0ZWJvYXJkVHlwZXMpKTsKIH0KIApAQCAtMTU2LDEwICsxNTksMTMgQEAgdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGkKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cih7IH0sIHsgfSk7CiAKKyAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3Rl
Ym9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAg
IE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJvYXJkLmhhc1ZhbHVlKCksIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSwgeyB9KSk7CisKICAgICBWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXM7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbnM7CiAgICAg
aWYgKHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpIHsKLSAgICAgICAg
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5nZXRQYXRobmFtZXNGb3JUeXBlKHBh
dGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOworICAgICAgICBwYXN0ZWJvYXJkLT5nZXRQYXRobmFt
ZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwogCiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICAgICAvLyBPbiBpT1MsIGZpbGVzIGFyZSBjb3BpZWQgaW50byBhcHAncyBjb250YWlu
ZXIgdXBvbiBwYXN0ZS4KQEAgLTE4Miw3ICsxODgsMTAgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmlu
Z0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsKKyAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQ
bGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
YWdlSUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJvYXJkLmhhc1ZhbHVl
KCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIocGFz
dGVib2FyZC0+c3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSkpOwogfQogCiB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE5Miw3ICsyMDEsMTAgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9h
cmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24KICAgICBpZiAoIWNh
bkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFsbFN0cmluZ3NGb3JUeXBlKHBh
c3RlYm9hcmRUeXBlKSk7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0
ZWJvYXJkRm9yUmVhZGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0
aW9uSGFuZGxlcih7IH0pKTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKHBhc3RlYm9hcmQtPmFs
bFN0cmluZ3NGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yMDIsNyArMjE0LDEwIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJv
YXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAgaWYgKCFj
YW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJG
b3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKKyAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0
Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdl
SUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJvYXJkLmhhc1ZhbHVlKCks
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgYXV0byBidWZmZXIgPSBwYXN0ZWJvYXJk
LT5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgdWludDY0X3Qgc2l6ZSA9IGJ1
ZmZlci0+c2l6ZSgpOwpAQCAtMjE4LDkgKzIzMywxNCBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LAogICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92
ZShoYW5kbGUpLCBzaXplIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFz
dGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFs
PFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVi
b2FyZENoYW5nZUNvdW50KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5n
ZUNvdW50KCkpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUu
aXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBhdXRvIHBhc3RlYm9hcmQg
PSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lLCBwYWdlSUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJvYXJk
Lmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIGNvbXBsZXRpb25IYW5k
bGVyKHBhc3RlYm9hcmQtPmNoYW5nZUNvdW50KCkpOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6Z2V0UGFzdGVib2FyZENvbG9yKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpDb2xvciYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIyOCw3ICsyNDgsMTAgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6Omdl
dFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAg
ICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0
aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbG9yKCkpOwor
ICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvclJlYWRpbmco
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7CisgICAgTUVTU0FHRV9DSEVDS19D
T01QTEVUSU9OKHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7
CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYXN0ZWJvYXJkLT5jb2xvcigpKTsKIH0KIAogdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRl
bnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM2LDcgKzI1OSwxMCBAQCB2b2lkIFdlYlBhc3RlYm9h
cmRQcm94eTo6Z2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cgogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
dXJsKCkuc3RyaW5nKCkpOworICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFz
dGVib2FyZEZvclJlYWRpbmcoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7Cisg
ICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29tcGxl
dGlvbkhhbmRsZXIoeyB9KSk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYXN0ZWJvYXJkLT51
cmwoKS5zdHJpbmcoKSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjphZGRQYXN0ZWJv
YXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25h
bDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3Qp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ2LDkgKzI3MiwxMiBAQCB2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6YWRkUGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlwZSA6IHBhc3RlYm9hcmRUeXBlcykKICAgICAg
ICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0eXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhh
bmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdl
Q291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFkZFR5cGVzKHBhc3Rl
Ym9hcmRUeXBlcyk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIHByZXZpb3VzQ2hhbmdlQ291
bnQpOworICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvcldy
aXRpbmcoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7CisgICAgTUVTU0FHRV9D
SEVDS19DT01QTEVUSU9OKHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIo
MCkpOworCisgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gcGFzdGVib2FyZC0+Y2hhbmdl
Q291bnQoKTsKKyAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gcGFzdGVib2FyZC0+YWRkVHlwZXMo
cGFzdGVib2FyZFR5cGVzKTsKKyAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291
bnQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKIH0KIApAQCAtMjU5
LDggKzI4OCwxMSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVz
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlw
ZSA6IHBhc3RlYm9hcmRUeXBlcykKICAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0
eXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91
c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VD
b3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgYXV0byBwYXN0ZWJv
YXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yV3JpdGluZyhjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVi
b2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBhdXRvIHByZXZp
b3VzQ2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5jaGFuZ2VDb3VudCgpOworICAgIGF1dG8gbmV3
Q2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5zZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOwogICAg
IGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
LCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CiAgICAgY29tcGxldGlvbkhh
bmRsZXIobmV3Q2hhbmdlQ291bnQpOwogfQpAQCAtMjc2LDggKzMwOCwxMSBAQCB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFBhcwogICAgICAgICBpZiAoIXdlYlByb2Nlc3NQcm94eS0+Y2hlY2tVUkxSZWNl
aXZlZEZyb21XZWJQcm9jZXNzKHBhc3RlYm9hcmRVUkwudXJsLnN0cmluZygpLCBDaGVja0JhY2tG
b3J3YXJkTGlzdDo6Tm8pKQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDAp
OwogCi0gICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICAgICAgYXV0byBuZXdDaGFuZ2VD
b3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VVJMKHBhc3RlYm9h
cmRVUkwpOworICAgICAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9h
cmRGb3JXcml0aW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAgICAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0
aW9uSGFuZGxlcigwKSk7CisKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gcGFz
dGVib2FyZC0+Y2hhbmdlQ291bnQoKTsKKyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IHBh
c3RlYm9hcmQtPnNldFVSTChwYXN0ZWJvYXJkVVJMKTsKICAgICAgICAgZGlkTW9kaWZ5Q29udGVu
dHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdl
Q291bnQsIG5ld0NoYW5nZUNvdW50KTsKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG5ld0NoYW5nZUNvdW50KTsKICAgICB9CkBAIC0yODgsOCArMzIzLDExIEBAIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBjb25zdCBTCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJk
TmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIGF1dG8gcHJldmlv
dXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdl
Q291bnQoKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5zZXRDb2xvcihjb2xvcik7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3Jl
YXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yV3JpdGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNW
YWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBhdXRvIHByZXZpb3VzQ2hhbmdl
Q291bnQgPSBwYXN0ZWJvYXJkLT5jaGFuZ2VDb3VudCgpOworICAgIGF1dG8gbmV3Q2hhbmdlQ291
bnQgPSBwYXN0ZWJvYXJkLT5zZXRDb2xvcihjb2xvcik7CiAgICAgZGlkTW9kaWZ5Q29udGVudHNP
ZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291
bnQsIG5ld0NoYW5nZUNvdW50KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3Vu
dCk7CiB9CkBAIC0yOTksOCArMzM3LDExIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBs
ZXRpb25IYW5kbGVyKDApKTsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9h
cmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7
CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yV3JpdGlu
Zyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7
CisKKyAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5jaGFuZ2VDb3Vu
dCgpOworICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5zZXRTdHJpbmdGb3JU
eXBlKHN0cmluZywgcGFzdGVib2FyZFR5cGUpOwogICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0
ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBu
ZXdDaGFuZ2VDb3VudCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOwog
fQpAQCAtMzEwLDcgKzM1MSwxMCBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNV
UkxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiBjbwogICAgIGlmICgh
Y2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAotICAgIGNvbXBsZXRpb25I
YW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29udGFpbnNVUkxTdHJp
bmdTdWl0YWJsZUZvckxvYWRpbmcoKSk7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxh
dGZvcm1QYXN0ZWJvYXJkRm9yUmVhZGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFn
ZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgp
LCBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSkpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIocGFz
dGVib2FyZC0+Y29udGFpbnNVUkxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoKSk7CiB9CiAKIHZv
aWQgV2ViUGFzdGVib2FyZFByb3h5Ojp1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmlu
ZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzE4LDgg
KzM2MiwxMSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JM
b2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbgogICAgIGlmICghY2FuQWNjZXNzUGFz
dGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwogCisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3Jl
YXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yUmVhZGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNW
YWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSkpOworCiAgICAgU3RyaW5nIHRpdGxl
OwotICAgIGF1dG8gdXJsU3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS51cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcodGl0bGUpOworICAgIGF1dG8gdXJsU3RyaW5n
ID0gcGFzdGVib2FyZC0+dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKHRpdGxlKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHVybFN0cmluZyksIFdURk1vdmUodGl0bGUpKTsKIH0K
IApAQCAtMzI4LDE4ICszNzUsMjEgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3Rl
Ym9hcmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBNRVNT
QUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlv
bkhhbmRsZXIoMCkpOwogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5
cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3Vz
Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNv
dW50KCk7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9y
V3JpdGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdF
X0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxl
cigwKSk7CisKKyAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5jaGFu
Z2VDb3VudCgpOwogICAgIGlmIChpcGNIYW5kbGUuaGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAg
IGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnNldEJ1ZmZlckZvclR5cGUobnVsbHB0ciwgcGFzdGVib2FyZFR5cGUpOworICAgICAgICBhdXRv
IG5ld0NoYW5nZUNvdW50ID0gcGFzdGVib2FyZC0+c2V0QnVmZmVyRm9yVHlwZShudWxscHRyLCBw
YXN0ZWJvYXJkVHlwZSk7CiAgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VD
b3VudCk7CiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7
CiAgICAgfQogCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjptYXAoaXBjSGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7CisgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1v
cnk6Om1hcChpcGNIYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKDApOwogICAgIGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSks
IHN0YXRpY19jYXN0PHNpemVfdD4oaXBjSGFuZGxlLmRhdGFTaXplKSk7Ci0gICAgYXV0byBuZXdD
aGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVy
Rm9yVHlwZShidWZmZXIucHRyKCksIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBhdXRvIG5ld0NoYW5n
ZUNvdW50ID0gcGFzdGVib2FyZC0+c2V0QnVmZmVyRm9yVHlwZShidWZmZXIucHRyKCksIHBhc3Rl
Ym9hcmRUeXBlKTsKICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKIH0KQEAgLTM0OSw3ICszOTks
MTAgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHIKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9h
cmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcigwKTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkubnVtYmVyT2ZGaWxlcygpKTsKKyAgICBhdXRvIHBhc3RlYm9h
cmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwYWdlSUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJv
YXJkLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIGNvbXBsZXRpb25I
YW5kbGVyKHBhc3RlYm9hcmQtPm51bWJlck9mRmlsZXMoKSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYg
b3JpZ2luLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzU5LDE1
ICs0MTIsMjEgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnR5cGVzU2FmZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGkKICAgICBpZiAoIWNhbkFjY2Vzc1Bh
c3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0
ZShvcmlnaW4pKTsKKyAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9h
cmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAgIE1F
U1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwYXN0ZWJvYXJkLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSkpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIocGFzdGVib2FyZC0+dHlwZXNT
YWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUob3JpZ2luKSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2Fy
ZFByb3h5Ojp3cml0ZUN1c3RvbURhdGEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0Vf
Q0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFu
ZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VD
b3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUoZGF0YSk7Cisg
ICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yV3JpdGluZyhj
b25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NP
TVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisK
KyAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT5jaGFuZ2VDb3VudCgp
OworICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBwYXN0ZWJvYXJkLT53cml0ZShkYXRhKTsKICAg
ICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKIH0KQEAgLTM3Nyw3ICs0MzYsMTAgQEAgdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIGNvbnMKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5hbGxQYXN0ZWJvYXJkSXRlbUluZm8oY2hhbmdlQ291bnQpKTsKKyAgICBhdXRvIHBh
c3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNvbm5lY3Rpb24s
IHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihw
YXN0ZWJvYXJkLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgY29t
cGxldGlvbkhhbmRsZXIocGFzdGVib2FyZC0+YWxsUGFzdGVib2FyZEl0ZW1JbmZvKGNoYW5nZUNv
dW50KSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1B
dEluZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBpbnQ2NF90IGNoYW5nZUNvdW50LCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFBhc3Rl
Ym9hcmRJdGVtSW5mbz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zODUsNyArNDQ3LDEw
IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRU
eXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihXVEY6Om51bGxvcHQpOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KGlu
ZGV4LCBjaGFuZ2VDb3VudCkpOworICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3Jt
UGFzdGVib2FyZEZvclJlYWRpbmcoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7
CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29t
cGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KSk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihw
YXN0ZWJvYXJkLT5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KGluZGV4LCBjaGFuZ2VDb3VudCkp
OwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTM5Myw3ICs0NTgsMTAgQEAgdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY28KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhj
b25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcigwKTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuY291bnQoKSk7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZv
cm1QYXN0ZWJvYXJkRm9yUmVhZGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlE
KTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBj
b21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYXN0ZWJvYXJk
LT5jb3VudCgpKTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9t
UGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
T3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC00MDMsNyArNDcxLDEwIEBAIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBzCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSkpOworICAgIGF1dG8g
cGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvclJlYWRpbmcoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9O
KHBhc3RlYm9hcmQuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAgICBj
b21wbGV0aW9uSGFuZGxlcihwYXN0ZWJvYXJkLT5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJk
VHlwZSkpOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVSTEZyb21QYXN0ZWJv
YXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtNDExLDggKzQ4MiwxMSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6
ZQogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwogCisg
ICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yUmVhZGluZyhj
b25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NP
TVBMRVRJT04ocGFzdGVib2FyZC5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsg
fSkpOworCiAgICAgU3RyaW5nIHRpdGxlOwotICAgIFN0cmluZyB1cmwgPSBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLnJlYWRVUkwoaW5kZXgsIHRpdGxlKS5zdHJpbmcoKTsKKyAg
ICBTdHJpbmcgdXJsID0gcGFzdGVib2FyZC0+cmVhZFVSTChpbmRleCwgdGl0bGUpLnN0cmluZygp
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUodXJsKSwgV1RGTW92ZSh0aXRsZSkpOwog
fQogCkBAIC00MjMsNyArNDk3LDEwIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVm
ZmVyRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzCiAgICAgaWYg
KCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFk
QnVmZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgYXV0byBwYXN0ZWJvYXJkID0gY3Jl
YXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yUmVhZGluZyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04ocGFzdGVib2FyZC5oYXNW
YWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKKworICAgIGF1dG8gYnVmZmVyID0gcGFz
dGVib2FyZC0+cmVhZEJ1ZmZlcihpbmRleCwgcGFzdGVib2FyZFR5cGUpOwogICAgIGlmICghYnVm
ZmVyKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICB1aW50NjRf
dCBzaXplID0gYnVmZmVyLT5zaXplKCk7CkBAIC00NDQsMTggKzUyMSw3MSBAQCB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZShJUEM6
OkNvbm5lY3Rpb24mCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1JlYWRGb3JUeXBlKHR5cGUpKTsKKyAg
ICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JSZWFkaW5nKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09N
UExFVElPTihwYXN0ZWJvYXJkLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKSk7
CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYXN0ZWJvYXJkLT5jb250YWluc1N0cmluZ1NhZmVG
b3JET01Ub1JlYWRGb3JUeXBlKHR5cGUpKTsKIH0KIAorT3B0aW9uYWw8UGxhdGZvcm1QYXN0ZWJv
YXJkPiBXZWJQYXN0ZWJvYXJkUHJveHk6OmNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvclJlYWRp
bmcoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSBjb25zdAoreworI2lmIEhBVkUo
UEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIHJldHVybiBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9h
cmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0lu
dGVudDo6UmVhZCk7CisjZWxzZQorICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpOworI2VuZGlmCit9CisKK09wdGlvbmFsPFBsYXRmb3JtUGFzdGVib2FyZD4gV2Vi
UGFzdGVib2FyZFByb3h5OjpjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JXcml0aW5nKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0
aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgY29uc3QKK3sKKyNpZiBIQVZFKFBBU1RFQk9B
UkRfREFUQV9PV05FUikKKyAgICByZXR1cm4gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkKGNvbm5l
Y3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6Oldy
aXRlKTsKKyNlbHNlCisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSk7CisjZW5kaWYKK30KKworI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCitPcHRp
b25hbDxQbGF0Zm9ybVBhc3RlYm9hcmQ+IFdlYlBhc3RlYm9hcmRQcm94eTo6Y3JlYXRlUGxhdGZv
cm1QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0Cit7CisgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JF
VFVSTl9WQUxVRSghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBXVEY6Om51bGxvcHQpOworCisg
ICAgYXV0byogcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlv
bik7CisgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShwcm9jZXNzLCBXVEY6Om51
bGxvcHQpOworCisgICAgaWYgKCFwYWdlSUQpCisgICAgICAgIHJldHVybiBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpOworCisgICAgT3B0aW9uYWw8UGFzdGVib2FyZERhdGFPd25l
cj4gb3duZXI7CisgICAgZm9yIChhdXRvKiBwYWdlIDogcHJvY2Vzcy0+cGFnZXMoKSkgeworICAg
ICAgICBpZiAocGFnZS0+d2ViUGFnZUlEKCkgPT0gKnBhZ2VJRCkgeworICAgICAgICAgICAgb3du
ZXIgPSBwYWdlLT5wYXN0ZWJvYXJkRGF0YU93bmVyKGludGVudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoaXMgbWVzc2FnZSBjaGVjayBpcyBo
aXQsIHRoZW4gdGhlIGluY29taW5nIHdlYiBwYWdlIElEIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBh
bnkgcGFnZQorICAgIC8vIGN1cnJlbnRseSBrbm93biB0byB0aGUgVUkgcHJvY2Vzcy4KKyAgICBN
RVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKG93bmVyLmhhc1ZhbHVlKCksIFdURjo6bnVs
bG9wdCk7CisKKyAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lLCAq
b3duZXIpOworfQorCisjZW5kaWYgLy8gSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVV
UkxUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBQYXN0ZWJv
YXJkVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUu
aXNFbXB0eSgpKTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLndyaXRlKHVybCk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNP
ZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291
bnQsIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7Cisg
ICAgYXV0byBwYXN0ZWJvYXJkID0gY3JlYXRlUGxhdGZvcm1QYXN0ZWJvYXJkRm9yV3JpdGluZyhj
b25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlEKTsKKyAgICBNRVNTQUdFX0NIRUNLKHBh
c3RlYm9hcmQuaGFzVmFsdWUoKSk7CisKKyAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBw
YXN0ZWJvYXJkLT5jaGFuZ2VDb3VudCgpOworICAgIHBhc3RlYm9hcmQtPndyaXRlKHVybCk7Cisg
ICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIHBhc3RlYm9hcmQtPmNoYW5nZUNvdW50KCkpOwogICAg
IGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rp
b24pKQogICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0
ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CiB9CkBAIC00
NjQsOSArNTk0LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVdlYkNvbnRlbnRU
b1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uCiB7CiAgICAgTUVTU0FHRV9D
SEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQo
KTsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLndyaXRlKGNvbnRlbnQp
OwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmNoYW5nZUNvdW50KCkpOworICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRm
b3JtUGFzdGVib2FyZEZvcldyaXRpbmcoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJ
RCk7CisgICAgTUVTU0FHRV9DSEVDSyhwYXN0ZWJvYXJkLmhhc1ZhbHVlKCkpOworCisgICAgYXV0
byBwcmV2aW91c0NoYW5nZUNvdW50ID0gcGFzdGVib2FyZC0+Y2hhbmdlQ291bnQoKTsKKyAgICBw
YXN0ZWJvYXJkLT53cml0ZShjb250ZW50KTsKKyAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVi
b2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgcGFz
dGVib2FyZC0+Y2hhbmdlQ291bnQoKSk7CiAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlByb2Nl
c3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCiAgICAgICAgIHByb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHko
cGFzdGVib2FyZE5hbWUpLCAwKTsKIH0KQEAgLTQ3NSw5ICs2MDgsMTIgQEAgdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb24KIHsKICAgICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5
KCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkud3JpdGUocGFzdGVib2FyZEltYWdlKTsKLSAgICBkaWRNb2RpZnlDb250
ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFu
Z2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgp
KTsKKyAgICBhdXRvIHBhc3RlYm9hcmQgPSBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmRGb3JXcml0
aW5nKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQpOworICAgIE1FU1NBR0VfQ0hF
Q0socGFzdGVib2FyZC5oYXNWYWx1ZSgpKTsKKworICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3Vu
dCA9IHBhc3RlYm9hcmQtPmNoYW5nZUNvdW50KCk7CisgICAgcGFzdGVib2FyZC0+d3JpdGUocGFz
dGVib2FyZEltYWdlKTsKKyAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgcGFzdGVib2FyZC0+Y2hh
bmdlQ291bnQoKSk7CiAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNv
bm5lY3Rpb24oY29ubmVjdGlvbikpCiAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5h
bWUpLCAwKTsKIH0KQEAgLTQ4NywxNCArNjIzLDE3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
Ojp3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKICAgICBNRVNT
QUdFX0NIRUNLKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCkgfHwgdGV4dC5pc0VtcHR5KCkpOwog
Ci0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkud3JpdGUocGFzdGVib2FyZFR5cGUsIHRleHQpOwotICAgIGRpZE1vZGlmeUNvbnRl
bnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5n
ZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkp
OworICAgIGF1dG8gcGFzdGVib2FyZCA9IGNyZWF0ZVBsYXRmb3JtUGFzdGVib2FyZEZvcldyaXRp
bmcoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCk7CisgICAgTUVTU0FHRV9DSEVD
SyhwYXN0ZWJvYXJkLmhhc1ZhbHVlKCkpOworCisgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50
ID0gcGFzdGVib2FyZC0+Y2hhbmdlQ291bnQoKTsKKyAgICBwYXN0ZWJvYXJkLT53cml0ZShwYXN0
ZWJvYXJkVHlwZSwgdGV4dCk7CisgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29u
bmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIHBhc3RlYm9hcmQt
PmNoYW5nZUNvdW50KCkpOwogICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlG
b3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQogICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9h
cmROYW1lKSwgMCk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0
ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGlkZW50aWZpZXJzLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
KQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVy
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaWRlbnRpZmllcnMsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPikKIHsKICAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhpZGVu
dGlmaWVycyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYzg4NDE5
OWY0YjY5M2MyYmNkYTdmNTM3MjljZGNhM2IzNDI2ZjEyZC4uOTc5MDk0ZTFkMjg5MDkyYTE3MjM3
YjljZTc2MGMxMDljOTE0OTA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJM
YXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgIlBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldlYkNvbG9yUGlja2VyLmgiCkBAIC02NCw2ICs2NSwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
SW1hZ2VFeHRyYWN0aW9uUmVzdWx0Lmg+CiAjZW5kaWYKIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9E
QVRBX09XTkVSKQorI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZERhdGFPd25lci5oPgorI2Vu
ZGlmCisKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIE9CSkNfQ0xBU1MgTlNGaWxlV3JhcHBlcjsKIE9C
SkNfQ0xBU1MgTlNNZW51OwpAQCAtNTE3LDYgKzUyMiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SGFzQmxhbmtPdmVybGF5KGJvb2wpIHsgfQogCisjaWYgSEFWRShQQVNURUJP
QVJEX0RBVEFfT1dORVIpCisgICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YU93bmVy
IHBhc3RlYm9hcmREYXRhT3duZXIoUGFzdGVib2FyZEFjY2Vzc0ludGVudCkgY29uc3QgeyByZXR1
cm4gV2ViQ29yZTo6UGFzdGVib2FyZERhdGFPd25lcjo6VW5kZWZpbmVkOyB9CisjZW5kaWYKKwog
I2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0SW1h
Z2VFeHRyYWN0aW9uKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25SZXN1bHQmJik+JiYgY29tcGxldGlv
bikgeyBjb21wbGV0aW9uKHsgfSk7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMGMyNzZlNDhhNTE3
MDMyZGZjZGViMmVhZjkxNWJjNDcwZGUwODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBj
bGFzcyBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50IDogYm9vbCB7CisgICAgUmVhZCwKKyAgICBXcml0
ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAppbmRleCAyMTRhNDQyYzRlMWYxMjI0NWIzYmY1YzFmMWEyNTUwNzE5ZGU0
NWE2Li41NWI4M2U4NDc5MGJkODY5NmUzY2I1ODcyZWU0ZGE5YzI5NmQ0NDVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk2MTcsNiArOTYxNywxNSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hCYXJNZW51SXRlbURhdGFSZW1vdmVkKGNvbnN0IFRvdWNo
QmFyTWVudUl0ZW1EYXRhJiB0b3VjaAogfQogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRf
REFUQV9PV05FUikKKworUGFzdGVib2FyZERhdGFPd25lciBXZWJQYWdlUHJveHk6OnBhc3RlYm9h
cmREYXRhT3duZXIoUGFzdGVib2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHBhZ2VDbGllbnQoKS5wYXN0ZWJvYXJkRGF0YU93bmVyKGludGVudCk7Cit9CisKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIAogdm9pZCBXZWJQYWdlUHJv
eHk6OndyaXRlUHJvbWlzZWRBdHRhY2htZW50VG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlByb21pc2Vk
QXR0YWNobWVudEluZm8mJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAppbmRleCAwOGQ5YmVmODQ0ZWMxZDBhM2Y1YTBhY2YyYmFjY2YyM2UyYWU1MTQwLi5kZmMyYjgz
YmE5NTc5N2RiNjIxNmNhYjU5NDE3MDRjZTk4YmIwOTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUERGUGx1Z2luSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKKyNpbmNsdWRlICJQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlByb2Nlc3NUZXJtaW5hdGlv
blJlYXNvbi5oIgpAQCAtMjg1LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiBz
dHJ1Y3QgSW1hZ2VFeHRyYWN0aW9uUmVzdWx0OwogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9B
UkRfREFUQV9PV05FUikKK2VudW0gY2xhc3MgUGFzdGVib2FyZERhdGFPd25lciA6IHVpbnQ4X3Q7
CisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFJlY3RFZGdlczsKIHVzaW5nIEZs
b2F0Qm94RXh0ZW50ID0gUmVjdEVkZ2VzPGZsb2F0PjsKIH0KQEAgLTEwNzksNiArMTA4NCwxMCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0OwogICAgIGJvb2wg
dXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwoKSBjb25zdDsKIAorI2lmIEhBVkUoUEFTVEVC
T0FSRF9EQVRBX09XTkVSKQorICAgIFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhT3duZXIgcGFzdGVi
b2FyZERhdGFPd25lcihQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdDsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB0aHJv
dWdoIGEgbWVzc2FnZS4KICAgICB2b2lkIHJlZ2lzdGVyV2ViUHJvY2Vzc0FjY2Vzc2liaWxpdHlU
b2tlbihjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggZjVjZDU5NThiMmNmNDMzNmM1YmQwMmZiNmRk
Y2UzYzYwM2UxNzg1Mi4uZDg1YWFkYTQzN2Q2YjUzNGE2NjA2YzhjYzgwOTgyYjBkMDJkNzQ4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CisjaW5jbHVkZSAiUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VJZGVudGlmaWVyLmg+CkBAIC00Myw2ICs0NCw3IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlckNv
cHk7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBhc3RlYm9hcmRD
dXN0b21EYXRhOworY2xhc3MgUGxhdGZvcm1QYXN0ZWJvYXJkOwogY2xhc3MgU2VsZWN0aW9uRGF0
YTsKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZEl0ZW1JbmZvOwpA
QCAtMTAwLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5n
Rm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRp
Zmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdl
dFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiYpPiYmKTsKLSAgICB2b2lk
IGdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBP
cHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
aW50NjRfdCk+JiYpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29u
bmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJik7CiAg
ICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9yJiYpPiYmKTsKICAgICB2b2lkIGdldFBh
c3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYpOwpAQCAtMTQ5LDYgKzE1MSwx
MiBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgUGFzdGVib2FyZEFjY2Vzc1R5cGUgOiB1aW50
OF90IHsgVHlwZXMsIFR5cGVzQW5kRGF0YSB9OwogICAgIE9wdGlvbmFsPFBhc3RlYm9hcmRBY2Nl
c3NUeXBlPiBhY2Nlc3NUeXBlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpIGNvbnN0OwogICAgIHZvaWQgZ3JhbnRBY2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Jiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzdGVib2FyZEFjY2Vzc1R5cGUpOworCisg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkPiBjcmVhdGVQbGF0Zm9ybVBh
c3RlYm9hcmRGb3JSZWFkaW5nKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPikgY29uc3Q7CisgICAg
T3B0aW9uYWw8V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkPiBjcmVhdGVQbGF0Zm9ybVBhc3Rl
Ym9hcmRGb3JXcml0aW5nKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPikgY29uc3Q7CisjaWYgSEFW
RShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkPiBjcmVhdGVQbGF0Zm9ybVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXI+LCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdDsKKyNlbmRpZgogI2VuZGlmCiAKICAg
ICBXZWJQcm9jZXNzUHJveHlMaXN0IG1fd2ViUHJvY2Vzc1Byb3h5TGlzdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpp
bmRleCBmMjNmODVjZDU1ODAyNmQwOTk4NGY2ODcxODgwMjFmYzhlNzhhNzIzLi40N2IzN2MwZWVl
MTA5NDVmNjM1YzNiMjVlYzUxZDMzYjM1YjE0ZjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC00Nyw3ICs0
Nyw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhc3RlYm9hcmRQcm94eSBOb3RSZWZDb3VudGVkIHsKICAg
ICBHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmlu
ZyBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCkgLT4gKFN0cmluZyBzdHJpbmcpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgogICAgIEdl
dFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBw
YXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkg
LT4gKFZlY3RvcjxTdHJpbmc+IHN0cmluZ3MpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgog
ICAgIEdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3Ry
aW5nIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4gcGFn
ZUlEKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9u
b3VzIFdhbnRzQ29ubmVjdGlvbgotICAgIEdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChTdHJpbmcg
cGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQp
IC0+IChpbnQ2NF90IGNoYW5nZUNvdW50KSBTeW5jaHJvbm91cworICAgIEdldFBhc3RlYm9hcmRD
aGFuZ2VDb3VudChTdHJpbmcgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQpIC0+IChpbnQ2NF90IGNoYW5nZUNvdW50KSBTeW5jaHJvbm91cyBX
YW50c0Nvbm5lY3Rpb24KICAgICBHZXRQYXN0ZWJvYXJkQ29sb3IoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoV2ViQ29y
ZTo6Q29sb3IgY29sb3IpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgogICAgIEdldFBhc3Rl
Ym9hcmRVUkwoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRl
bnRpZmllcj4gcGFnZUlEKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMgV2FudHND
b25uZWN0aW9uCiAgICAgQWRkUGFzdGVib2FyZFR5cGVzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwg
VmVjdG9yPFN0cmluZz4gcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRl
bnRpZmllcj4gcGFnZUlEKSAtPiAoaW50NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMgV2Fu
dHNDb25uZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oCmluZGV4IDZkYTBiZmI4YWFiNzkwMGQxNzA1YTQ3NWE3NmE3N2EyMWQ4OTg1Yzku
LjJiY2U0NTM0ZmZmYjkyZWNmMTYzZGNhMjBjYjJmMWQzOTE0YWI0ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC0xMjYsNiArMTI2
LDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93
bj4gY3JlYXRlRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duKFdlYlBhZ2VQcm94eSYpIGZpbmFs
OwogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICBXZWJDb3Jl
OjpQYXN0ZWJvYXJkRGF0YU93bmVyIHBhc3RlYm9hcmREYXRhT3duZXIoUGFzdGVib2FyZEFjY2Vz
c0ludGVudCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVRFX0FORF9USU1F
X0lOUFVUX1RZUEVTKQogICAgIFJlZlB0cjxXZWJEYXRlVGltZVBpY2tlcj4gY3JlYXRlRGF0ZVRp
bWVQaWNrZXIoV2ViUGFnZVByb3h5JikgZmluYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCAwMGNkZjEzYmE5MmJk
MDZjMGMyOTE3NWY0MWMyY2Q2MWM5NTVlMTMxLi5mYzc0ZTA4ZDhlYTAyZGJmNmQwODI2MDMxZmE5
NThmYTQyOWRlM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tCkBAIC00NTksNiArNDU5LDE1IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
OmRvbmVEZWZlcnJpbmdUb3VjaEVuZChib29sIHByZXZlbnROYXRpdmVHZXN0dXJlcykKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogCisjaWYgSEFWRShQQVNURUJPQVJEX0RB
VEFfT1dORVIpCisKK1dlYkNvcmU6OlBhc3RlYm9hcmREYXRhT3duZXIgUGFnZUNsaWVudEltcGw6
OnBhc3RlYm9hcmREYXRhT3duZXIoUGFzdGVib2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IF9wYXN0ZWJvYXJkRGF0YU93bmVyOmludGVu
dF07Cit9CisKKyNlbmRpZgorCiBSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJ
bXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkmKQogewogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IDAwYjc4N2UzZTgwNDFiYzUxZjI0ZTU5NWNhMDY3NGI1
ZjlhYTAzMjUuLmNjM2I4NGRmNmM2Y2I0YWE4YjU2NGYzMDlhNjc4Mjg2NTNkNmEzNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIkZyYW1lSW5mb0RhdGEuaCIKICNp
bXBvcnQgIkdlc3R1cmVUeXBlcy5oIgogI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCIKICNpbXBvcnQg
IlN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZS5oIgogI2ltcG9ydCAiVGV4dENoZWNraW5nQ29u
dHJvbGxlci5oIgogI2ltcG9ydCAiVHJhbnNhY3Rpb25JRC5oIgpAQCAtNjgsNiArNjksMTAgQEAK
ICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyNpbXBvcnQgPFdlYkNvcmUv
UGFzdGVib2FyZERhdGFPd25lci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBBUEkgewogY2xhc3Mg
T3BlblBhbmVsUGFyYW1ldGVyczsKIH0KQEAgLTcwMCw2ICs3MDUsMTAgQEAgRk9SX0VBQ0hfUFJJ
VkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihERUNMQVJFX1dLQ09OVEVOVFZJRVdfQUNUSU9OX0ZP
Ul9XRUJfVklFVykKIC0gKEJPT0wpX2Zvcm1Db250cm9sUmVmcmVzaEVuYWJsZWQ7CiAjZW5kaWYK
IAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorLSAoV2ViQ29yZTo6UGFzdGVib2Fy
ZERhdGFPd25lcilfcGFzdGVib2FyZERhdGFPd25lcjooV2ViS2l0OjpQYXN0ZWJvYXJkQWNjZXNz
SW50ZW50KWludGVudDsKKyNlbmRpZgorCiBAZW5kCiAKIEBpbnRlcmZhY2UgV0tDb250ZW50Vmll
dyAoV0tUZXN0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNWI0YjY1Y2I0MGE0ZDJhZWIyNWI5NmQ2
YTc5YTlmNzVmMWIwNzUwNS4uYjY5MzU2NDIyZWEwMzA0YWI1ZjUyMGNiZTJmMjg5MWExYjYzMTE1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCkBAIC03NDY4LDYgKzc0NjgsMzcgQEAgLSAoQk9PTClfc2hvdWxk
VXNlTGVnYWN5U2VsZWN0UG9wb3ZlckRpc21pc3NhbEJlaGF2aW9yCiAgICAgcmV0dXJuIFdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc0RhdGFBY3RpdmF0aW9uKCk7CiB9CiAKKyNpZiBIQVZFKFBB
U1RFQk9BUkRfREFUQV9PV05FUikKKworLSAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFPd25lcilf
cGFzdGVib2FyZERhdGFPd25lcjooV2ViS2l0OjpQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KWludGVu
dAoreworICAgIGF1dG8gY29yZVR5cGUgPSBbXSAoX1VJRGF0YU93bmVyIHBsYXRmb3JtVHlwZSkg
eworICAgICAgICBzd2l0Y2ggKHBsYXRmb3JtVHlwZSkgeworICAgICAgICBjYXNlIF9VSURhdGFP
d25lclVzZXI6CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFzdGVib2FyZERhdGFPd25l
cjo6VXNlcjsKKyAgICAgICAgY2FzZSBfVUlEYXRhT3duZXJFbnRlcnByaXNlOgorICAgICAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhT3duZXI6OkVudGVycHJpc2U7CisgICAg
ICAgIGNhc2UgX1VJRGF0YU93bmVyU2hhcmVkOgorICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OlBhc3RlYm9hcmREYXRhT3duZXI6OlNoYXJlZDsKKyAgICAgICAgY2FzZSBfVUlEYXRhT3duZXJV
bmRlZmluZWQ6CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFzdGVib2FyZERhdGFPd25l
cjo6VW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGFzdGVib2FyZERhdGFPd25lcjo6VW5kZWZpbmVkOwor
ICAgIH07CisKKyAgICBpZiAoaW50ZW50ID09IFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVu
dDo6UmVhZCkKKyAgICAgICAgcmV0dXJuIGNvcmVUeXBlKHNlbGYuX2RhdGFPd25lckZvclBhc3Rl
KTsKKworICAgIGlmIChpbnRlbnQgPT0gV2ViS2l0OjpQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpX
cml0ZSkKKyAgICAgICAgcmV0dXJuIGNvcmVUeXBlKHNlbGYuX2RhdGFPd25lckZvckNvcHkpOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlBhc3RlYm9h
cmREYXRhT3duZXI6OlVuZGVmaW5lZDsKK30KKworI2VuZGlmIC8vIEhBVkUoUEFTVEVCT0FSRF9E
QVRBX09XTkVSKQorCiAtIChSZXRhaW5QdHI8VUlWaWV3PilfY3JlYXRlUHJldmlld0NvbnRhaW5l
cldpdGhMYXllck5hbWU6KE5TU3RyaW5nICopbGF5ZXJOYW1lCiB7CiAgICAgYXV0byBjb250YWlu
ZXIgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDgzMmNkYTg4YjFiN2UzOGI1
YWU5M2Y0ZTQ4MTNiNDE5Y2VlNjQ3Li44MTQ3ZDJmYWQ5Yzc1YzY0ODQ0NjJhOGE0NDdlOGU2OTM1
NTMzYmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQyNiwxMiArNDI2LDYgQEAKIAkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8q
IFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0
b3JQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFDQkJFNEEwMTlCNjZDNTMwMDZCN0Q4MSAvKiBX
ZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0JCRTQ5RTE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5z
cGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQ0JCRTRBMTE5QjY2QzUzMDA2
QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCQkU0OUYxOUI2NkM1MzAwNkI3RDgxIC8qIFdlYklu
c3BlY3RvclVJTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUQ0NzY1ODYyNUNDQTQxNjAwN0FGMzEyIC8q
IFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxRDQ3NjU4NDI1Q0NBNDE2MDA3QUYzMTIgLyogUmVtb3RlSW1h
Z2VEZWNvZGVyQVZGUHJveHkuaCAqLzsgfTsKLQkJMUQ0NzY1OTMyNUNDQ0U5MzAwN0FGMzEyIC8q
IFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTkwMjVDQ0NFOTMwMDdBRjMxMiAvKiBS
ZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eU1lc3NhZ2VzLmggKi87IH07Ci0JCTFENDc2NTk0MjVD
Q0NFOTMwMDdBRjMxMiAvKiBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eU1lc3NhZ2VzUmVwbGll
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUQ0NzY1
OTEyNUNDQ0U5MzAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5TWVzc2FnZXNS
ZXBsaWVzLmggKi87IH07Ci0JCTFENDc2NTlDMjVDRTc0QUQwMDdBRjMxMiAvKiBSZW1vdGVJbWFn
ZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTk5MjVDRTc0QUMwMDdBRjMxMiAvKiBSZW1vdGVJbWFn
ZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUQ0NzY1OUQyNUNFNzRBRDAw
N0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJNZXNzYWdlc1JlcGxpZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTlBMjVD
RTc0QUMwMDdBRjMxMiAvKiBSZW1vdGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZXNSZXBs
aWVzLmggKi87IH07Ci0JCTFENDc2NUExMjVDRjU3NDAwMDdBRjMxMiAvKiBSZW1vdGVJbWFnZURl
Y29kZXJBVkZNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxRDQ3NjU5RjI1Q0Y1NzQwMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
TWFuYWdlci5oICovOyB9OwogCQkxRDRENzM3MDIzQTlFNTQ3MDA3MTdBMjUgLyogUmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUQ0RDczNkIyM0E5REY1NTAwNzE3QTI1IC8qIFJl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUQ0
RDczNzEyM0E5RTU2MjAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENEQ3
MzZDMjNBOURGNjAwMDcxN0EyNSAvKiBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2Vz
LmggKi87IH07CiAJCTFENEQ3Mzc2MjNBOUVEMTgwMDcxN0EyNSAvKiBSZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUQ0RDczNzUyM0E5RUI2ODAwNzE3QTI1IC8qIFJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CkBAIC0xOTk1LDYgKzE5ODks
NyBAQAogCQlGNDQyOTE5NjFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNobWVudEludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQyOTE5
NTFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNobWVudEludGVybmFsLmggKi87IH07CiAJCUY0
NDgxNTY0MjM4NzgyMDAwMDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQ4MTU2MjIz
ODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5oICovOyB9Owog
CQlGNDRERkVCMjFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0REZFQjAxRTlFNzUyRjAw
MzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLzsgfTsKKwkJRjQ2NjBCQzIyNURFRjA4MTAw
RTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjYwQkMxMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0
ZWJvYXJkQWNjZXNzSW50ZW50LmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0UwMEM2NzUyQiAv
KiBBcHBLaXRTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsgfTsKIAkJRjQ5
NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3
MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9OwogCQlGNEE2RDZC
QzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2
NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwpAQCAtNTg1Nyw2ICs1ODUy
LDcgQEAKIAkJRjQ0ODE1NjMyMzg3ODIwMDAwOTgyNjU3IC8qIFdLRGVmZXJyaW5nR2VzdHVyZVJl
Y29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0RlZmVycmluZ0dlc3R1cmVSZWNv
Z25pemVyLm1tOyBwYXRoID0gaW9zL1dLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBX
ZWJJY29uVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYklj
b25VdGlsaXRpZXMuaDsgcGF0aCA9IGlvcy9XZWJJY29uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0NERGRUIxMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRp
bGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViSWNv
blV0aWxpdGllcy5tbTsgcGF0aCA9IGlvcy9XZWJJY29uVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGNDY2MEJDMTI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAv
KiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7
IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTc1MCw2ICs5NzQ2LDcgQEAKIAkJCQlCQzZFREFBNTExMTI3
MUM2MDBFNzY3OEIgLyogUGFnZUNsaWVudC5oICovLAogCQkJCTFBQzc1Mzc5MTgzQTlGREEwMDcy
Q0IxNSAvKiBQYWdlTG9hZFN0YXRlLmNwcCAqLywKIAkJCQkxQUM3NTM3QTE4M0E5RkRCMDA3MkNC
MTUgLyogUGFnZUxvYWRTdGF0ZS5oICovLAorCQkJCUY0NjYwQkMxMjVERUYwODEwMEU4NjU5OCAv
KiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggKi8sCiAJCQkJODMyRUQxODkxRTJGRTEzQjAwNkJB
NjRBIC8qIFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBsZXIuY3BwICovLAogCQkJCTgzMkVE
MThBMUUyRkUxM0IwMDZCQTY0QSAvKiBQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyLmgg
Ki8sCiAJCQkJMzc3MTZBNTkxOTVCOTEwNTAwRUU4QjFCIC8qIFByb2Nlc3NBc3NlcnRpb24uY3Bw
ICovLApAQCAtMTE4ODksNiArMTE4ODYsNyBAQAogCQkJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZD
OSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzUzN0MxODNB
OUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEI2
NkIwMUJDNDNDODYwMDgyREY3NyAvKiBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUY0NjYwQkMyMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTc5OEI1MTIyMzBBMTBFMDAwNzY0
QkQgLyogUGF5bWVudEF1dGhvcml6YXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTc5OEIzRTIyMkQ5N0EyMDAwNzY0QkQgLyogUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50
ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDUxMTU5YWQ0ODZkNTRlYTgyMGYwNzE2ZDMxOGEzYmE1YmY5MWI2ZTQu
LjYxYWUwNjZkYTI0MzdiNDAwMTAxM2YwMTViMDZiMDM2NDE4OWUxOGYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAy
MS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAg
ICBbaU9TXSBTcGVjaWZ5IGEgX1VJRGF0YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZy
b20gdGhlIHN5c3RlbSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjIwNzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjA4NTc2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IGNvdXBsZSBvZiBuZXcgQVBJIHRlc3RzIHRvIHZlcmlmeSB0aGF0IGArW1VJUGFzdGVib2FyZCBf
cGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOl1gIGlzIGludm9rZWQgd2l0aCB0aGUKKyAgICAgICAg
ZXhwZWN0ZWQgZGF0YSBvd25lciB0eXBlIHdoZW4gY29weWluZyBhbmQgcGFzdGluZy4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tOgorICAg
ICAgICAoK1tUZXN0VUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RXS1dlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RX
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBjb250ZW50c0FzU3RyaW5nXSk6CisK
KyAgICAgICAgQWRkaXRpb25hbGx5IGFkZCBhIGhlbHBlciBtZXRob2QgdG8gZ3JhYiBhIGBXS1dl
YlZpZXdgJ3MgY29udGVudHMgYXMgYW4gYE5TU3RyaW5nYCwganVzdCBmb3IgY29udmVuaWVuY2Uu
CisKIDIwMjEtMDItMTggIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAog
ICAgICAgICBTa2lwIHBsYXRmb3JtIHNwZWNpZmljIFB5dGhvbiB0ZXN0cwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQppbmRleCBmNTIw
OTQxZmU4OWU1Nzk3MWZiYzk5YTRiOTVjMjU1MTcxMWViMmIxLi5kMTVhMjY0ODZmYzExYTJjMmRh
ODY3N2FiYWMzYTk1YjI3ZDk5MGE4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAorI2ltcG9ydCAiQ2xhc3NNZXRob2RTd2l6emxlci5oIgogI2lt
cG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCkBAIC00OCw2ICs0OSwyNiBAQCBzdGF0aWMgdm9pZCBjaGVja0pT
T05XaXRoTG9nZ2luZyhOU1N0cmluZyAqanNvblN0cmluZywgTlNEaWN0aW9uYXJ5ICpleHBlY3Rl
ZCkKICAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBKU09OOiAlQCB0byBtYXRjaCB2YWx1ZXM6ICVA
IiwganNvblN0cmluZywgZXhwZWN0ZWQpOwogfQogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFf
T1dORVIpCisKK3N0YXRpYyBfVUlEYXRhT3duZXIgZ0xhc3RLbm93bkRhdGFPd25lciA9IF9VSURh
dGFPd25lclVuZGVmaW5lZDsKKworQGludGVyZmFjZSBUZXN0VUlQYXN0ZWJvYXJkIDogTlNPYmpl
Y3QKKysgKHZvaWQpX3BlcmZvcm1Bc0RhdGFPd25lcjooX1VJRGF0YU93bmVyKW93bmVyIGJsb2Nr
OihkaXNwYXRjaF9ibG9ja190KWJsb2NrOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFVJ
UGFzdGVib2FyZAorCisrICh2b2lkKV9wZXJmb3JtQXNEYXRhT3duZXI6KF9VSURhdGFPd25lcilv
d25lciBibG9jazooZGlzcGF0Y2hfYmxvY2tfdClibG9jaworeworICAgIGJsb2NrKCk7CisgICAg
Z0xhc3RLbm93bkRhdGFPd25lciA9IG93bmVyOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBIQVZF
KFBBU1RFQk9BUkRfREFUQV9PV05FUikKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtMzQ4LDYgKzM2OSw1MCBAQCBURVNUKFVJUGFzdGVi
b2FyZFRlc3RzLCBNaXNzaW5nUHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZUZvckltYWdlKQogICAg
IEVYUEVDVF9XS19TVFJFUSgiMCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS53aWR0aCJdKTsKICAgICBFWFBFQ1Rf
V0tfU1RSRVEoIjE3NCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS5oZWlnaHQiXSk7CiB9CisKKyNpZiBIQVZFKFBB
U1RFQk9BUkRfREFUQV9PV05FUikKKworVEVTVChVSVBhc3RlYm9hcmRUZXN0cywgUGVyZm9ybVdp
dGhEYXRhT3duZXJXaGVuQ29weWluZykKK3sKKyAgICBhdXRvIHN3aXp6bGVyID0gQ2xhc3NNZXRo
b2RTd2l6emxlciB7CisgICAgICAgIFVJUGFzdGVib2FyZC5jbGFzcywKKyAgICAgICAgQHNlbGVj
dG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KSwKKyAgICAgICAgW1Rlc3RVSVBhc3RlYm9h
cmQgbWV0aG9kRm9yU2VsZWN0b3I6QHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6
KV0KKyAgICB9OworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBXZWJWaWV3Rm9yUGFzdGVib2Fy
ZFRlc3RzKEAic2ltcGxlIik7CisgICAgW3dlYlZpZXcgX3NldERhdGFPd25lckZvckNvcHk6X1VJ
RGF0YU93bmVyU2hhcmVkXTsKKyAgICBbd2ViVmlldyBfc2V0RGF0YU93bmVyRm9yUGFzdGU6X1VJ
RGF0YU93bmVyRW50ZXJwcmlzZV07CisgICAgW3dlYlZpZXcgc2VsZWN0QWxsOm5pbF07CisgICAg
W3dlYlZpZXcgY29weTpuaWxdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9u
VXBkYXRlXTsKKworICAgIEVYUEVDVF9FUShnTGFzdEtub3duRGF0YU93bmVyLCBfVUlEYXRhT3du
ZXJTaGFyZWQpOworICAgIEVYUEVDVF9XS19TVFJFUShVSVBhc3RlYm9hcmQuZ2VuZXJhbFBhc3Rl
Ym9hcmQuc3RyaW5nLCAiU2ltcGxlIEhUTUwgZmlsZS4iKTsKK30KKworVEVTVChVSVBhc3RlYm9h
cmRUZXN0cywgUGVyZm9ybVdpdGhEYXRhT3duZXJXaGVuUGFzdGluZykKK3sKKyAgICBhdXRvIHN3
aXp6bGVyID0gQ2xhc3NNZXRob2RTd2l6emxlciB7CisgICAgICAgIFVJUGFzdGVib2FyZC5jbGFz
cywKKyAgICAgICAgQHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KSwKKyAgICAg
ICAgW1Rlc3RVSVBhc3RlYm9hcmQgbWV0aG9kRm9yU2VsZWN0b3I6QHNlbGVjdG9yKF9wZXJmb3Jt
QXNEYXRhT3duZXI6YmxvY2s6KV0KKyAgICB9OworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBX
ZWJWaWV3Rm9yUGFzdGVib2FyZFRlc3RzKEAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSIpOwor
ICAgIFt3ZWJWaWV3IF9zZXREYXRhT3duZXJGb3JDb3B5Ol9VSURhdGFPd25lclNoYXJlZF07Cisg
ICAgW3dlYlZpZXcgX3NldERhdGFPd25lckZvclBhc3RlOl9VSURhdGFPd25lckVudGVycHJpc2Vd
OworCisgICAgVUlQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJkLnN0cmluZyA9IEAiRm9vIGJh
ciI7CisgICAgW3dlYlZpZXcgcGFzdGU6bmlsXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFBy
ZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBFWFBFQ1RfRVEoZ0xhc3RLbm93bkRhdGFPd25lciwg
X1VJRGF0YU93bmVyRW50ZXJwcmlzZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFt3ZWJWaWV3IGNv
bnRlbnRzQXNTdHJpbmddLCAiRm9vIGJhclxuIik7Cit9CisKKyNlbmRpZiAvLyBIQVZFKFBBU1RF
Qk9BUkRfREFUQV9PV05FUikKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0V0tXZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZp
ZXcuaAppbmRleCAyMmE0ODI2YzQxMmIyOTQ5M2U1YzM0ZGQ0YWVjODM0MDdmMWY5MzI4Li40NjYz
ZGY3NDA4MzI0MjY0ODBjMzA4MWQ4ZmE2MjM4OTkwMmNhMjcyIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaApAQCAtNDgsNiArNDgsNyBAQAogQGVuZAogCiBAaW50
ZXJmYWNlIFdLV2ViVmlldyAoVGVzdFdlYktpdEFQSSkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNTdHJpbmcgKmNvbnRlbnRzQXNTdHJpbmc7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnRhZ3NJbkJvZHk7CiAtICh2b2lkKWxv
YWRUZXN0UGFnZU5hbWVkOihOU1N0cmluZyAqKXBhZ2VOYW1lOwogLSAodm9pZClzeW5jaHJvbm91
c2x5R29CYWNrOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tX
ZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCmlu
ZGV4IDM0YTQ2NDA5YzEyMmVjN2ZhMmE2ODZlYmFkZjk1MTE5YThiYTUyYTIuLjJlOWIxMzQzOWUy
ODVmZDIyN2NmYzE5YzUxNzM2NTNjMTFiNjQ3ZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RXS1dlYlZpZXcubW0KQEAgLTEzMCw2ICsxMzAsMTggQEAgLSAoQk9PTClfc3luY2hy
b25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50OihO
U1N0cmluZwogICAgIHJldHVybiBzdWNjZXNzOwogfQogCistIChOU1N0cmluZyAqKWNvbnRlbnRz
QXNTdHJpbmcKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIF9fYmxvY2sg
UmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQ7CisgICAgW3NlbGYgX2dldENvbnRlbnRzQXNTdHJp
bmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqY29udGVudHMsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGNvbnRlbnRzOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIHJldHVy
biByZXN1bHQuYXV0b3JlbGVhc2UoKTsKK30KKwogLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXRh
Z3NJbkJvZHkKIHsKICAgICByZXR1cm4gW3NlbGYgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIkFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKS5t
YXAoZSA9PiBlLnRhZ05hbWUpIl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420988</attachid>
            <date>2021-02-19 10:45:38 -0800</date>
            <delta_ts>2021-02-19 11:03:46 -0800</delta_ts>
            <desc>v2</desc>
            <filename>bug-222072-20210219104537.patch</filename>
            <type>text/plain</type>
            <size>85369</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxZjI2OWZkYWFlOWIzYTczMTM1Y2U4
MTlhYWFmYjRhMWUxMDcwMzguLmUxNjFiNjNjODBmNmRhMDMwMGEyMmFjNjA3YjIzN2I3NzFmNWZh
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25l
ciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUhhdmUuaDoKKworICAgICAgICBU
dXJuIHNldmVyYWwgY29tcGlsZS10aW1lIGd1YXJkcyBwcmV2aW91c2x5IGluIGBQbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW1gIGludG8gYEhBVkUoKWAtcy4KKwogMjAyMS0wMi0xOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0IEVOQUJMRV9WUDkgdG8gMSBv
biBJT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA5NTU1OTBkYTA1Y2Y2MWY5NmEyOGUwYWUwYzRkYmEzNmE5YjA5
MTE5Li5lN2ZhN2Q2MGJiNDI4NTY5MWQyYjk1OTcxNjgxZTE4YTI3MDQxZTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVu
IHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBzdGF0aWMgaGVscGVyIG1ldGhvZCB0byBgUGxhdGZvcm1Q
YXN0ZWJvYXJkYCwgc28gdGhhdCBpdCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgcGFzdGVib2FyZCBv
cGVyYXRpb25zCisgICAgICAgIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIGdpdmVuIGBEYXRhT3du
ZXJUeXBlYC4gV2UgdGhlbiB1c2UgdGhpcyBzdGF0aWMgaGVscGVyIHRvIHdyYXAgYWxsIHBhc3Rl
Ym9hcmQgYWNjZXNzCisgICAgICAgIChyZWFkaW5nLCB3cml0aW5nLCBldGMuKSBpbnNpZGUgY2Fs
bHMgdG8gYCtbVUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XWAgLS0gc2Vl
IFdlYktpdCBDaGFuZ2VMb2cKKyAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICBU
ZXN0czogIFVJUGFzdGVib2FyZFRlc3RzLlBlcmZvcm1XaXRoRGF0YU93bmVyV2hlbkNvcHlpbmcK
KyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5QZXJmb3JtV2l0aERhdGFPd25lcldo
ZW5QYXN0aW5nCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9EYXRhT3duZXJU
eXBlLmg6IEFkZGVkLgorCisgICAgICAgIEFkZCBhIG5ldyBlbnVtIHRvIHJlcHJlc2VudCBhIGRh
dGEgb3duZXIgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1XaXRoRGF0YU93bmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9saWJ3cGUvUGxhdGZvcm1QYXN0ZWJvYXJkTGliV1BFLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybVdpdGhEYXRhT3du
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1XaXRoRGF0YU93bmVy
KToKKwogMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBQbHVtYiBhbiBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gdGhyb3VnaCBXZWJQ
YXN0ZWJvYXJkUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDgwODQ3OTQyZmI2M2QyZDUxYjdj
OThlNGRiYmQ3OWY0MWMxYzc1ZTUuLmYxYWEwNjc4Y2RmYWMwMjBhMjc0OGUyYWUyM2NiYTY2ODkx
ZDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTAyLTE4ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNw
ZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lz
dGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wb3J0IGBVSVBhc3Rl
Ym9hcmRfUHJpdmF0ZS5oYCBzbyB0aGF0IGBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW1gIGNhbiB1
c2UgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgorCiAy
MDIxLTAyLTE4ICBQZXIgQXJuZSAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNP
U10gT2JzZXJ2ZSBzeXN0ZW0gc2xlZXAgZXZlbnRzIGluIHRoZSBVSSBwcm9jZXNzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGE0NTJhMGFiNTkxYjEyM2ZkYTExMmRlMDUwNWI2ZjhiNzM1MzBhNjEuLjUxYmE1NWY4Mjgy
NThmYzNjZjhiZTk3NmNmY2EwM2JiYTRkYWQzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAK
KzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVuIHJlYWRpbmcgb3Igd3JpdGlu
ZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDIw
ODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRzIFdlYktpdDIgc3VwcG9ydCBmb3IgdGFnZ2luZyBgUGxhdGZvcm1QYXN0ZWJvYXJkYCB3aXRo
IHRoZSBjb250ZW50IHZpZXcncyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZS4gU2VlCisgICAg
ICAgIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmg6CisKKyAgICAgICAgSW1wb3J0IGBVSVBhc3RlYm9hcmRfUHJpdmF0ZS5oYCBz
byB0aGF0IHdlIGtub3cgYWJvdXQgYCtfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOmAgaW4gdGhl
IEFQSSB0ZXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5n
ZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJv
YXJkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3Rl
Ym9hcmRVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmFkZFBhc3Rl
Ym9hcmRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFz
dGVib2FyZFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNl
dFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5Ojpjb250YWluc1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyk6CisKKyAgICAgICAg
TWFrZSBhbGwgb2YgdGhlc2UgbWV0aG9kcyB1c2UgYGRhdGFPd25lcigpYCB3aXRoIGVpdGhlciBh
IGBSZWFkYCBvciBgV3JpdGVgIHBhc3RlYm9hcmQgYWNjZXNzIGludGVudCB0byBncmFiIHRoZQor
ICAgICAgICBkYXRhIG93bmVyIHR5cGUgZnJvbSB0aGUgdmlldyBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBwYWdlIGlkZW50aWZpZXIsIGFuZCB0aGVuIHdyYXAgYWxsIHBhc3RlYm9hcmQgYWNjZXNzIHdp
dGhpbgorICAgICAgICBgUGxhdGZvcm1QYXN0ZWJvYXJkYCdzIG5ldyBgcGVyZm9ybUFzRGF0YU93
bmVyYCBzdGF0aWMgaGVscGVyLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFz
dGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZv
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0
ZW1BdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlw
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29u
dGVudFRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
d3JpdGVJbWFnZVRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkUHJveHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6ZGF0YU93bmVyIGNvbnN0KToKKworICAgICAgICBV
c2UgdGhlIGdpdmVuIHBhZ2UgaWRlbnRpZmllciBpbiB2YXJpb3VzIHBhc3RlYm9hcmQgSVBDIGVu
ZHBvaW50cyBpbiBgV2ViUGFzdGVib2FyZFByb3h5YCB0byBhc2sgYFdlYlBhZ2VQcm94eWAKKyAg
ICAgICAgZm9yIGl0cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZSB3aGVuIHJlYWRpbmcgb3Ig
d3JpdGluZyBwYXN0ZWJvYXJkIGRhdGEuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVu
dC5oOgorCisgICAgICAgIEFkZCBhIGNsaWVudCBob29rIHRvIHJldHVybiBhIGBEYXRhT3duZXJU
eXBlYCBlbnVtLCBnaXZlbiBhIGBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50YCAtLSB0aGF0IGlzLCBj
b3B5ICh3cml0ZSkgb3IKKyAgICAgICAgcGFzdGUgKHJlYWQpLgorCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnQ6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRh
dGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2Rh
dGFPd25lckZvclBhc3RlYm9hcmQ6XSk6CisKKyAgICAgICAgUmV0dXJuIGAtX2RhdGFPd25lckZv
clBhc3RlYCBvciBgLV9kYXRhT3duZXJGb3JDb3B5YCAoZGVwZW5kaW5nIG9uIHRoZSBgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudGApLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMDItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUGx1bWIgYW4gT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHRocm91
Z2ggV2ViUGFzdGVib2FyZFByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDA0ODZmY2UyYzQx
ODZkMmQ4YmYyNTkxMjU1OTZlODYzOWNkMzQ1MTEuLmM3NDdkNGUxMGYzNzM4YjVlYzA3OTJkYjcx
MDQ4MjIwYzcyZWZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCkBAIC04ODgsMyArODg4LDE1IEBA
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEyMDAwMAogI2RlZmluZSBIQVZFX1NUQVRJQ19GT05UX1JFR0lTVFJZIDEKICNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9S
TShBUFBMRVRWKQorI2RlZmluZSBIQVZFX1BBU1RFQk9BUkRfSVRFTV9QUk9WSURFUlMgMQorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oV0FUQ0hPUykgJiYg
IVBMQVRGT1JNKEFQUExFVFYpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKKyNkZWZpbmUgSEFW
RV9QQVNURUJPQVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBIDEKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorI2Rl
ZmluZSBIQVZFX05TVVJMX1RJVExFIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggN2Fk
ODFkOTdhOWRmYWI4ZWRlYTFlZTAyZGM4ZWQyNDM4MjkxZTVkNC4uZTY0NWYxMzVjN2JlZGI4MzVj
NTkzMWEwMjJhNGIzNjEwNzI0MDZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC05OTksNiArOTk5
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L0N1cnNvci5oCiAgICAgcGxhdGZvcm0vRGF0YUxpc3RTdWdnZXN0aW9uUGlja2VyLmgKICAgICBw
bGF0Zm9ybS9EYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmgKKyAgICBwbGF0Zm9ybS9EYXRhT3du
ZXJUeXBlLmgKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCiAgICAgcGxhdGZvcm0vRGVj
aW1hbC5oCiAgICAgcGxhdGZvcm0vRGVmZXJyYWJsZVRhc2suaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCBhMjA1Mjc5MGU3OTdkNzc0MWVlZmE3NmQyNDUz
YTdiNDQzODYxNTg5Li4zYmUwNzhjNzM2MDZiNWNkNDM2YTkwODYwOTRmOGU2NzY1ZTZkOTA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNDEsNiArNDEs
NyBAQCBXVEZfRVhURVJOX0NfRU5ECiAjaW1wb3J0IDxVSUtpdC9VSUZvY3VzUmluZ1N0eWxlLmg+
CiAjaW1wb3J0IDxVSUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlJbnRl
cmZhY2VfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQYXN0ZWJvYXJkX1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJVmll
d0NvbnRyb2xsZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJvdmlkZXIrVUlL
aXRBZGRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4MjgyMGQ1ZjgyNmY0YTZmZDdlNmJlMDgwMTlkZTU3ZTRmN2Zh
Y2VlLi42OGJmMjMwOWJlYzJmNjlhMjcxNGY1ZDI1OWQ2NzM4ODAxYzExZGU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Mjgx
LDYgKzUyODEsNyBAQAogCQlGNDU3NzVDRTI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3
NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NjcyOTI4MUUwREU2ODUwMEFDQzNE
OCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjcyOTI1MUUwREU1QUIwMEFDQzNEOCAvKiBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGNDZDNDQ3RTIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdz
RGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ2QzQ0N0MyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuaCAqLzsgfTsKKwkJRjQ3Mzg0NTgyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NzM4
NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTA5RDEyMEE5M0E5NzAwMjQwRkFF
IC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0
YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0IxOTVC
OEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E2MzNEMUZGNkZENTAwMDgxQjND
QyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNjMzQzFGRjZGRDUwMDA4MUIzQ0MgLyogUHJvbWlzZWRB
dHRhY2htZW50SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNjYyOCw2ICsxNjYyOSw3IEBACiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5
RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBh
c3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJv
YXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIz
NDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NzM4NDU3MjVEREU5RkIwMDZERThERCAv
KiBEYXRhT3duZXJUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFPd25lclR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5Q0YyMEE5MzlGNjAwMjQwRkFFIC8qIERpc2Fi
bGVkQWRhcHRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzYWJsZWRBZGFwdGF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlENDIwQTlERDA0MDAyNDBGQUUgLyog
RGlzYWJsZWRBZGFwdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNhYmxlZEFkYXB0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTVFM0IxOTVCOEM4
QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI3NTg0LDYgKzI3NTg2LDcgQEAKIAkJCQlGNTg3ODY4NDAyREUzQjg2MDFF
QTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJRTUyQ0Y1NEUyMEEzNUEyODAwREFEQTI3IC8qIERh
dGFMaXN0U3VnZ2VzdGlvblBpY2tlci5oICovLAogCQkJCUU1MkNGNTRDMjBBMjY4QUMwMERBREEy
NyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggKi8sCisJCQkJRjQ3Mzg0NTcyNURERTlG
QjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLywKIAkJCQlBNTczMkIwODEzNkExNjFEMDA1
QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovLAogCQkJCUE1NzMyQjA5MTM2QTE2MUQwMDVD
OEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICovLAogCQkJCTM3QzczOEYxMUVEQkRFODcwMDNGMkIw
QiAvKiBEYXRlVGltZUNob29zZXIuaCAqLywKQEAgLTMxODM4LDYgKzMxODQxLDcgQEAKIAkJCQlF
NTE3NjcwMzIwQjg4QzE0MDBENDExNjcgLyogRGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTRGMjBBMzVBMjgwMERBREEyNyAvKiBEYXRhTGlz
dFN1Z2dlc3Rpb25QaWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTREMjBBMjY4QUMw
MERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogRGF0YU93bmVyVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNFMEE0NEVGQzcwMEY5OTJFMCAvKiBEYXRhVHJh
bnNmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBE
YXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Rh
dGFPd25lclR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDQxM2M1YjNiY2RjZWE4OWFmOGE3NTBlYTc1ZTYz
M2FlNzc2MTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0
YU93bmVyVHlwZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIERhdGFPd25lclR5cGUgOiB1aW50
OF90IHsKKyAgICBVbmRlZmluZWQsCisgICAgVXNlciwKKyAgICBFbnRlcnByaXNlLAorICAgIFNo
YXJlZAorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAppbmRleCA2NGI4ODUyMDAwZTU1YjA0ODhjYWIyZGY1
MzA5YzAzMDg4OWZlMmExLi42YWI0MWZiN2UxMjlmMGJlOTVjYmRjYThmZTgxY2ZhY2NjYzNjNGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
LDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybVBhc3Rl
Ym9hcmRfaAotI2RlZmluZSBQbGF0Zm9ybVBhc3RlYm9hcmRfaAorI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJEYXRhT3duZXJUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC02NSw2
ICs2NSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQYXN0ZWJvYXJk
SXRlbUluZm8+IGluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoc2l6ZV90IGluZGV4LCBpbnQ2NF90
IGNoYW5nZUNvdW50KTsKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8UGFzdGVi
b2FyZEl0ZW1JbmZvPj4gYWxsUGFzdGVib2FyZEl0ZW1JbmZvKGludDY0X3QgY2hhbmdlQ291bnQp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcGVyZm9ybUFzRGF0YU93bmVyKERh
dGFPd25lclR5cGUsIEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKICAgICBlbnVtIGNsYXNzIEluY2x1
ZGVJbWFnZVR5cGVzIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBzdGF0aWMgU3RyaW5nIHBsYXRm
b3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0
cmluZyYgZG9tVHlwZSwgSW5jbHVkZUltYWdlVHlwZXMgPSBJbmNsdWRlSW1hZ2VUeXBlczo6Tm8p
OwogCkBAIC0xMjYsNiArMTI4LDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotfQotCi0jZW5k
aWYgLy8gIVBsYXRmb3JtUGFzdGVib2FyZF9oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQppbmRleCBmOWQ4ZDkyYzE2YzdlNjdjOTA3NjQxYTEzOGJlMGY1ZWY3ZmU4Yjk5Li5jMzY2Yjgw
MjdkOWU3ZDU0NGVjZjc2NDI4MzkyMjc2OTMzODU1NDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTg2LDYgKzg2
LDMyIEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBsYXRmb3JtUGFzdGVib2FyZDo6YnVmZmVyRm9y
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSB0eXBl
LCBGdW5jdGlvbjx2b2lkKCk+JiYgYWN0aW9ucykKK3sKKyAgICBhdXRvIGRhdGFPd25lciA9IF9V
SURhdGFPd25lclVuZGVmaW5lZDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIERhdGFP
d25lclR5cGU6OlVuZGVmaW5lZDoKKyAgICAgICAgZGF0YU93bmVyID0gX1VJRGF0YU93bmVyVW5k
ZWZpbmVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGFPd25lclR5cGU6OlVzZXI6Cisg
ICAgICAgIGRhdGFPd25lciA9IF9VSURhdGFPd25lclVzZXI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRGF0YU93bmVyVHlwZTo6RW50ZXJwcmlzZToKKyAgICAgICAgZGF0YU93bmVyID0gX1VJ
RGF0YU93bmVyRW50ZXJwcmlzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhT3duZXJU
eXBlOjpTaGFyZWQ6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURhdGFPd25lclNoYXJlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFtQQUw6OmdldFVJUGFzdGVib2FyZENsYXNz
KCkgX3BlcmZvcm1Bc0RhdGFPd25lcjpkYXRhT3duZXIgYmxvY2s6XnsKKyAgICAgICAgYWN0aW9u
cygpOworICAgIH1dOworfQorCiB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0UGF0aG5hbWVz
Rm9yVHlwZShWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saWJ3cGUvUGxhdGZvcm1QYXN0ZWJvYXJk
TGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3Rl
Ym9hcmRMaWJXUEUuY3BwCmluZGV4IDNkZDQ4ZTlmMThmMjcxMTBlODE2ZTI2MjAxMDVhZmI4ZmVk
OGQwODIuLjM0MTEwOGMxZjgwNDYyZDMzNjg1NzkyOGZkYWNjY2RkMTYzZmYzNjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJX
UEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3Rl
Ym9hcmRMaWJXUEUuY3BwCkBAIC00Nyw2ICs0NywxMSBAQCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBs
YXRmb3JtUGFzdGVib2FyZCgpCiAgICAgQVNTRVJUKG1fcGFzdGVib2FyZCk7CiB9CiAKK3ZvaWQg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSwgRnVu
Y3Rpb248dm9pZCgpPiYmIGFjdGlvbnMpCit7CisgICAgYWN0aW9ucygpOworfQorCiB2b2lkIFBs
YXRmb3JtUGFzdGVib2FyZDo6Z2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKQogewogICAg
IHN0cnVjdCB3cGVfcGFzdGVib2FyZF9zdHJpbmdfdmVjdG9yIHBhc3RlYm9hcmRUeXBlcyA9IHsg
bnVsbHB0ciwgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0
Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggOWU1OWM3YWUxMzc1ZjljZTM5MjEyMjM3OTk3MGI3
OGQzNWYwZmE2Ni4uNjlhODMzNjcyNGI3MzA0M2ZiZDM1ZjY2M2Y4OTJkNmI5MDQ1YWM0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJk
TWFjLm1tCkBAIC01Miw2ICs1MiwxMSBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKICAgICByZXR1cm4gWyhfX2JyaWRnZSBOU1N0cmluZyAqKWNmU3RyaW5nLmdldCgpIGxlbmd0
aE9mQnl0ZXNVc2luZ0VuY29kaW5nOk5TU3RyaW5nLmRlZmF1bHRDU3RyaW5nRW5jb2RpbmddOwog
fQogCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKERhdGFPd25l
clR5cGUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBhY3Rpb25zKQoreworICAgIGFjdGlvbnMoKTsKK30K
KwogUGxhdGZvcm1QYXN0ZWJvYXJkOjpQbGF0Zm9ybVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKICAgICA6IG1fcGFzdGVib2FyZChbTlNQYXN0ZWJvYXJkIHBhc3RlYm9h
cmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV0pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCmluZGV4IGY4NGM1MWZhMDc3NjNiMGQ5Y2IzYWVkNDFlNTRiZTU0YzEy
ZGU5ODUuLjFlMTdiODFkYjI0NDU3ZTU1NTA4MmJjZTU2NDNkOWIwZDU2ZGYzNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC01NCw2ICs1NCw3IEBACiAj
aW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlNZW51
Q29udHJvbGxlcl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVBhc3RlYm9hcmRfUHJpdmF0
ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgogI2ltcG9ydCA8VUlLaXQv
VUlQZXJpcGhlcmFsSG9zdF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBpY2tlckNvbnRl
bnRWaWV3X1ByaXZhdGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KaW5kZXggYzA3NmQ5NGI2ZTI0YmNkMmQx
OWRiNDc1OWNkMTliYmFmM2JhZmE4OS4uOTMzOWFkODk4MjE2NzkyZWVmZWI0YTlhZTYxNGE1ZjI4
MmRhYTFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFz
dGVib2FyZFByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KQEAgLTI3LDEyICsyNywxNCBAQAogI2ltcG9ydCAi
V2ViUGFzdGVib2FyZFByb3h5LmgiCiAKICNpbXBvcnQgIkNvbm5lY3Rpb24uaCIKKyNpbXBvcnQg
IlBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCIKICNpbXBvcnQgIlNhbmRib3hFeHRlbnNpb24uaCIK
ICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKICNp
bXBvcnQgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RhdGFPd25lclR5
cGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
YXN0ZWJvYXJkSXRlbUluZm8uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJk
Lmg+CkBAIC0xNDIsOSArMTQ0LDE0IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgaWYg
KCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIFZlY3RvcjxTdHJp
bmc+IHBhc3RlYm9hcmRUeXBlczsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShwYXN0ZWJvYXJkVHlwZXMpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFP
d25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNz
SW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhh
c1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJv
YXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gcGFzdGVib2FyZFR5cGVzOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocGFzdGVib2FyZFR5cGVzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQs
CkBAIC0xNTYsMjMgKzE2MywyNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVi
b2FyZFBhdGhuYW1lc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgIGlmICgh
Y2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAotICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhuYW1lczsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5k
Ym94RXh0ZW5zaW9uczsKLSAgICBpZiAod2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25u
ZWN0aW9uKSkgewotICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdl
dFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgYXV0byBk
YXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBh
Z2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19D
T01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsg
fSkpOwogCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFP
d25lciwgWyZdIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGF0aG5hbWVzOworICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uczsKKyAgICAgICAg
aWYgKHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpIHsKKyAgICAgICAg
ICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlw
ZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgICAg
IC8vIE9uIGlPUywgZmlsZXMgYXJlIGNvcGllZCBpbnRvIGFwcCdzIGNvbnRhaW5lciB1cG9uIHBh
c3RlLgotICAgICAgICBzYW5kYm94RXh0ZW5zaW9ucy5hbGxvY2F0ZShwYXRobmFtZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRobmFtZXMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgICAgIGF1dG8mIGZpbGVuYW1lID0gcGF0aG5hbWVzW2ldOwotICAgICAgICAg
ICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
ZmlsZW5hbWVdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVuYW1lLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbnNbaV0pOwotICAgICAgICB9CisgICAgICAgICAg
ICAvLyBPbiBpT1MsIGZpbGVzIGFyZSBjb3BpZWQgaW50byBhcHAncyBjb250YWluZXIgdXBvbiBw
YXN0ZS4KKyAgICAgICAgICAgIHNhbmRib3hFeHRlbnNpb25zLmFsbG9jYXRlKHBhdGhuYW1lcy5z
aXplKCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRobmFtZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBmaWxlbmFtZSA9IHBhdGhuYW1lc1tp
XTsKKyAgICAgICAgICAgICAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpmaWxlbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShmaWxlbmFt
ZSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHNhbmRib3hFeHRlbnNpb25zW2ld
KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHBhdGhuYW1lcyksIFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbnMpKTsKKyAgICAgICAg
fQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBhdGhuYW1lcyksIFdURk1vdmUo
c2FuZGJveEV4dGVuc2lvbnMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODIsNyArMTkzLDEyIEBA
IHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0
YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKSk7CisgICAgYXV0
byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUs
IHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVD
S19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0p
KTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3du
ZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSkpOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTE5Miw3ICsyMDgsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFsbFN0
cmluZ3NGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlz
LT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFP
d25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3Jt
UGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxs
U3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIwMiwyNSArMjIzLDM3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpn
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAg
ICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgdWludDY0X3Qgc2l6ZSA9IGJ1
ZmZlci0+c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVy
ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplKTsKLSAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgbWVtY3B5
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7Ci0gICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVy
LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5
KSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIHNpemUg
fSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9u
SGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gYnVmZmVyID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKKyAg
ICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBp
ZiAoIXNpemUpCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVt
b3J5OjphbGxvY2F0ZShzaXplKTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgbWVtY3B5
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7CisgICAg
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1v
cnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6
UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92
ZShoYW5kbGUpLCBzaXplIH0pOworICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLmNoYW5nZUNvdW50KCkpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVi
b2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBhdXRvIGRh
dGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFn
ZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NP
TVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKwor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsm
XSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9yJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMjI4LDcgKzI2MSwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZENvbG9yKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29sb3IoKSk7
CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVy
KCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29sb3IoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTIzNiw3ICsyNzQsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
dHIKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybCgp
LnN0cmluZygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFk
KTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3Jt
QXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS51cmwoKS5zdHJpbmcoKSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjphZGRQYXN0ZWJvYXJkVHlwZXMoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxQYWdlSWRlbnRp
Zmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMjQ2LDEwICsyODksMTUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OmFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMK
ICAgICBmb3IgKGF1dG8mIHR5cGUgOiBwYXN0ZWJvYXJkVHlwZXMpCiAgICAgICAgIE1FU1NBR0Vf
Q0hFQ0tfQ09NUExFVElPTighdHlwZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsK
IAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMp
OwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBwcmV2aW91c0NoYW5nZUNvdW50KTsKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0
aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihk
YXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAg
ICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMp
OworICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MjU5LDEwICszMDcsMTUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRU
eXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICBmb3IgKGF1dG8m
IHR5cGUgOiBwYXN0ZWJvYXJkVHlwZXMpCiAgICAgICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElP
TighdHlwZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIGF1dG8gcHJl
dmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hh
bmdlQ291bnQoKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5zZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOwotICAgIGRpZE1vZGlm
eUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91
c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobmV3
Q2hhbmdlQ291bnQpOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5l
Y3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6Oldy
aXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCks
IGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9y
bUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQo
KTsKKyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKKyAgICAgICAgZGlkTW9kaWZ5
Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3Vz
Q2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bmV3Q2hhbmdlQ291bnQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3Rl
Ym9hcmRVUkwmIHBhc3RlYm9hcmRVUkwsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9w
dGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50
NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNzYsMTAgKzMyOSwxNSBAQCB2b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFBhcwogICAgICAgICBpZiAoIXdlYlByb2Nlc3NQcm94eS0+Y2hlY2tVUkxS
ZWNlaXZlZEZyb21XZWJQcm9jZXNzKHBhc3RlYm9hcmRVUkwudXJsLnN0cmluZygpLCBDaGVja0Jh
Y2tGb3J3YXJkTGlzdDo6Tm8pKQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KDApOwogCi0gICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICAgICAgYXV0byBuZXdDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VVJMKHBhc3Rl
Ym9hcmRVUkwpOwotICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQp
OwotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAg
ICAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgICAg
IE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlv
bkhhbmRsZXIoMCkpOworCisgICAgICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0
YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdl
Q291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7
CisgICAgICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5zZXRVUkwocGFzdGVib2FyZFVSTCk7CisgICAgICAgICAgICBkaWRNb2Rp
ZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlv
dXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIGNv
bXBsZXRpb25IYW5kbGVyKDApOwogfQpAQCAtMjg4LDEwICszNDYsMTUgQEAgdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFMKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmRO
YW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91
c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VD
b3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLnNldENvbG9yKGNvbG9yKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFz
dGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwg
bmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsK
KyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFu
ZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigq
ZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0
Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CisgICAgICAgIGF1
dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNl
dENvbG9yKGNvbG9yKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29u
bmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNv
dW50KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5
cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZywg
T3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChp
bnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI5OSwxMCArMzYyLDE1IEBAIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sCiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJv
YXJkTmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKICAgICBNRVNTQUdFX0NI
RUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0ZvclR5cGUo
c3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9h
cmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0No
YW5nZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAg
YXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0Vf
Q0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIo
MCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFP
d25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICBhdXRvIG5l
d0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRTdHJp
bmdGb3JUeXBlKHN0cmluZywgcGFzdGVib2FyZFR5cGUpOworICAgICAgICBkaWRNb2RpZnlDb250
ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFu
Z2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdD
aGFuZ2VDb3VudCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250
YWluc1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0zMTAsNyArMzc4LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWlu
c1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvCiAgICAgaWYg
KCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCi0gICAgY29tcGxldGlv
bkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb250YWluc1VSTFN0
cmluZ1N1aXRhYmxlRm9yTG9hZGluZygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRh
dGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVy
Lmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKSk7CisKKyAgICBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbnRh
aW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKCkpOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJiB1
cmwsIFN0cmluZyYmIHRpdGxlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTMxOCw5ICszOTEs
MTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGlu
ZyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9h
cmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAotICAgIFN0cmluZyB0aXRsZTsKLSAgICBhdXRvIHVy
bFN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsU3RyaW5nU3Vp
dGFibGVGb3JMb2FkaW5nKHRpdGxlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHVy
bFN0cmluZyksIFdURk1vdmUodGl0bGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRh
dGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVy
Lmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KSk7CisKKyAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAg
ICBTdHJpbmcgdGl0bGU7CisgICAgICAgIGF1dG8gdXJsU3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS51cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcodGl0bGUpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHVybFN0cmluZyksIFdURk1vdmUodGl0
bGUpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmIGlwY0hhbmRsZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTMyOCwyMCArNDA2LDI1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBs
ZXRpb25IYW5kbGVyKDApKTsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9h
cmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOwotICAgIGlmIChpcGNIYW5kbGUuaGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAg
IGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnNldEJ1ZmZlckZvclR5cGUobnVsbHB0ciwgcGFzdGVib2FyZFR5cGUpOwotICAgICAgICBkaWRN
b2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJl
dmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOwotICAgIH0KKyAgICBhdXRvIGRhdGFPd25lciA9
IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0
ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9O
KGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6Om1hcChp
cGNIYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAg
ICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKDApOwotICAgIGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIHN0YXRpY19j
YXN0PHNpemVfdD4oaXBjSGFuZGxlLmRhdGFTaXplKSk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZShi
dWZmZXIucHRyKCksIHBhc3RlYm9hcmRUeXBlKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFz
dGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwg
bmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsK
KyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBb
Jl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CisgICAgICAgIGlmIChpcGNIYW5kbGUu
aGFuZGxlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKG51bGxwdHIs
IHBhc3RlYm9hcmRUeXBlKTsKKyAgICAgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJv
YXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdD
aGFuZ2VDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmV3Q2hh
bmdlQ291bnQpOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIg
PSBTaGFyZWRNZW1vcnk6Om1hcChpcGNIYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7CisgICAgICAgIGF1dG8gYnVmZmVy
ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFy
ZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIHN0YXRpY19jYXN0PHNpemVfdD4oaXBjSGFuZGxlLmRh
dGFTaXplKSk7CisgICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoYnVmZmVyLnB0cigpLCBwYXN0ZWJv
YXJkVHlwZSk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQ
YWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTM0OSw3ICs0MzIsMTIgQEAgdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBTdHIKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigwKTsKIAot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
bnVtYmVyT2ZGaWxlcygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihj
b25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50
OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVl
KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVy
Zm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkubnVtYmVyT2ZGaWxlcygpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnR5cGVzU2FmZUZvckRPTVRv
UmVhZEFuZFdyaXRlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIE9wdGlvbmFsPFBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0zNTksMTcgKzQ0NywyNyBAQCB2b2lkIFdlYlBhc3RlYm9h
cmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aQogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBh
c3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG9yaWdpbikpOworICAgIGF1dG8gZGF0YU93
bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQs
IFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExF
VElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAg
ICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG9yaWdpbikpOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVDdXN0b21EYXRhKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgZGF0
YSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlz
RW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5n
ZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgp
OwotICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLndyaXRlKGRhdGEpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VD
b3VudCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIGF1dG8g
ZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
YWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsK
KworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIs
IFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgYXV0byBuZXdDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUoZGF0YSk7
CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGludDY0X3QgY2hhbmdl
Q291bnQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8VmVjdG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMzc3LDcgKzQ3NSwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
YWxsUGFzdGVib2FyZEl0ZW1JbmZvKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29ucwog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21w
bGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFsbFBhc3Rl
Ym9hcmRJdGVtSW5mbyhjaGFuZ2VDb3VudCkpOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+
ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3du
ZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAgICBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFsbFBh
c3RlYm9hcmRJdGVtSW5mbyhjaGFuZ2VDb3VudCkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
aW50NjRfdCBjaGFuZ2VDb3VudCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxQYXN0ZWJvYXJkSXRlbUluZm8+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMzg1LDcgKzQ4OCwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0
KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuaW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChpbmRleCwgY2hhbmdlQ291bnQpKTsKKyAg
ICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdF
X0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVy
KFdURjo6bnVsbG9wdCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRh
T3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5pbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KGlu
ZGV4LCBjaGFuZ2VDb3VudCkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTM5Myw3ICs1MDEsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY28KICAgICBpZiAo
IWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigwKTsKIAotICAgIGNvbXBsZXRpb25IYW5k
bGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY291bnQoKSk7CisgICAgYXV0
byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUs
IHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVD
S19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7
CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVy
LCBbJl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLmNvdW50KCkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTQw
Myw3ICs1MTYsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFz
dGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHMKICAgICBpZiAoIWNhbkFjY2Vz
c1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0
Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3RlYm9h
cmRUeXBlKSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7
CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21w
bGV0aW9uSGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFz
RGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZFN0cmluZyhpbmRleCwgcGFzdGVi
b2FyZFR5cGUpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRV
UkxGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRl
eCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJiB1cmwsIFN0cmluZyYmIHRp
dGxlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTQxMSw5ICs1MjksMTQgQEAgdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OnJlYWRVUkxGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIHNpemUKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSwgeyB9KTsKIAotICAgIFN0cmluZyB0aXRsZTsKLSAgICBTdHJpbmcgdXJsID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFkVVJMKGluZGV4LCB0aXRsZSkuc3RyaW5nKCk7
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHRpdGxlKSk7Cisg
ICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FH
RV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxl
cih7IH0sIHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3du
ZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgU3RyaW5nIHRpdGxlOworICAgICAgICBTdHJp
bmcgdXJsID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFkVVJMKGluZGV4
LCB0aXRsZSkuc3RyaW5nKCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUodXJs
KSwgV1RGTW92ZSh0aXRsZSkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
c2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtNDIzLDIwICs1NDYsMjUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJl
YWRCdWZmZXJGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHMKICAg
ICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnJlYWRCdWZmZXIoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgdWludDY0X3Qgc2l6ZSA9
IGJ1ZmZlci0+c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVm
ZmVyID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplKTsKLSAgICBpZiAoIXNoYXJlZE1lbW9y
eUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgbWVt
Y3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7Ci0g
ICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVm
ZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIHNp
emUgfSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwg
cGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7Cisg
ICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0
aW9uSGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0
YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gYnVmZmVyID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFkQnVmZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlw
ZSk7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAg
ICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNo
YXJlZE1lbW9yeTo6YWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5QnVm
ZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAg
IG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIHNpemUp
OworICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGlmICghc2hh
cmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7
IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC00NDQsNyArNTcyLDEy
IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1Jl
YWRGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRU
eXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5
cGUodHlwZSkpOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQp
OworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9y
bUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29udGFpbnNTdHJpbmdTYWZlRm9y
RE9NVG9SZWFkRm9yVHlwZSh0eXBlKSk7CisgICAgfSk7CiB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtNDUzLDMzICs1ODYsNDggQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6Ondy
aXRlVVJMVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QKIHsK
ICAgICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkpOwogCi0gICAgYXV0
byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
d3JpdGUodXJsKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKLSAgICBpZiAoYXV0byBwcm9jZXNzID0g
d2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKLSAgICAgICAgcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hy
b25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+
ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLKGRhdGFPd25lci5oYXNWYWx1
ZSgpKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRh
T3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZSh1cmwpOworICAgICAgICBkaWRNb2Rp
ZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlv
dXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VD
b3VudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNv
bm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9h
cmROYW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0
ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKIHsKICAgICBN
RVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkpOwogCi0gICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUo
Y29udGVudCk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwg
cGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7Ci0gICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdl
YlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCi0gICAgICAgIHByb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9u
b3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRh
dGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDSyhkYXRhT3duZXIuaGFzVmFsdWUo
KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93
bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CisgICAgICAgIFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUoY29udGVudCk7CisgICAgICAgIGRpZE1v
ZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2
aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5n
ZUNvdW50KCkpOworICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9y
Q29ubmVjdGlvbihjb25uZWN0aW9uKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVi
b2FyZE5hbWUpLCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKIHsKICAgICBN
RVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkpOwogCi0gICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUo
cGFzdGVib2FyZEltYWdlKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKLSAgICBpZiAoYXV0byBwcm9j
ZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKLSAgICAgICAg
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRB
c3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIGF1dG8gZGF0YU93bmVyID0g
dGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3Rl
Ym9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLKGRhdGFPd25lci5o
YXNWYWx1ZSgpKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVy
KCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAg
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJkSW1hZ2Up
OworICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdl
YlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICBwcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5j
aHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5Ojp3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCkKQEAgLTQ4NywyMCArNjM1LDUzIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3
cml0ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvCiAg
ICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKICAgICBNRVNTQUdF
X0NIRUNLKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCkgfHwgdGV4dC5pc0VtcHR5KCkpOwogCi0g
ICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkud3JpdGUocGFzdGVib2FyZFR5cGUsIHRleHQpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRz
T2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNv
dW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOwot
ICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5l
Y3Rpb24pKQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRX
cml0ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAg
YXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0Vf
Q0hFQ0soZGF0YU93bmVyLmhhc1ZhbHVlKCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpw
ZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91
c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VD
b3VudCgpOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLndyaXRl
KHBhc3RlYm9hcmRUeXBlLCB0ZXh0KTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3Rl
Ym9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgICAg
IGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rp
b24pKQorICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlk
V3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAg
IH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6dXBkYXRlU3VwcG9ydGVkVHlwZUlk
ZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKK3ZvaWQg
V2ViUGFzdGVib2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGlkZW50aWZpZXJzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4pCiB7CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS51cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoaWRlbnRpZmllcnMp
OwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAorT3B0aW9uYWw8RGF0YU93
bmVyVHlwZT4gV2ViUGFzdGVib2FyZFByb3h5OjpkYXRhT3duZXIoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRl
bnRpZmllcj4gcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50IGludGVudCkgY29uc3QKK3sK
KyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFwYXN0ZWJvYXJkTmFtZS5pc0Vt
cHR5KCksIFdURjo6bnVsbG9wdCk7CisKKyAgICBhdXRvKiBwcm9jZXNzID0gd2ViUHJvY2Vzc1By
b3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVU
VVJOX1ZBTFVFKHByb2Nlc3MsIFdURjo6bnVsbG9wdCk7CisKKyAgICBpZiAoIXBhZ2VJRCkKKyAg
ICAgICAgcmV0dXJuIERhdGFPd25lclR5cGU6OlVuZGVmaW5lZDsKKworI2lmIEhBVkUoUEFTVEVC
T0FSRF9EQVRBX09XTkVSKQorICAgIE9wdGlvbmFsPERhdGFPd25lclR5cGU+IHJlc3VsdDsKKyAg
ICBmb3IgKGF1dG8qIHBhZ2UgOiBwcm9jZXNzLT5wYWdlcygpKSB7CisgICAgICAgIGlmIChwYWdl
LT53ZWJQYWdlSUQoKSA9PSAqcGFnZUlEKSB7CisgICAgICAgICAgICByZXN1bHQgPSBwYWdlLT5k
YXRhT3duZXJGb3JQYXN0ZWJvYXJkKGludGVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvLyBJZiB0aGlzIG1lc3NhZ2UgY2hlY2sgaXMgaGl0LCB0aGVuIHRo
ZSBpbmNvbWluZyB3ZWIgcGFnZSBJRCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IHBhZ2UKKyAg
ICAvLyBjdXJyZW50bHkga25vd24gdG8gdGhlIFVJIHByb2Nlc3MuCisgICAgTUVTU0FHRV9DSEVD
S19XSVRIX1JFVFVSTl9WQUxVRShyZXN1bHQuaGFzVmFsdWUoKSwgV1RGOjpudWxsb3B0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW50ZW50KTsKKyAgICBy
ZXR1cm4gRGF0YU93bmVyVHlwZTo6VW5kZWZpbmVkOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRpb246OmdyYW50QWNjZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcywgUGFzdGVib2FyZEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAg
ICBhdXRvIG1hdGNoSW5kZXggPSBwcm9jZXNzZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBwcm9j
ZXNzQW5kVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGM4ODQx
OTlmNGI2OTNjMmJjZGE3ZjUzNzI5Y2RjYTNiMzQyNmYxMmQuLmQ1NDdlYzU3MTZlM2M3ODMyNDA4
MTQyZDVmYWQxYWUzYjcwZDU2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAi
TGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCiAjaW5jbHVkZSAiU2FtZURvY3VtZW50
TmF2aWdhdGlvblR5cGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRl
ICJXZWJDb2xvclBpY2tlci5oIgpAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250YWN0SW5mby5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGFjdHNSZXF1ZXN0RGF0YS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRGF0YU93bmVyVHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9j
dXNEaXJlY3Rpb24uaD4KQEAgLTUxNyw2ICs1MTksMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHNldEhhc0JsYW5rT3ZlcmxheShib29sKSB7IH0KIAorI2lmIEhBVkUoUEFTVEVCT0FS
RF9EQVRBX09XTkVSKQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RGF0YU93bmVyVHlwZSBkYXRhT3du
ZXJGb3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQpIGNvbnN0IHsgcmV0dXJuIFdl
YkNvcmU6OkRhdGFPd25lclR5cGU6OlVuZGVmaW5lZDsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
SU1BR0VfRVhUUkFDVElPTikKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEltYWdlRXh0cmFjdGlv
bihjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2ViQ29yZTo6SW1hZ2VFeHRyYWN0aW9uUmVzdWx0JiYpPiYmIGNvbXBsZXRpb24pIHsgY29tcGxl
dGlvbih7IH0pOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Bhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Bhc3Rl
Ym9hcmRBY2Nlc3NJbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjBjMjc2ZTQ4YTUxNzAzMmRmY2RlYjJl
YWY5MTViYzQ3MGRlMDgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gY2xhc3MgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudCA6IGJvb2wgeworICAgIFJlYWQsCisgICAgV3JpdGUKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggZDlhYzY5YTgzNDk3ZGYxODk2NDgzZDhiZjgzNzhmODY0MWE5NTEyMi4uMjQ3YjM1
YjA5ZGNlYjM1ODBhZWQ1MjRjZGVhZjBiMWMwNmI3OTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05NjIyLDYgKzk2MjIsMTUgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnRvdWNoQmFyTWVudUl0ZW1EYXRhUmVtb3ZlZChjb25zdCBUb3VjaEJhck1lbnVJdGVt
RGF0YSYgdG91Y2gKIH0KICNlbmRpZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIp
CisKK0RhdGFPd25lclR5cGUgV2ViUGFnZVByb3h5OjpkYXRhT3duZXJGb3JQYXN0ZWJvYXJkKFBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQgaW50ZW50KSBjb25zdAoreworICAgIHJldHVybiBwYWdlQ2xp
ZW50KCkuZGF0YU93bmVyRm9yUGFzdGVib2FyZChpbnRlbnQpOworfQorCisjZW5kaWYKKwogI2lm
IEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp3cml0ZVBy
b21pc2VkQXR0YWNobWVudFRvUGFzdGVib2FyZChXZWJDb3JlOjpQcm9taXNlZEF0dGFjaG1lbnRJ
bmZvJiYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZTQ3
NTgwZmJhODVkMDBkNGM2ZDY1YzAzZGU0MzdhNDIyYTAyOWJjYS4uMjE3ODc5YTZkZTZkZmUzOGYx
MzZkMmE4YWE0MTZmMjI5YTI0MTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQYWdlTG9hZFN0YXRlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEFjY2Vzc0lu
dGVudC5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
UG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRlICJQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIK
QEAgLTI4NSw2ICsyODYsMTAgQEAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogc3RydWN0IEltYWdl
RXh0cmFjdGlvblJlc3VsdDsKICNlbmRpZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dO
RVIpCitlbnVtIGNsYXNzIERhdGFPd25lclR5cGUgOiB1aW50OF90OworI2VuZGlmCisKIHRlbXBs
YXRlPHR5cGVuYW1lPiBjbGFzcyBSZWN0RWRnZXM7CiB1c2luZyBGbG9hdEJveEV4dGVudCA9IFJl
Y3RFZGdlczxmbG9hdD47CiB9CkBAIC0xMDc5LDYgKzEwODQsMTAgQEAgcHVibGljOgogICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdDsKICAgICBib29sIHVzZUVsZXZhdGVkVXNlcklu
dGVyZmFjZUxldmVsKCkgY29uc3Q7CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikK
KyAgICBXZWJDb3JlOjpEYXRhT3duZXJUeXBlIGRhdGFPd25lckZvclBhc3RlYm9hcmQoUGFzdGVi
b2FyZEFjY2Vzc0ludGVudCkgY29uc3Q7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIC8vIENhbGxlZCBieSB0aGUgd2ViIHByb2Nlc3MgdGhyb3VnaCBhIG1lc3NhZ2UuCiAgICAg
dm9pZCByZWdpc3RlcldlYlByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW4oY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0
ZWJvYXJkUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5oCmluZGV4IGY1Y2Q1OTU4YjJjZjQzMzZjNWJkMDJmYjZkZGNlM2M2MDNlMTc4NTIuLjlhZjky
ZjI5MDExOGY2NDU2Zjk3NjZlMWQ0Yzg4ZTc5ZjI5ZTllNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIFNo
YXJlZEJ1ZmZlckNvcHk7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2VudW0gY2xhc3MgRGF0
YU93bmVyVHlwZSA6IHVpbnQ4X3Q7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBhc3RlYm9hcmRDdXN0
b21EYXRhOwogY2xhc3MgU2VsZWN0aW9uRGF0YTsKQEAgLTUyLDYgKzUzLDcgQEAgc3RydWN0IFBh
c3RlYm9hcmRXZWJDb250ZW50OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorZW51bSBjbGFzcyBQ
YXN0ZWJvYXJkQWNjZXNzSW50ZW50IDogYm9vbDsKIGNsYXNzIFdlYkZyYW1lUHJveHk7CiBjbGFz
cyBXZWJQcm9jZXNzUHJveHk7CiAKQEAgLTEwMCw3ICsxMDIsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZ2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9u
YWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmlu
ZyYmKT4mJik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKICAgICB2b2lkIGdldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hh
bmRsZSYmKT4mJik7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmKTsKKyAgICB2b2lkIGdldFBhc3RlYm9h
cmRDaGFuZ2VDb3VudChJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoaW50NjRfdCk+JiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZENvbG9yKElQQzo6Q29u
bmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpDb2xvciYm
KT4mJik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CiAgICAgdm9pZCBh
ZGRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgT3B0aW9uYWw8
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3Qp
PiYmKTsKQEAgLTE0OSw2ICsxNTEsOCBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgUGFzdGVi
b2FyZEFjY2Vzc1R5cGUgOiB1aW50OF90IHsgVHlwZXMsIFR5cGVzQW5kRGF0YSB9OwogICAgIE9w
dGlvbmFsPFBhc3RlYm9hcmRBY2Nlc3NUeXBlPiBhY2Nlc3NUeXBlKElQQzo6Q29ubmVjdGlvbiYs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIGNvbnN0OwogICAgIHZvaWQgZ3JhbnRBY2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzdGVi
b2FyZEFjY2Vzc1R5cGUpOworCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RGF0YU93bmVyVHlwZT4g
ZGF0YU93bmVyKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiwgUGFzdGVib2FyZEFjY2Vzc0ludGVu
dCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIFdlYlByb2Nlc3NQcm94eUxpc3QgbV93ZWJQcm9jZXNz
UHJveHlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVi
b2FyZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVi
b2FyZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGYyM2Y4NWNkNTU4MDI2ZDA5OTg0ZjY4NzE4ODAy
MWZjOGU3OGE3MjMuLjQ3YjM3YzBlZWUxMDk0NWY2MzVjM2IyNWVjNTFkMzNiMzViMTRmMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
bWVzc2FnZXMuaW4KQEAgLTQ3LDcgKzQ3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFzdGVib2FyZFBy
b3h5IE5vdFJlZkNvdW50ZWQgewogICAgIEdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKFN0cmlu
ZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoU3RyaW5nIHN0cmluZykgU3luY2hyb25vdXMg
V2FudHNDb25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKFN0cmluZyBw
YXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoVmVjdG9yPFN0cmluZz4gc3RyaW5ncykgU3luY2hy
b25vdXMgV2FudHNDb25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoU3Ry
aW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCi0gICAgR2V0UGFzdGVi
b2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6
UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKGludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNocm9u
b3VzCisgICAgR2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwg
T3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKGludDY0X3QgY2hh
bmdlQ291bnQpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgogICAgIEdldFBhc3RlYm9hcmRD
b2xvcihTdHJpbmcgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQpIC0+IChXZWJDb3JlOjpDb2xvciBjb2xvcikgU3luY2hyb25vdXMgV2FudHND
b25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZFVSTChTdHJpbmcgcGFzdGVib2FyZE5hbWUsIE9w
dGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+IChTdHJpbmcgdXJsU3Ry
aW5nKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAgICBBZGRQYXN0ZWJvYXJkVHlwZXMo
U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXMsIE9w
dGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+IChpbnQ2NF90IGNoYW5n
ZUNvdW50KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5kZXggNmRhMGJmYjhhYWI3OTAwZDE3
MDVhNDc1YTc2YTc3YTIxZDg5ODVjOS4uMTRmYmU5NWEzMzVlNjY2MGRkOGYwOGIwNDE1ZTE2ZTQ5
ZjYwY2MxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLmgKQEAgLTEyNiw2ICsxMjYsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViRGF0
YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duPiBjcmVhdGVEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRv
d24oV2ViUGFnZVByb3h5JikgZmluYWw7CiAjZW5kaWYKIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9E
QVRBX09XTkVSKQorICAgIFdlYkNvcmU6OkRhdGFPd25lclR5cGUgZGF0YU93bmVyRm9yUGFzdGVi
b2FyZChQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAgICAgUmVmUHRyPFdlYkRhdGVUaW1l
UGlja2VyPiBjcmVhdGVEYXRlVGltZVBpY2tlcihXZWJQYWdlUHJveHkmKSBmaW5hbDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
CmluZGV4IDAwY2RmMTNiYTkyYmQwNmMwYzI5MTc1ZjQxYzJjZDYxYzk1NWUxMzEuLmI5ZDg4MzVj
ZGVmNmFkODc3ODc0NGM2NjRiMDJkNjgzYTI3YmMxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ1OSw2ICs0NTksMTUgQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZURlZmVycmluZ1RvdWNoRW5kKGJvb2wgcHJldmVudE5h
dGl2ZUdlc3R1cmVzKQogCiAjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAKKyNp
ZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKworV2ViQ29yZTo6RGF0YU93bmVyVHlwZSBQ
YWdlQ2xpZW50SW1wbDo6ZGF0YU93bmVyRm9yUGFzdGVib2FyZChQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50IGludGVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fY29udGVudFZpZXcgX2RhdGFPd25l
ckZvclBhc3RlYm9hcmQ6aW50ZW50XTsKK30KKworI2VuZGlmCisKIFJlZlB0cjxXZWJQb3B1cE1l
bnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94
eSYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggMDBiNzg3ZTNlODA0
MWJjNTFmMjRlNTk1Y2EwNjc0YjVmOWFhMDMyNS4uYTVhMjlmMWMyOTZiZjRhZTU4Mzk3ZTI2OGI4
NzFjZmQxM2RiNzNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAi
RnJhbWVJbmZvRGF0YS5oIgogI2ltcG9ydCAiR2VzdHVyZVR5cGVzLmgiCiAjaW1wb3J0ICJJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorI2ltcG9ydCAiUGFzdGVib2FyZEFjY2Vz
c0ludGVudC5oIgogI2ltcG9ydCAiU3ludGhldGljRWRpdGluZ0NvbW1hbmRUeXBlLmgiCiAjaW1w
b3J0ICJUZXh0Q2hlY2tpbmdDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJUcmFuc2FjdGlvbklELmgi
CkBAIC01Nyw2ICs1OCw3IEBACiAjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9EYXRhT3duZXJUeXBlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9NZWRpYUNvbnRyb2xzQ29udGV4dE1lbnVJdGVtLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BvaW50ZXJJRC5oPgpAQCAtNzAwLDYgKzcwMiwxMCBAQCBGT1JfRUFDSF9Q
UklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0tDT05URU5UVklFV19BQ1RJT05f
Rk9SX1dFQl9WSUVXKQogLSAoQk9PTClfZm9ybUNvbnRyb2xSZWZyZXNoRW5hYmxlZDsKICNlbmRp
ZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCistIChXZWJDb3JlOjpEYXRhT3du
ZXJUeXBlKV9kYXRhT3duZXJGb3JQYXN0ZWJvYXJkOihXZWJLaXQ6OlBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQpaW50ZW50OworI2VuZGlmCisKIEBlbmQKIAogQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3
IChXS1Rlc3RpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA1YjRiNjVjYjQwYTRkMmFlYjI1Yjk2ZDZh
NzlhOWY3NWYxYjA3NTA1Li5mMzVkNTlkOTA2YTY5Y2ZmYWE2MTc2ZGFlYTY3YjUxMTIyNjE5ZGIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KQEAgLTc0NjgsNiArNzQ2OCwzNyBAQCAtIChCT09MKV9zaG91bGRV
c2VMZWdhY3lTZWxlY3RQb3BvdmVyRGlzbWlzc2FsQmVoYXZpb3IKICAgICByZXR1cm4gV2ViQ29y
ZTo6SU9TQXBwbGljYXRpb246OmlzRGF0YUFjdGl2YXRpb24oKTsKIH0KIAorI2lmIEhBVkUoUEFT
VEVCT0FSRF9EQVRBX09XTkVSKQorCistIChXZWJDb3JlOjpEYXRhT3duZXJUeXBlKV9kYXRhT3du
ZXJGb3JQYXN0ZWJvYXJkOihXZWJLaXQ6OlBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQpaW50ZW50Cit7
CisgICAgYXV0byBjb3JlVHlwZSA9IFtdIChfVUlEYXRhT3duZXIgcGxhdGZvcm1UeXBlKSB7Cisg
ICAgICAgIHN3aXRjaCAocGxhdGZvcm1UeXBlKSB7CisgICAgICAgIGNhc2UgX1VJRGF0YU93bmVy
VXNlcjoKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVc2VyOwor
ICAgICAgICBjYXNlIF9VSURhdGFPd25lckVudGVycHJpc2U6CisgICAgICAgICAgICByZXR1cm4g
V2ViQ29yZTo6RGF0YU93bmVyVHlwZTo6RW50ZXJwcmlzZTsKKyAgICAgICAgY2FzZSBfVUlEYXRh
T3duZXJTaGFyZWQ6CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGF0YU93bmVyVHlwZTo6
U2hhcmVkOworICAgICAgICBjYXNlIF9VSURhdGFPd25lclVuZGVmaW5lZDoKKyAgICAgICAgICAg
IHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVbmRlZmluZWQ7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRh
T3duZXJUeXBlOjpVbmRlZmluZWQ7CisgICAgfTsKKworICAgIGlmIChpbnRlbnQgPT0gV2ViS2l0
OjpQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKQorICAgICAgICByZXR1cm4gY29yZVR5cGUo
c2VsZi5fZGF0YU93bmVyRm9yUGFzdGUpOworCisgICAgaWYgKGludGVudCA9PSBXZWJLaXQ6OlBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRlKQorICAgICAgICByZXR1cm4gY29yZVR5cGUoc2Vs
Zi5fZGF0YU93bmVyRm9yQ29weSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6RGF0YU93bmVyVHlwZTo6VW5kZWZpbmVkOworfQorCisjZW5kaWYgLy8g
SEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKIC0gKFJldGFpblB0cjxVSVZpZXc+KV9jcmVh
dGVQcmV2aWV3Q29udGFpbmVyV2l0aExheWVyTmFtZTooTlNTdHJpbmcgKilsYXllck5hbWUKIHsK
ICAgICBhdXRvIGNvbnRhaW5lciA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZk
ODMyY2RhODhiMWI3ZTM4YjVhZTkzZjRlNDgxM2I0MTljZWU2NDcuLjgxNDdkMmZhZDljNzVjNjQ4
NDQ2MmE4YTQ0N2U4ZTY5MzU1MzNiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDI2LDEyICs0MjYsNiBAQAogCQkxQ0E4Qjk0NjEy
N0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBOEI5NDQxMjdDODgyQTAwNTc2
QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUNCQkU0QTAxOUI2
NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQkJFNDlFMTlCNjZDNTMw
MDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTFD
QkJFNEExMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0JCRTQ5RjE5QjY2QzUz
MDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oICovOyB9OwotCQkxRDQ3NjU4NjI1
Q0NBNDE2MDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTg0MjVDQ0E0MTYwMDdB
RjMxMiAvKiBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eS5oICovOyB9OwotCQkxRDQ3NjU5MzI1
Q0NDRTkzMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHlNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUQ0NzY1OTAyNUND
Q0U5MzAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRlByb3h5TWVzc2FnZXMuaCAqLzsg
fTsKLQkJMUQ0NzY1OTQyNUNDQ0U5MzAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRlBy
b3h5TWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRDQ3NjU5MTI1Q0NDRTkzMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGUHJveHlNZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsKLQkJMUQ0NzY1OUMyNUNFNzRBRDAwN0FG
MzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUQ0NzY1OTkyNUNFNzRBQzAwN0FG
MzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwotCQkx
RDQ3NjU5RDI1Q0U3NEFEMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGTWFuYWdlck1l
c3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUQ0NzY1OUEyNUNFNzRBQzAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1h
bmFnZXJNZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsKLQkJMUQ0NzY1QTEyNUNGNTc0MDAwN0FGMzEy
IC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTlGMjVDRjU3NDAwMDdBRjMxMiAvKiBSZW1v
dGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyLmggKi87IH07CiAJCTFENEQ3MzcwMjNBOUU1NDcwMDcx
N0EyNSAvKiBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRDRENzM2QjIzQTlE
RjU1MDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwogCQkxRDRENzM3MTIzQTlFNTYyMDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUQ0RDczNkMyM0E5REY2MDAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMUQ0RDczNzYyM0E5RUQxODAwNzE3QTI1IC8q
IFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRDRENzM3NTIzQTlFQjY4MDA3MTdB
MjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsK
QEAgLTE5OTUsNiArMTk4OSw3IEBACiAJCUY0NDI5MTk2MUZBNTk0MkEwMDJDQzkzRSAvKiBfV0tB
dHRhY2htZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0NDI5MTk1MUZBNTk0MkEwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50SW50ZXJu
YWwuaCAqLzsgfTsKIAkJRjQ0ODE1NjQyMzg3ODIwMDAwOTgyNjU3IC8qIFdLRGVmZXJyaW5nR2Vz
dHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0NDgxNTYyMjM4NzgyMDAwMDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVSZWNv
Z25pemVyLmggKi87IH07CiAJCUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OworCQlG
NDY2MEJDMjI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NjBCQzEyNURFRjA4
MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLzsgfTsKIAkJRjQ4RDJBODUy
MTU4M0E3RTAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQ
SS5oICovOyB9OwogCQlGNDk2QTQzMTFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmgg
Ki87IH07CiAJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRB
NkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi87IH07
CkBAIC01ODU3LDYgKzU4NTIsNyBAQAogCQlGNDQ4MTU2MzIzODc4MjAwMDA5ODI2NTcgLyogV0tE
ZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRGVm
ZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tEZWZlcnJpbmdHZXN0dXJl
UmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjAxRTlF
NzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjExRTlFNzUyRjAwMzhE
MTk2IC8qIFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRp
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NjYwQkMxMjVERUYwODEwMEU4
NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ4RDJBODQy
MTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBLaXRTUEku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3
IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8q
IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzUwLDYgKzk3NDYsNyBAQAog
CQkJCUJDNkVEQUE1MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50LmggKi8sCiAJCQkJMUFD
NzUzNzkxODNBOUZEQTAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwICovLAogCQkJCTFBQzc1
MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi8sCisJCQkJRjQ2NjBCQzEy
NURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLywKIAkJCQk4MzJF
RDE4OTFFMkZFMTNCMDA2QkE2NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5j
cHAgKi8sCiAJCQkJODMyRUQxOEExRTJGRTEzQjAwNkJBNjRBIC8qIFBlckFjdGl2aXR5U3RhdGVD
UFVVc2FnZVNhbXBsZXIuaCAqLywKIAkJCQkzNzcxNkE1OTE5NUI5MTA1MDBFRThCMUIgLyogUHJv
Y2Vzc0Fzc2VydGlvbi5jcHAgKi8sCkBAIC0xMTg4OSw2ICsxMTg4Niw3IEBACiAJCQkJMEZDQjRF
NjIxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUM3NTM3QzE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4QjY2QjAxQkM0M0M4NjAwODJERjc3IC8qIFBhZ2VMb2FkU3RhdGVPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ2NjBCQzIyNURFRjA4MTAwRTg2NTk4IC8qIFBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzk4
QjUxMjIzMEExMEUwMDA3NjRCRCAvKiBQYXltZW50QXV0aG9yaXphdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUExNzk4QjNFMjIyRDk3QTIwMDA3NjRCRCAvKiBQYXltZW50QXV0
aG9yaXphdGlvblByZXNlbnRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTRhYmZhYzk4OTcyMzc5NWM0MzU1NTIw
NmI4MWZlOTQ0NWI1YjJkMi4uZjMyMGZhNmU2YWQ1MTFkNDIzYTBkYWQzMzEwYzI1NGQxNTAwMTY3
NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDIxLTAyLTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiByZWFk
aW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgY291cGxlIG9mIG5ldyBBUEkgdGVzdHMgdG8gdmVyaWZ5IHRoYXQg
YCtbVUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XWAgaXMgaW52b2tlZCB3
aXRoIHRoZQorICAgICAgICBleHBlY3RlZCBkYXRhIG93bmVyIHR5cGUgd2hlbiBjb3B5aW5nIGFu
ZCBwYXN0aW5nLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJv
YXJkVGVzdHMubW06CisgICAgICAgICgrW1Rlc3RVSVBhc3RlYm9hcmQgX3BlcmZvcm1Bc0RhdGFP
d25lcjpibG9jazpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNvbnRl
bnRzQXNTdHJpbmddKToKKworICAgICAgICBBZGRpdGlvbmFsbHkgYWRkIGEgaGVscGVyIG1ldGhv
ZCB0byBncmFiIGEgYFdLV2ViVmlld2AncyBjb250ZW50cyBhcyBhbiBgTlNTdHJpbmdgLCBqdXN0
IGZvciBjb252ZW5pZW5jZS4KKwogMjAyMS0wMi0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBudWxsIGRlcmVmZXJlbmNpbmcgaW4g
UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJh
bmdlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJv
YXJkVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRU
ZXN0cy5tbQppbmRleCBmNTIwOTQxZmU4OWU1Nzk3MWZiYzk5YTRiOTVjMjU1MTcxMWViMmIxLi5k
MTVhMjY0ODZmYzExYTJjMmRhODY3N2FiYWMzYTk1YjI3ZDk5MGE4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAorI2ltcG9ydCAiQ2xhc3NNZXRo
b2RTd2l6emxlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBAIC00OCw2ICs0OSwyNiBAQCBz
dGF0aWMgdm9pZCBjaGVja0pTT05XaXRoTG9nZ2luZyhOU1N0cmluZyAqanNvblN0cmluZywgTlNE
aWN0aW9uYXJ5ICpleHBlY3RlZCkKICAgICAgICAgTlNMb2coQCJFeHBlY3RlZCBKU09OOiAlQCB0
byBtYXRjaCB2YWx1ZXM6ICVAIiwganNvblN0cmluZywgZXhwZWN0ZWQpOwogfQogCisjaWYgSEFW
RShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKK3N0YXRpYyBfVUlEYXRhT3duZXIgZ0xhc3RLbm93
bkRhdGFPd25lciA9IF9VSURhdGFPd25lclVuZGVmaW5lZDsKKworQGludGVyZmFjZSBUZXN0VUlQ
YXN0ZWJvYXJkIDogTlNPYmplY3QKKysgKHZvaWQpX3BlcmZvcm1Bc0RhdGFPd25lcjooX1VJRGF0
YU93bmVyKW93bmVyIGJsb2NrOihkaXNwYXRjaF9ibG9ja190KWJsb2NrOworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gVGVzdFVJUGFzdGVib2FyZAorCisrICh2b2lkKV9wZXJmb3JtQXNEYXRhT3du
ZXI6KF9VSURhdGFPd25lcilvd25lciBibG9jazooZGlzcGF0Y2hfYmxvY2tfdClibG9jaworewor
ICAgIGJsb2NrKCk7CisgICAgZ0xhc3RLbm93bkRhdGFPd25lciA9IG93bmVyOworfQorCitAZW5k
CisKKyNlbmRpZiAvLyBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKwogI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtMzQ4LDYgKzM2OSw1
MCBAQCBURVNUKFVJUGFzdGVib2FyZFRlc3RzLCBNaXNzaW5nUHJlZmVycmVkUHJlc2VudGF0aW9u
U2l6ZUZvckltYWdlKQogICAgIEVYUEVDVF9XS19TVFJFUSgiMCIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS53aWR0
aCJdKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoIjE3NCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS5oZWlnaHQiXSk7
CiB9CisKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKworVEVTVChVSVBhc3RlYm9h
cmRUZXN0cywgUGVyZm9ybVdpdGhEYXRhT3duZXJXaGVuQ29weWluZykKK3sKKyAgICBhdXRvIHN3
aXp6bGVyID0gQ2xhc3NNZXRob2RTd2l6emxlciB7CisgICAgICAgIFVJUGFzdGVib2FyZC5jbGFz
cywKKyAgICAgICAgQHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KSwKKyAgICAg
ICAgW1Rlc3RVSVBhc3RlYm9hcmQgbWV0aG9kRm9yU2VsZWN0b3I6QHNlbGVjdG9yKF9wZXJmb3Jt
QXNEYXRhT3duZXI6YmxvY2s6KV0KKyAgICB9OworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBX
ZWJWaWV3Rm9yUGFzdGVib2FyZFRlc3RzKEAic2ltcGxlIik7CisgICAgW3dlYlZpZXcgX3NldERh
dGFPd25lckZvckNvcHk6X1VJRGF0YU93bmVyU2hhcmVkXTsKKyAgICBbd2ViVmlldyBfc2V0RGF0
YU93bmVyRm9yUGFzdGU6X1VJRGF0YU93bmVyRW50ZXJwcmlzZV07CisgICAgW3dlYlZpZXcgc2Vs
ZWN0QWxsOm5pbF07CisgICAgW3dlYlZpZXcgY29weTpuaWxdOworICAgIFt3ZWJWaWV3IHdhaXRG
b3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIEVYUEVDVF9FUShnTGFzdEtub3duRGF0
YU93bmVyLCBfVUlEYXRhT3duZXJTaGFyZWQpOworICAgIEVYUEVDVF9XS19TVFJFUShVSVBhc3Rl
Ym9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQuc3RyaW5nLCAiU2ltcGxlIEhUTUwgZmlsZS4iKTsKK30K
KworVEVTVChVSVBhc3RlYm9hcmRUZXN0cywgUGVyZm9ybVdpdGhEYXRhT3duZXJXaGVuUGFzdGlu
ZykKK3sKKyAgICBhdXRvIHN3aXp6bGVyID0gQ2xhc3NNZXRob2RTd2l6emxlciB7CisgICAgICAg
IFVJUGFzdGVib2FyZC5jbGFzcywKKyAgICAgICAgQHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3du
ZXI6YmxvY2s6KSwKKyAgICAgICAgW1Rlc3RVSVBhc3RlYm9hcmQgbWV0aG9kRm9yU2VsZWN0b3I6
QHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KV0KKyAgICB9OworCisgICAgYXV0
byB3ZWJWaWV3ID0gc2V0VXBXZWJWaWV3Rm9yUGFzdGVib2FyZFRlc3RzKEAiYXV0b2ZvY3VzLWNv
bnRlbnRlZGl0YWJsZSIpOworICAgIFt3ZWJWaWV3IF9zZXREYXRhT3duZXJGb3JDb3B5Ol9VSURh
dGFPd25lclNoYXJlZF07CisgICAgW3dlYlZpZXcgX3NldERhdGFPd25lckZvclBhc3RlOl9VSURh
dGFPd25lckVudGVycHJpc2VdOworCisgICAgVUlQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJk
LnN0cmluZyA9IEAiRm9vIGJhciI7CisgICAgW3dlYlZpZXcgcGFzdGU6bmlsXTsKKyAgICBbd2Vi
VmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBFWFBFQ1RfRVEoZ0xh
c3RLbm93bkRhdGFPd25lciwgX1VJRGF0YU93bmVyRW50ZXJwcmlzZSk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKFt3ZWJWaWV3IGNvbnRlbnRzQXNTdHJpbmddLCAiRm9vIGJhclxuIik7Cit9CisKKyNl
bmRpZiAvLyBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKwogI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RXS1dlYlZpZXcuaAppbmRleCBjMWRjMDhjZmE0Y2YwNjEzMzUyNDU3YmYxMWE4
ZWUzMDYxMDdhZThhLi41ZWYzZjhlNGZhNmIwYzcxZmJkMWI1NDExOTZmNjkwMDJhZmRkZDA5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaApAQCAtNDgsNiArNDgs
NyBAQAogQGVuZAogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoVGVzdFdlYktpdEFQSSkKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmNvbnRlbnRzQXNTdHJpbmc7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnRhZ3NJ
bkJvZHk7CiAtICh2b2lkKWxvYWRUZXN0UGFnZU5hbWVkOihOU1N0cmluZyAqKXBhZ2VOYW1lOwog
LSAodm9pZClzeW5jaHJvbm91c2x5R29CYWNrOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0V0tXZWJWaWV3Lm1tCmluZGV4IDhkOTY3MTYzYjQ2ZGE3OTE5OTM0ZTY0OTA2NDAzY2QyMzFi
MmU2MGMuLmU1NzI5ODIyNGExYjZiNWQ3ZDNjMjhjNTQ5ZmY4Y2U4YjY1MjIzOGMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KQEAgLTEzMCw2ICsxMzAsMTgg
QEAgLSAoQk9PTClfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKilj
b21tYW5kIGFyZ3VtZW50OihOU1N0cmluZwogICAgIHJldHVybiBzdWNjZXNzOwogfQogCistIChO
U1N0cmluZyAqKWNvbnRlbnRzQXNTdHJpbmcKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZh
bHNlOworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQ7CisgICAgW3NlbGYg
X2dldENvbnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqY29u
dGVudHMsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGNvbnRlbnRzOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKK30KKwogLSAoTlNBcnJh
eTxOU1N0cmluZyAqPiAqKXRhZ3NJbkJvZHkKIHsKICAgICByZXR1cm4gW3NlbGYgb2JqZWN0QnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnKicpKS5tYXAoZSA9PiBlLnRhZ05hbWUpIl07Cg==
</data>
<flag name="commit-queue"
          id="439715"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420989</attachid>
            <date>2021-02-19 10:52:53 -0800</date>
            <delta_ts>2021-02-19 13:45:12 -0800</delta_ts>
            <desc>Non-internal SDK build fix</desc>
            <filename>bug-222072-20210219105252.patch</filename>
            <type>text/plain</type>
            <size>85458</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxZjI2OWZkYWFlOWIzYTczMTM1Y2U4
MTlhYWFmYjRhMWUxMDcwMzguLmUxNjFiNjNjODBmNmRhMDMwMGEyMmFjNjA3YjIzN2I3NzFmNWZh
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25l
ciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUhhdmUuaDoKKworICAgICAgICBU
dXJuIHNldmVyYWwgY29tcGlsZS10aW1lIGd1YXJkcyBwcmV2aW91c2x5IGluIGBQbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW1gIGludG8gYEhBVkUoKWAtcy4KKwogMjAyMS0wMi0xOCAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0IEVOQUJMRV9WUDkgdG8gMSBv
biBJT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA5NTU1OTBkYTA1Y2Y2MWY5NmEyOGUwYWUwYzRkYmEzNmE5YjA5
MTE5Li5lN2ZhN2Q2MGJiNDI4NTY5MWQyYjk1OTcxNjgxZTE4YTI3MDQxZTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVu
IHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBzdGF0aWMgaGVscGVyIG1ldGhvZCB0byBgUGxhdGZvcm1Q
YXN0ZWJvYXJkYCwgc28gdGhhdCBpdCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgcGFzdGVib2FyZCBv
cGVyYXRpb25zCisgICAgICAgIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIGdpdmVuIGBEYXRhT3du
ZXJUeXBlYC4gV2UgdGhlbiB1c2UgdGhpcyBzdGF0aWMgaGVscGVyIHRvIHdyYXAgYWxsIHBhc3Rl
Ym9hcmQgYWNjZXNzCisgICAgICAgIChyZWFkaW5nLCB3cml0aW5nLCBldGMuKSBpbnNpZGUgY2Fs
bHMgdG8gYCtbVUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XWAgLS0gc2Vl
IFdlYktpdCBDaGFuZ2VMb2cKKyAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICBU
ZXN0czogIFVJUGFzdGVib2FyZFRlc3RzLlBlcmZvcm1XaXRoRGF0YU93bmVyV2hlbkNvcHlpbmcK
KyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5QZXJmb3JtV2l0aERhdGFPd25lcldo
ZW5QYXN0aW5nCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9EYXRhT3duZXJU
eXBlLmg6IEFkZGVkLgorCisgICAgICAgIEFkZCBhIG5ldyBlbnVtIHRvIHJlcHJlc2VudCBhIGRh
dGEgb3duZXIgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1XaXRoRGF0YU93bmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9saWJ3cGUvUGxhdGZvcm1QYXN0ZWJvYXJkTGliV1BFLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybVdpdGhEYXRhT3du
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1XaXRoRGF0YU93bmVy
KToKKwogMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBQbHVtYiBhbiBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gdGhyb3VnaCBXZWJQ
YXN0ZWJvYXJkUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDgwODQ3OTQyZmI2M2QyZDUxYjdj
OThlNGRiYmQ3OWY0MWMxYzc1ZTUuLmYxYWEwNjc4Y2RmYWMwMjBhMjc0OGUyYWUyM2NiYTY2ODkx
ZDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTAyLTE4ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNw
ZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lz
dGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wb3J0IGBVSVBhc3Rl
Ym9hcmRfUHJpdmF0ZS5oYCBzbyB0aGF0IGBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW1gIGNhbiB1
c2UgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgorCiAy
MDIxLTAyLTE4ICBQZXIgQXJuZSAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNP
U10gT2JzZXJ2ZSBzeXN0ZW0gc2xlZXAgZXZlbnRzIGluIHRoZSBVSSBwcm9jZXNzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGE0NTJhMGFiNTkxYjEyM2ZkYTExMmRlMDUwNWI2ZjhiNzM1MzBhNjEuLjUxYmE1NWY4Mjgy
NThmYzNjZjhiZTk3NmNmY2EwM2JiYTRkYWQzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAK
KzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVuIHJlYWRpbmcgb3Igd3JpdGlu
ZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDIw
ODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRzIFdlYktpdDIgc3VwcG9ydCBmb3IgdGFnZ2luZyBgUGxhdGZvcm1QYXN0ZWJvYXJkYCB3aXRo
IHRoZSBjb250ZW50IHZpZXcncyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZS4gU2VlCisgICAg
ICAgIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmg6CisKKyAgICAgICAgSW1wb3J0IGBVSVBhc3RlYm9hcmRfUHJpdmF0ZS5oYCBz
byB0aGF0IHdlIGtub3cgYWJvdXQgYCtfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOmAgaW4gdGhl
IEFQSSB0ZXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJv
eHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5n
ZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJv
YXJkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3Rl
Ym9hcmRVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmFkZFBhc3Rl
Ym9hcmRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFz
dGVib2FyZFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNl
dFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5Ojpjb250YWluc1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyk6CisKKyAgICAgICAg
TWFrZSBhbGwgb2YgdGhlc2UgbWV0aG9kcyB1c2UgYGRhdGFPd25lcigpYCB3aXRoIGVpdGhlciBh
IGBSZWFkYCBvciBgV3JpdGVgIHBhc3RlYm9hcmQgYWNjZXNzIGludGVudCB0byBncmFiIHRoZQor
ICAgICAgICBkYXRhIG93bmVyIHR5cGUgZnJvbSB0aGUgdmlldyBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBwYWdlIGlkZW50aWZpZXIsIGFuZCB0aGVuIHdyYXAgYWxsIHBhc3RlYm9hcmQgYWNjZXNzIHdp
dGhpbgorICAgICAgICBgUGxhdGZvcm1QYXN0ZWJvYXJkYCdzIG5ldyBgcGVyZm9ybUFzRGF0YU93
bmVyYCBzdGF0aWMgaGVscGVyLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFz
dGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZv
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0
ZW1BdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlw
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29u
dGVudFRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
d3JpdGVJbWFnZVRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkUHJveHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6ZGF0YU93bmVyIGNvbnN0KToKKworICAgICAgICBV
c2UgdGhlIGdpdmVuIHBhZ2UgaWRlbnRpZmllciBpbiB2YXJpb3VzIHBhc3RlYm9hcmQgSVBDIGVu
ZHBvaW50cyBpbiBgV2ViUGFzdGVib2FyZFByb3h5YCB0byBhc2sgYFdlYlBhZ2VQcm94eWAKKyAg
ICAgICAgZm9yIGl0cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZSB3aGVuIHJlYWRpbmcgb3Ig
d3JpdGluZyBwYXN0ZWJvYXJkIGRhdGEuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVu
dC5oOgorCisgICAgICAgIEFkZCBhIGNsaWVudCBob29rIHRvIHJldHVybiBhIGBEYXRhT3duZXJU
eXBlYCBlbnVtLCBnaXZlbiBhIGBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50YCAtLSB0aGF0IGlzLCBj
b3B5ICh3cml0ZSkgb3IKKyAgICAgICAgcGFzdGUgKHJlYWQpLgorCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnQ6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRh
dGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2Rh
dGFPd25lckZvclBhc3RlYm9hcmQ6XSk6CisKKyAgICAgICAgUmV0dXJuIGAtX2RhdGFPd25lckZv
clBhc3RlYCBvciBgLV9kYXRhT3duZXJGb3JDb3B5YCAoZGVwZW5kaW5nIG9uIHRoZSBgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudGApLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMDItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUGx1bWIgYW4gT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHRocm91
Z2ggV2ViUGFzdGVib2FyZFByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDA0ODZmY2UyYzQx
ODZkMmQ4YmYyNTkxMjU1OTZlODYzOWNkMzQ1MTEuLmM3NDdkNGUxMGYzNzM4YjVlYzA3OTJkYjcx
MDQ4MjIwYzcyZWZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCkBAIC04ODgsMyArODg4LDE1IEBA
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEyMDAwMAogI2RlZmluZSBIQVZFX1NUQVRJQ19GT05UX1JFR0lTVFJZIDEKICNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9S
TShBUFBMRVRWKQorI2RlZmluZSBIQVZFX1BBU1RFQk9BUkRfSVRFTV9QUk9WSURFUlMgMQorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oV0FUQ0hPUykgJiYg
IVBMQVRGT1JNKEFQUExFVFYpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKKyNkZWZpbmUgSEFW
RV9QQVNURUJPQVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBIDEKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorI2Rl
ZmluZSBIQVZFX05TVVJMX1RJVExFIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggN2Fk
ODFkOTdhOWRmYWI4ZWRlYTFlZTAyZGM4ZWQyNDM4MjkxZTVkNC4uZTY0NWYxMzVjN2JlZGI4MzVj
NTkzMWEwMjJhNGIzNjEwNzI0MDZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC05OTksNiArOTk5
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L0N1cnNvci5oCiAgICAgcGxhdGZvcm0vRGF0YUxpc3RTdWdnZXN0aW9uUGlja2VyLmgKICAgICBw
bGF0Zm9ybS9EYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmgKKyAgICBwbGF0Zm9ybS9EYXRhT3du
ZXJUeXBlLmgKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oCiAgICAgcGxhdGZvcm0vRGVj
aW1hbC5oCiAgICAgcGxhdGZvcm0vRGVmZXJyYWJsZVRhc2suaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCBhMjA1Mjc5MGU3OTdkNzc0MWVlZmE3NmQyNDUz
YTdiNDQzODYxNTg5Li4zYmUwNzhjNzM2MDZiNWNkNDM2YTkwODYwOTRmOGU2NzY1ZTZkOTA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNDEsNiArNDEs
NyBAQCBXVEZfRVhURVJOX0NfRU5ECiAjaW1wb3J0IDxVSUtpdC9VSUZvY3VzUmluZ1N0eWxlLmg+
CiAjaW1wb3J0IDxVSUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlJbnRl
cmZhY2VfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQYXN0ZWJvYXJkX1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJVmll
d0NvbnRyb2xsZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvTlNJdGVtUHJvdmlkZXIrVUlL
aXRBZGRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4MjgyMGQ1ZjgyNmY0YTZmZDdlNmJlMDgwMTlkZTU3ZTRmN2Zh
Y2VlLi42OGJmMjMwOWJlYzJmNjlhMjcxNGY1ZDI1OWQ2NzM4ODAxYzExZGU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Mjgx
LDYgKzUyODEsNyBAQAogCQlGNDU3NzVDRTI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3
NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NjcyOTI4MUUwREU2ODUwMEFDQzNE
OCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjcyOTI1MUUwREU1QUIwMEFDQzNEOCAvKiBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGNDZDNDQ3RTIzNDY1NDU0MDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdz
RGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ2QzQ0N0MyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuaCAqLzsgfTsKKwkJRjQ3Mzg0NTgyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NzM4
NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTA5RDEyMEE5M0E5NzAwMjQwRkFF
IC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0
YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0IxOTVC
OEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E2MzNEMUZGNkZENTAwMDgxQjND
QyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNjMzQzFGRjZGRDUwMDA4MUIzQ0MgLyogUHJvbWlzZWRB
dHRhY2htZW50SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNjYyOCw2ICsxNjYyOSw3IEBACiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5
RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBh
c3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJv
YXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIz
NDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NzM4NDU3MjVEREU5RkIwMDZERThERCAv
KiBEYXRhT3duZXJUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFPd25lclR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5Q0YyMEE5MzlGNjAwMjQwRkFFIC8qIERpc2Fi
bGVkQWRhcHRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzYWJsZWRBZGFwdGF0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlENDIwQTlERDA0MDAyNDBGQUUgLyog
RGlzYWJsZWRBZGFwdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNhYmxlZEFkYXB0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTVFM0IxOTVCOEM4
QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI3NTg0LDYgKzI3NTg2LDcgQEAKIAkJCQlGNTg3ODY4NDAyREUzQjg2MDFF
QTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJRTUyQ0Y1NEUyMEEzNUEyODAwREFEQTI3IC8qIERh
dGFMaXN0U3VnZ2VzdGlvblBpY2tlci5oICovLAogCQkJCUU1MkNGNTRDMjBBMjY4QUMwMERBREEy
NyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggKi8sCisJCQkJRjQ3Mzg0NTcyNURERTlG
QjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLywKIAkJCQlBNTczMkIwODEzNkExNjFEMDA1
QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovLAogCQkJCUE1NzMyQjA5MTM2QTE2MUQwMDVD
OEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICovLAogCQkJCTM3QzczOEYxMUVEQkRFODcwMDNGMkIw
QiAvKiBEYXRlVGltZUNob29zZXIuaCAqLywKQEAgLTMxODM4LDYgKzMxODQxLDcgQEAKIAkJCQlF
NTE3NjcwMzIwQjg4QzE0MDBENDExNjcgLyogRGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTRGMjBBMzVBMjgwMERBREEyNyAvKiBEYXRhTGlz
dFN1Z2dlc3Rpb25QaWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTREMjBBMjY4QUMw
MERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogRGF0YU93bmVyVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNFMEE0NEVGQzcwMEY5OTJFMCAvKiBEYXRhVHJh
bnNmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBE
YXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Rh
dGFPd25lclR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDQxM2M1YjNiY2RjZWE4OWFmOGE3NTBlYTc1ZTYz
M2FlNzc2MTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0
YU93bmVyVHlwZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIERhdGFPd25lclR5cGUgOiB1aW50
OF90IHsKKyAgICBVbmRlZmluZWQsCisgICAgVXNlciwKKyAgICBFbnRlcnByaXNlLAorICAgIFNo
YXJlZAorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAppbmRleCA2NGI4ODUyMDAwZTU1YjA0ODhjYWIyZGY1
MzA5YzAzMDg4OWZlMmExLi42YWI0MWZiN2UxMjlmMGJlOTVjYmRjYThmZTgxY2ZhY2NjYzNjNGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
LDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybVBhc3Rl
Ym9hcmRfaAotI2RlZmluZSBQbGF0Zm9ybVBhc3RlYm9hcmRfaAorI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJEYXRhT3duZXJUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC02NSw2
ICs2NSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQYXN0ZWJvYXJk
SXRlbUluZm8+IGluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoc2l6ZV90IGluZGV4LCBpbnQ2NF90
IGNoYW5nZUNvdW50KTsKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxWZWN0b3I8UGFzdGVi
b2FyZEl0ZW1JbmZvPj4gYWxsUGFzdGVib2FyZEl0ZW1JbmZvKGludDY0X3QgY2hhbmdlQ291bnQp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcGVyZm9ybUFzRGF0YU93bmVyKERh
dGFPd25lclR5cGUsIEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKICAgICBlbnVtIGNsYXNzIEluY2x1
ZGVJbWFnZVR5cGVzIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBzdGF0aWMgU3RyaW5nIHBsYXRm
b3JtUGFzdGVib2FyZFR5cGVGb3JTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0
cmluZyYgZG9tVHlwZSwgSW5jbHVkZUltYWdlVHlwZXMgPSBJbmNsdWRlSW1hZ2VUeXBlczo6Tm8p
OwogCkBAIC0xMjYsNiArMTI4LDQgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotfQotCi0jZW5k
aWYgLy8gIVBsYXRmb3JtUGFzdGVib2FyZF9oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQppbmRleCBmOWQ4ZDkyYzE2YzdlNjdjOTA3NjQxYTEzOGJlMGY1ZWY3ZmU4Yjk5Li4xZGExNWVm
NGI0NGNlNWZmYTI5MmMzMjM1ZTA5OThiZTQ5OTgwNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTg2LDYgKzg2
LDM3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBsYXRmb3JtUGFzdGVib2FyZDo6YnVmZmVyRm9y
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSB0eXBl
LCBGdW5jdGlvbjx2b2lkKCk+JiYgYWN0aW9ucykKK3sKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFU
QV9PV05FUikKKyAgICBhdXRvIGRhdGFPd25lciA9IF9VSURhdGFPd25lclVuZGVmaW5lZDsKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIERhdGFPd25lclR5cGU6OlVuZGVmaW5lZDoKKyAg
ICAgICAgZGF0YU93bmVyID0gX1VJRGF0YU93bmVyVW5kZWZpbmVkOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIERhdGFPd25lclR5cGU6OlVzZXI6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURh
dGFPd25lclVzZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YU93bmVyVHlwZTo6RW50
ZXJwcmlzZToKKyAgICAgICAgZGF0YU93bmVyID0gX1VJRGF0YU93bmVyRW50ZXJwcmlzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhT3duZXJUeXBlOjpTaGFyZWQ6CisgICAgICAgIGRh
dGFPd25lciA9IF9VSURhdGFPd25lclNoYXJlZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIFtQQUw6OmdldFVJUGFzdGVib2FyZENsYXNzKCkgX3BlcmZvcm1Bc0RhdGFPd25lcjpk
YXRhT3duZXIgYmxvY2s6XnsKKyAgICAgICAgYWN0aW9ucygpOworICAgIH1dOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgYWN0aW9ucygpOworI2VuZGlmCit9CisKIHZvaWQg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgU3RyaW5nJikgY29uc3QKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExpYldQRS5jcHAKaW5kZXggM2Rk
NDhlOWYxOGYyNzExMGU4MTZlMjYyMDEwNWFmYjhmZWQ4ZDA4Mi4uMzQxMTA4YzFmODA0NjJkMzM2
ODU3OTI4ZmRhY2NjZGQxNjNmZjM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExpYldQRS5jcHAKQEAgLTQ3LDYg
KzQ3LDExIEBAIFBsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKCkKICAgICBB
U1NFUlQobV9wYXN0ZWJvYXJkKTsKIH0KIAordm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZv
cm1Bc0RhdGFPd25lcihEYXRhT3duZXJUeXBlLCBGdW5jdGlvbjx2b2lkKCk+JiYgYWN0aW9ucykK
K3sKKyAgICBhY3Rpb25zKCk7Cit9CisKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRUeXBl
cyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMpCiB7CiAgICAgc3RydWN0IHdwZV9wYXN0ZWJvYXJkX3N0
cmluZ192ZWN0b3IgcGFzdGVib2FyZFR5cGVzID0geyBudWxscHRyLCAwIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQppbmRl
eCA5ZTU5YzdhZTEzNzVmOWNlMzkyMTIyMzc5OTcwYjc4ZDM1ZjBmYTY2Li42OWE4MzM2NzI0Yjcz
MDQzZmJkMzVmNjYzZjg5MmQ2YjkwNDVhYzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KQEAgLTUyLDYgKzUyLDExIEBA
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgIHJldHVybiBbKF9fYnJpZGdl
IE5TU3RyaW5nICopY2ZTdHJpbmcuZ2V0KCkgbGVuZ3RoT2ZCeXRlc1VzaW5nRW5jb2Rpbmc6TlNT
dHJpbmcuZGVmYXVsdENTdHJpbmdFbmNvZGluZ107CiB9CiAKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJv
YXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSwgRnVuY3Rpb248dm9pZCgpPiYm
IGFjdGlvbnMpCit7CisgICAgYWN0aW9ucygpOworfQorCiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBs
YXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIDogbV9w
YXN0ZWJvYXJkKFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1l
XSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggZjg0
YzUxZmEwNzc2M2IwZDljYjNhZWQ0MWU1NGJlNTRjMTJkZTk4NS4uMWUxN2I4MWRiMjQ0NTdlNTU1
MDgyYmNlNTY0M2Q5YjBkNTZkZjM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9z
L1VJS2l0U1BJLmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRf
UHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl9Q
cml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSU1lbnVDb250cm9sbGVyX1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFVJS2l0L1VJUGFzdGVib2FyZF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBl
cmlwaGVyYWxIb3N0Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxIb3N0X1ByaXZhdGUu
aD4KICNpbXBvcnQgPFVJS2l0L1VJUGlja2VyQ29udGVudFZpZXdfUHJpdmF0ZS5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlD
b2NvYS5tbQppbmRleCBjMDc2ZDk0YjZlMjRiY2QyZDE5ZGI0NzU5Y2QxOWJiYWYzYmFmYTg5Li45
MzM5YWQ4OTgyMTY3OTJlZWZlYjRhOWFlNjE0YTVmMjgyZGFhMWViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5t
bQpAQCAtMjcsMTIgKzI3LDE0IEBACiAjaW1wb3J0ICJXZWJQYXN0ZWJvYXJkUHJveHkuaCIKIAog
I2ltcG9ydCAiQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiUGFzdGVib2FyZEFjY2Vzc0ludGVudC5o
IgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRGF0YU93bmVyVHlwZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
YXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmRJdGVtSW5mby5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KQEAgLTE0Miw5ICsxNDQsMTQgQEAg
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBl
cyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcGFzdGVib2FyZFR5cGVzOwotICAg
IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0VHlwZXMocGFzdGVib2FyZFR5
cGVzKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBhc3RlYm9hcmRUeXBlcykpOwor
ICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NB
R0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRs
ZXIoeyB9KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigq
ZGF0YU93bmVyLCBbJl0geworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXM7
CisgICAgICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0VHlwZXMocGFz
dGVib2FyZFR5cGVzKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShwYXN0ZWJv
YXJkVHlwZXMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
T3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwKQEAgLTE1NiwyMyArMTYzLDI3IEBAIHZv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3RpCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMo
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9LCB7IH0pOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcGF0aG5hbWVzOwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25zOwotICAgIGlmICh3
ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0gICAgICAgIFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFt
ZXMsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25l
cihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1Zh
bHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KSk7CiAKKyAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBwYXRobmFtZXM7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFy
cmF5IHNhbmRib3hFeHRlbnNpb25zOworICAgICAgICBpZiAod2ViUHJvY2Vzc1Byb3h5Rm9yQ29u
bmVjdGlvbihjb25uZWN0aW9uKSkgeworICAgICAgICAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5
cGUpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgLy8gT24gaU9TLCBmaWxlcyBhcmUgY29w
aWVkIGludG8gYXBwJ3MgY29udGFpbmVyIHVwb24gcGFzdGUuCi0gICAgICAgIHNhbmRib3hFeHRl
bnNpb25zLmFsbG9jYXRlKHBhdGhuYW1lcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhdGhuYW1lcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgYXV0byYgZmls
ZW5hbWUgPSBwYXRobmFtZXNbaV07Ci0gICAgICAgICAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpmaWxlbmFtZV0pCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
ZmlsZW5hbWUsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5z
aW9uc1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8vIE9uIGlPUywgZmlsZXMgYXJlIGNv
cGllZCBpbnRvIGFwcCdzIGNvbnRhaW5lciB1cG9uIHBhc3RlLgorICAgICAgICAgICAgc2FuZGJv
eEV4dGVuc2lvbnMuYWxsb2NhdGUocGF0aG5hbWVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhdGhuYW1lcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGZpbGVuYW1lID0gcGF0aG5hbWVzW2ldOworICAgICAgICAgICAgICAgIGlmICgh
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVuYW1l
XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVuYW1lLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbnNbaV0pOworICAgICAgICAgICAgfQogI2VuZGlm
Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocGF0aG5hbWVzKSwgV1RGTW92
ZShzYW5kYm94RXh0ZW5zaW9ucykpOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocGF0aG5hbWVzKSwgV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9ucykpOworICAg
IH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ0Zv
clR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxQYWdlSWRlbnRp
Zmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4Miw3ICsxOTMsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OmdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwK
ICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21w
bGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0Zv
clR5cGUocGFzdGVib2FyZFR5cGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFP
d25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNz
SW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhh
c1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJv
YXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JU
eXBlKHBhc3RlYm9hcmRUeXBlKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyLDcg
KzIwOCwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NG
b3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbgogICAgIGlmICghY2FuQWNjZXNzUGFz
dGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5
cGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRh
T3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hbGxTdHJpbmdzRm9yVHlwZShwYXN0ZWJvYXJk
VHlwZSkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25h
bDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjAyLDI1ICsyMjMs
MzcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9h
cmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmJ1ZmZlckZvclR5cGUocGFzdGVib2Fy
ZFR5cGUpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKLSAgICB1aW50NjRfdCBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKCFz
aXplKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRl
KHNpemUpOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVyKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQotICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICBhdXRvIGRhdGFPd25lciA9
IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0
ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04o
ZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAg
ICAgICAgYXV0byBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmJ1
ZmZlckZvclR5cGUocGFzdGVib2FyZFR5cGUpOworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICB1aW50NjRfdCBz
aXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5
PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKHNpemUpOworICAg
ICAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcih7IH0pOworICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKKyAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUg
aGFuZGxlOworICAgICAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCisgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIHNpemUgfSk7CisgICAg
fSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291
bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBs
ZXRpb25IYW5kbGVyKDApKTsKKworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVy
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFs
dWUoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpw
ZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDb2xv
cihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViQ29yZTo6Q29sb3ImJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMjgsNyArMjYx
LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJv
YXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb2xvcigpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRo
aXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0
YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5j
b2xvcigpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3Rl
Ym9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM2LDcg
KzI3NCwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFVSTChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cgogICAgIGlmICghY2FuQWNjZXNzUGFz
dGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsKCkuc3RyaW5nKCkpOworICAgIGF1dG8gZGF0
YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdl
SUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09N
UExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisK
KyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBb
Jl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLnVybCgpLnN0cmluZygpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0
ZWJvYXJkVHlwZXMsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDYsMTAgKzI4
OSwxNSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6YWRkUGFzdGVib2FyZFR5cGVzKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlwZSA6IHBh
c3RlYm9hcmRUeXBlcykKICAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0eXBlLmlz
RW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5n
ZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgp
OwotICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNP
ZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291
bnQsIHByZXZpb3VzQ2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5n
ZUNvdW50KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7
CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21w
bGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0Rh
dGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Cisg
ICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRl
bnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5n
ZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0No
YW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBh
c3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIE9w
dGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50
NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTksMTAgKzMwNywxNSBAQCB2b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlwZSA6IHBhc3RlYm9hcmRUeXBlcykK
ICAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0eXBlLmlzRW1wdHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8gbmV3
Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFR5cGVz
KHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29u
bmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNv
dW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0byBk
YXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBh
Z2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0tf
Q09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwor
CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwg
WyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICBhdXRvIG5ld0NoYW5n
ZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRUeXBlcyhwYXN0
ZWJvYXJkVHlwZXMpOworICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291
bnQpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUGFzdGVib2FyZFVSTCYgcGFzdGVib2FyZFVSTCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTI3NiwxMCArMzI5LDE1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0
ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUGFzCiAgICAgICAg
IGlmICghd2ViUHJvY2Vzc1Byb3h5LT5jaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MocGFz
dGVib2FyZFVSTC51cmwuc3RyaW5nKCksIENoZWNrQmFja0ZvcndhcmRMaXN0OjpObykpCiAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7CiAKLSAgICAgICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOwotICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5zZXRVUkwocGFzdGVib2FyZFVSTCk7Ci0gICAgICAgIGRpZE1v
ZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2
aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGF1dG8gZGF0YU93bmVyID0gdGhp
cy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9O
KGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICAgICAg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsK
KyAgICAgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Q2hh
bmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFVSTChwYXN0
ZWJvYXJkVVJMKTsKKyAgICAgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VD
b3VudCk7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291
bnQpOworICAgICAgICB9KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoMCk7CiB9CkBA
IC0yODgsMTAgKzM0NiwxNSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2Fy
ZENvbG9yKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwogewogICAgIE1FU1NB
R0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9u
SGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0Q29sb3IoY29s
b3IpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhp
cy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0
YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIFBsYXRmb3Jt
UGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAg
IGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0Q29sb3IoY29sb3IpOworICAgICAgICBk
aWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwg
cHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2Fy
ZFByb3h5OjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4g
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMjk5LDEwICszNjIsMTUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBN
RVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIoMCkpOwogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2Fy
ZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZp
b3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5n
ZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsK
LSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRp
b25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRh
dGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25l
ci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRv
IHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LmNoYW5nZUNvdW50KCk7CisgICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJv
YXJkVHlwZSk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JM
b2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTMxMCw3ICszNzgsMTIgQEAg
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2Fk
aW5nKElQQzo6Q29ubmVjdGlvbiYgY28KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBl
cyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKCkp
OworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1F
U1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29udGFpbnNVUkxTdHJpbmdTdWl0YWJsZUZvckxv
YWRpbmcoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp1cmxTdHJp
bmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMzE4LDkgKzM5MSwxNCBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbgogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwog
Ci0gICAgU3RyaW5nIHRpdGxlOwotICAgIGF1dG8gdXJsU3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS51cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcodGl0bGUpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUodXJsU3RyaW5nKSwgV1RGTW92ZSh0aXRsZSkp
OworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1F
U1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhh
bmRsZXIoeyB9LCB7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0
YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIFN0cmluZyB0aXRsZTsKKyAgICAgICAg
YXV0byB1cmxTdHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybFN0
cmluZ1N1aXRhYmxlRm9yTG9hZGluZyh0aXRsZSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUodXJsU3RyaW5nKSwgV1RGTW92ZSh0aXRsZSkpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaXBj
SGFuZGxlLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzI4LDIwICs0MDYsMjUg
QEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04o
IXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogICAgIE1F
U1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0
aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgaWYgKGlwY0hh
bmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZShudWxscHRy
LCBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJk
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFu
Z2VDb3VudCk7Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3Vu
dCk7Ci0gICAgfQorICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRl
KTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNv
bXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6bWFwKGlwY0hhbmRsZS5oYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVy
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7Ci0gICAgYXV0byBidWZmZXIg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHNoYXJl
ZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpcGNIYW5kbGUuZGF0
YVNpemUpKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlci5wdHIoKSwgcGFzdGVib2FyZFR5
cGUpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6
cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlv
dXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdl
Q291bnQoKTsKKyAgICAgICAgaWYgKGlwY0hhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUobnVsbHB0ciwgcGFzdGVib2FyZFR5cGUpOworICAgICAg
ICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6bWFwKGlwY0hh
bmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgICAg
ICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcigwKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihpcGNIYW5kbGUuZGF0YVNpemUpKTsKKyAgICAgICAgYXV0byBu
ZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVm
ZmVyRm9yVHlwZShidWZmZXIucHRyKCksIHBhc3RlYm9hcmRUeXBlKTsKKyAgICAgICAgZGlkTW9k
aWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZp
b3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobmV3Q2hhbmdlQ291bnQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0TnVtYmVyT2ZGaWxlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MzQ5LDcgKzQzMiwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZGaWxl
cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cgogICAgIGlmICghY2FuQWNj
ZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5udW1iZXJPZkZpbGVzKCkpOworICAgIGF1
dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
LCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hF
Q0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkp
OworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25l
ciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5udW1iZXJPZkZpbGVzKCkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJp
bmcmIG9yaWdpbiwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTM1
OSwxNyArNDQ3LDI3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp0eXBlc1NhZmVGb3JET01U
b1JlYWRBbmRXcml0ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3RpCiAgICAgaWYgKCFjYW5BY2Nl
c3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5k
V3JpdGUob3JpZ2luKSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29u
bmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6
UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgp
LCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVy
Zm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudHlwZXNTYWZlRm9yRE9NVG9S
ZWFkQW5kV3JpdGUob3JpZ2luKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5Ojp3cml0ZUN1c3RvbURhdGEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBW
ZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hF
Q0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxl
cigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUoZGF0YSk7Ci0gICAg
ZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUs
IHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3du
ZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0lu
dGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIuaGFz
VmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJk
OjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2
aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFu
Z2VDb3VudCgpOworICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShkYXRhKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVu
dHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdl
Q291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hh
bmdlQ291bnQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFz
dGVib2FyZEl0ZW1JbmZvKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgaW50NjRfdCBjaGFuZ2VDb3VudCwgT3B0aW9uYWw8UGFnZUlkZW50
aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxWZWN0b3I8UGFz
dGVib2FyZEl0ZW1JbmZvPj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zNzcsNyArNDc1
LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjphbGxQYXN0ZWJvYXJkSXRlbUluZm8oSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJv
YXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsUGFzdGVib2FyZEl0ZW1JbmZvKGNoYW5nZUNvdW50
KSk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9u
SGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsUGFzdGVib2FyZEl0ZW1JbmZvKGNoYW5nZUNv
dW50KSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlv
bkZvckl0ZW1BdEluZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBpbnQ2NF90IGNoYW5nZUNvdW50LCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPFBhc3RlYm9hcmRJdGVtSW5mbz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zODUs
NyArNDg4LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1B
dEluZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBpZiAoIWNhbkFjY2Vzc1Bh
c3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQpOwogCi0gICAgY29tcGxldGlvbkhhbmRs
ZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5pbmZvcm1hdGlvbkZvckl0ZW1B
dEluZGV4KGluZGV4LCBjaGFuZ2VDb3VudCkpOworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+
ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3du
ZXIuaGFzVmFsdWUoKSwgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KSk7CisKKyAgICBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0gewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoaW5kZXgsIGNoYW5nZUNvdW50KSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzkzLDcgKzUwMSwxMiBAQCB2
b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjbwogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVz
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKDApOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5jb3VudCgpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRhdGFP
d25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNz
SW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLmhh
c1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2Fy
ZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY291bnQoKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkU3RyaW5nRnJvbVBhc3Rl
Ym9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNDAzLDcgKzUxNiwxMiBAQCB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgcwogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkucmVhZFN0cmluZyhpbmRleCwgcGFzdGVib2FyZFR5cGUpKTsKKyAgICBhdXRvIGRhdGFP
d25lciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlE
LCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBM
RVRJT04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisg
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZd
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSkpOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtNDExLDkgKzUyOSwxNCBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVSTEZy
b21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZQogICAgIGlmICgh
Y2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwogCi0gICAgU3RyaW5nIHRp
dGxlOwotICAgIFN0cmluZyB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnJlYWRVUkwoaW5kZXgsIHRpdGxlKS5zdHJpbmcoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHVybCksIFdURk1vdmUodGl0bGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMt
PmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJk
QWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93
bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KSk7CisKKyAgICBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAg
ICAgICBTdHJpbmcgdGl0bGU7CisgICAgICAgIFN0cmluZyB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnJlYWRVUkwoaW5kZXgsIHRpdGxlKS5zdHJpbmcoKTsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHRpdGxlKSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9h
cmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFs
PFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC00MjMsMjAgKzU0Niwy
NSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgcwogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2Fy
ZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZEJ1ZmZlcihpbmRleCwgcGFzdGVi
b2FyZFR5cGUpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKLSAgICB1aW50NjRfdCBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgaWYg
KCFzaXplKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmFsbG9j
YXRlKHNpemUpOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVyKQotICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBo
YW5kbGU7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICBhdXRvIGRhdGFPd25l
ciA9IHRoaXMtPmRhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQ
YXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oZGF0YU93bmVyLmhhc1ZhbHVlKCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsK
KyAgICAgICAgYXV0byBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LnJlYWRCdWZmZXIoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICAgICAgaWYgKCFidWZmZXIp
CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgdWlu
dDY0X3Qgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXpl
KTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZl
ci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7CisgICAgICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhh
bmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBzaXplIH0p
OworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdT
YWZlRm9yRE9NVG9SZWFkRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTQ0NCw3ICs1NzIsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUoSVBDOjpDb25uZWN0aW9u
JgogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29u
dGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZSh0eXBlKSk7CisgICAgYXV0byBkYXRh
T3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJ
RCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01Q
TEVUSU9OKGRhdGFPd25lci5oYXNWYWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSkpOwor
CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwg
WyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5jb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1JlYWRGb3JUeXBlKHR5cGUpKTsK
KyAgICB9KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00NTMsMzMgKzU4Niw0
OCBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdAogewogICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3Rl
Ym9hcmROYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZSh1cmwpOwotICAgIGRpZE1vZGlm
eUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91
c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNv
dW50KCkpOwotICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0
aW9uKGNvbm5lY3Rpb24pKQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwg
MCk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAg
IE1FU1NBR0VfQ0hFQ0soZGF0YU93bmVyLmhhc1ZhbHVlKCkpOworCisgICAgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0
byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS5jaGFuZ2VDb3VudCgpOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLndyaXRlKHVybCk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOworICAgICAgICBpZiAoYXV0
byBwcm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKKyAg
ICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9Q
YXN0ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50JiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQ
YWdlSWRlbnRpZmllcj4gcGFnZUlEKQogewogICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmRO
YW1lLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShjb250ZW50KTsKLSAgICBkaWRNb2RpZnlD
b250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXND
aGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3Vu
dCgpKTsKLSAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlv
bihjb25uZWN0aW9uKSkKLSAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vz
czo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDAp
OworICAgIGF1dG8gZGF0YU93bmVyID0gdGhpcy0+ZGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBN
RVNTQUdFX0NIRUNLKGRhdGFPd25lci5oYXNWYWx1ZSgpKTsKKworICAgIFBsYXRmb3JtUGFzdGVi
b2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8g
cHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
Y2hhbmdlQ291bnQoKTsKKyAgICAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS53cml0ZShjb250ZW50KTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQo
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgICAgIGlmIChh
dXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQor
ICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVU
b1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYg
cGFzdGVib2FyZEltYWdlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQ
YWdlSWRlbnRpZmllcj4gcGFnZUlEKQogewogICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmRO
YW1lLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwotICAgIGRp
ZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
cmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNo
YW5nZUNvdW50KCkpOwotICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JD
b25uZWN0aW9uKGNvbm5lY3Rpb24pKQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmRO
YW1lKSwgMCk7CisgICAgYXV0byBkYXRhT3duZXIgPSB0aGlzLT5kYXRhT3duZXIoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUp
OworICAgIE1FU1NBR0VfQ0hFQ0soZGF0YU93bmVyLmhhc1ZhbHVlKCkpOworCisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAg
ICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRl
bnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5n
ZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkp
OworICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlv
bihjb25uZWN0aW9uKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5hbWUp
LCAwKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlU3RyaW5n
VG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQpAQCAtNDg3LDIwICs2MzUs
NTMgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY28KICAgICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJv
YXJkTmFtZS5pc0VtcHR5KCkpOwogICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmRUeXBlLmlz
RW1wdHkoKSB8fCB0ZXh0LmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0g
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJkVHlw
ZSwgdGV4dCk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwg
cGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7Ci0gICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdl
YlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCi0gICAgICAgIHByb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9u
b3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IHRoaXMtPmRh
dGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDSyhkYXRhT3duZXIuaGFzVmFsdWUo
KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93
bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CisgICAgICAgIFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUocGFzdGVib2FyZFR5cGUsIHRleHQpOwor
ICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlBy
b2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICBwcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJv
bm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGlkZW50aWZpZXJzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25h
bDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0
ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaWRlbnRpZmll
cnMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PikKIHsKICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVwZGF0ZVN1cHBv
cnRlZFR5cGVJZGVudGlmaWVycyhpZGVudGlmaWVycyk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9S
TShJT1NfRkFNSUxZKQogCitPcHRpb25hbDxEYXRhT3duZXJUeXBlPiBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmRhdGFPd25lcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQgaW50ZW50KSBjb25zdAoreworICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9S
RVRVUk5fVkFMVUUoIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgV1RGOjpudWxsb3B0KTsKKwor
ICAgIGF1dG8qIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOworICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUocHJvY2VzcywgV1RGOjpu
dWxsb3B0KTsKKworICAgIGlmICghcGFnZUlEKQorICAgICAgICByZXR1cm4gRGF0YU93bmVyVHlw
ZTo6VW5kZWZpbmVkOworCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgT3B0
aW9uYWw8RGF0YU93bmVyVHlwZT4gcmVzdWx0OworICAgIGZvciAoYXV0byogcGFnZSA6IHByb2Nl
c3MtPnBhZ2VzKCkpIHsKKyAgICAgICAgaWYgKHBhZ2UtPndlYlBhZ2VJRCgpID09ICpwYWdlSUQp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhZ2UtPmRhdGFPd25lckZvclBhc3RlYm9hcmQoaW50
ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHRo
aXMgbWVzc2FnZSBjaGVjayBpcyBoaXQsIHRoZW4gdGhlIGluY29taW5nIHdlYiBwYWdlIElEIGRv
ZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgcGFnZQorICAgIC8vIGN1cnJlbnRseSBrbm93biB0byB0
aGUgVUkgcHJvY2Vzcy4KKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKHJlc3Vs
dC5oYXNWYWx1ZSgpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOworICAgIHJldHVybiBEYXRhT3duZXJUeXBlOjpVbmRl
ZmluZWQ7CisjZW5kaWYKK30KKwogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRB
Y2Nlc3NJbmZvcm1hdGlvbjo6Z3JhbnRBY2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBQ
YXN0ZWJvYXJkQWNjZXNzVHlwZSB0eXBlKQogewogICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb2Nl
c3Nlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYzg4NDE5OWY0YjY5M2MyYmNkYTdmNTM3MjljZGNh
M2IzNDI2ZjEyZC4uZDU0N2VjNTcxNmUzYzc4MzI0MDgxNDJkNWZhZDFhZTNiNzBkNTYyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCkBAIC0z
OCw2ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDbGllbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRhY3RJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250
YWN0c1JlcXVlc3REYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT3duZXJUeXBlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9y
Q2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0RpcmVjdGlvbi5oPgpAQCAtNTE3LDYg
KzUxOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzQmxhbmtPdmVybGF5
KGJvb2wpIHsgfQogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgdmlydHVh
bCBXZWJDb3JlOjpEYXRhT3duZXJUeXBlIGRhdGFPd25lckZvclBhc3RlYm9hcmQoUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6RGF0YU93bmVyVHlwZTo6VW5k
ZWZpbmVkOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKQogICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0SW1hZ2VFeHRyYWN0aW9uKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25S
ZXN1bHQmJik+JiYgY29tcGxldGlvbikgeyBjb21wbGV0aW9uKHsgfSk7IH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFzdGVib2FyZEFjY2Vzc0ludGVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJiMGMyNzZlNDhhNTE3MDMyZGZjZGViMmVhZjkxNWJjNDcwZGUwODIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50
LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50IDogYm9vbCB7
CisgICAgUmVhZCwKKyAgICBXcml0ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBkOWFjNjlhODM0OTdkZjE4
OTY0ODNkOGJmODM3OGY4NjQxYTk1MTIyLi4yNDdiMzViMDlkY2ViMzU4MGFlZDUyNGNkZWFmMGIx
YzA2Yjc5NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTk2MjIsNiArOTYyMiwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hCYXJNZW51SXRlbURh
dGFSZW1vdmVkKGNvbnN0IFRvdWNoQmFyTWVudUl0ZW1EYXRhJiB0b3VjaAogfQogI2VuZGlmCiAK
KyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKworRGF0YU93bmVyVHlwZSBXZWJQYWdl
UHJveHk6OmRhdGFPd25lckZvclBhc3RlYm9hcmQoUGFzdGVib2FyZEFjY2Vzc0ludGVudCBpbnRl
bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2VDbGllbnQoKS5kYXRhT3duZXJGb3JQYXN0ZWJv
YXJkKGludGVudCk7Cit9CisKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVO
VCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OndyaXRlUHJvbWlzZWRBdHRhY2htZW50VG9QYXN0ZWJv
YXJkKFdlYkNvcmU6OlByb21pc2VkQXR0YWNobWVudEluZm8mJiBpbmZvKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBlNDc1ODBmYmE4NWQwMGQ0YzZkNjVjMDNkZTQz
N2E0MjJhMDI5YmNhLi4yMTc4NzlhNmRlNmRmZTM4ZjEzNmQyYThhYTQxNmYyMjlhMjQxNWI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAj
aW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUu
aCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2luY2x1
ZGUgIlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgpAQCAtMjg1LDYgKzI4NiwxMCBAQCBzdHJ1
Y3QgV2luZG93RmVhdHVyZXM7CiBzdHJ1Y3QgSW1hZ2VFeHRyYWN0aW9uUmVzdWx0OwogI2VuZGlm
CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKK2VudW0gY2xhc3MgRGF0YU93bmVy
VHlwZSA6IHVpbnQ4X3Q7CisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFJlY3RF
ZGdlczsKIHVzaW5nIEZsb2F0Qm94RXh0ZW50ID0gUmVjdEVkZ2VzPGZsb2F0PjsKIH0KQEAgLTEw
NzksNiArMTA4NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0OwogICAgIGJvb2wgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwoKSBjb25zdDsKIAor
I2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIFdlYkNvcmU6OkRhdGFPd25lclR5
cGUgZGF0YU93bmVyRm9yUGFzdGVib2FyZChQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdDsK
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWIg
cHJvY2VzcyB0aHJvdWdoIGEgbWVzc2FnZS4KICAgICB2b2lkIHJlZ2lzdGVyV2ViUHJvY2Vzc0Fj
Y2Vzc2liaWxpdHlUb2tlbihjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggZjVjZDU5NThiMmNmNDMz
NmM1YmQwMmZiNmRkY2UzYzYwM2UxNzg1Mi4uOWFmOTJmMjkwMTE4ZjY0NTZmOTc2NmUxZDRjODhl
NzlmMjllOWU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVi
b2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5LmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyQ29weTsKIH0KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgeworZW51bSBjbGFzcyBEYXRhT3duZXJUeXBlIDogdWludDhfdDsKIGNs
YXNzIENvbG9yOwogY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBjbGFzcyBTZWxlY3Rpb25E
YXRhOwpAQCAtNTIsNiArNTMsNyBAQCBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitlbnVtIGNsYXNzIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQgOiBi
b29sOwogY2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIApAQCAt
MTAwLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9y
VHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldFBh
c3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJD
b3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiYpPiYmKTsKLSAgICB2b2lkIGdl
dFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRp
b25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50
NjRfdCk+JiYpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29ubmVj
dGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJik7CiAgICAg
dm9pZCBnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9yJiYpPiYmKTsKICAgICB2b2lkIGdldFBhc3Rl
Ym9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
T3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNv
bm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYpOwpAQCAtMTQ5LDYgKzE1MSw4IEBA
IHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBQYXN0ZWJvYXJkQWNjZXNzVHlwZSA6IHVpbnQ4X3Qg
eyBUeXBlcywgVHlwZXNBbmREYXRhIH07CiAgICAgT3B0aW9uYWw8UGFzdGVib2FyZEFjY2Vzc1R5
cGU+IGFjY2Vzc1R5cGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgY29uc3Q7CiAgICAgdm9pZCBncmFudEFjY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBQYXN0ZWJvYXJkQWNjZXNzVHlwZSk7CisKKyAgICBP
cHRpb25hbDxXZWJDb3JlOjpEYXRhT3duZXJUeXBlPiBkYXRhT3duZXIoSVBDOjpDb25uZWN0aW9u
JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXI+LCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdDsKICNlbmRpZgogCiAgICAg
V2ViUHJvY2Vzc1Byb3h5TGlzdCBtX3dlYlByb2Nlc3NQcm94eUxpc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KaW5k
ZXggZjIzZjg1Y2Q1NTgwMjZkMDk5ODRmNjg3MTg4MDIxZmM4ZTc4YTcyMy4uNDdiMzdjMGVlZTEw
OTQ1ZjYzNWMzYjI1ZWM1MWQzM2IzNWIxNGYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtNDcsNyArNDcs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAg
R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcg
cGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQp
IC0+IChTdHJpbmcgc3RyaW5nKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQ
YXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFz
dGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+
IChWZWN0b3I8U3RyaW5nPiBzdHJpbmdzKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAg
ICBHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmlu
ZyBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91
cyBXYW50c0Nvbm5lY3Rpb24KLSAgICBHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBh
c3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAt
PiAoaW50NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMKKyAgICBHZXRQYXN0ZWJvYXJkQ2hh
bmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRl
bnRpZmllcj4gcGFnZUlEKSAtPiAoaW50NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMgV2Fu
dHNDb25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZENvbG9yKFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKFdlYkNvcmU6
OkNvbG9yIGNvbG9yKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQYXN0ZWJv
YXJkVVJMKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50
aWZpZXI+IHBhZ2VJRCkgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzIFdhbnRzQ29u
bmVjdGlvbgogICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZl
Y3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcywgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50
aWZpZXI+IHBhZ2VJRCkgLT4gKGludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNocm9ub3VzIFdhbnRz
Q29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAppbmRleCA2ZGEwYmZiOGFhYjc5MDBkMTcwNWE0NzVhNzZhNzdhMjFkODk4NWM5Li4x
NGZiZTk1YTMzNWU2NjYwZGQ4ZjA4YjA0MTVlMTZlNDlmNjBjYzE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaApAQCAtMTI2LDYgKzEyNiwx
MCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24+
IGNyZWF0ZURhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bihXZWJQYWdlUHJveHkmKSBmaW5hbDsK
ICNlbmRpZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgV2ViQ29yZTo6
RGF0YU93bmVyVHlwZSBkYXRhT3duZXJGb3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBV
VF9UWVBFUykKICAgICBSZWZQdHI8V2ViRGF0ZVRpbWVQaWNrZXI+IGNyZWF0ZURhdGVUaW1lUGlj
a2VyKFdlYlBhZ2VQcm94eSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggMDBjZGYxM2JhOTJiZDA2YzBj
MjkxNzVmNDFjMmNkNjFjOTU1ZTEzMS4uYjlkODgzNWNkZWY2YWQ4Nzc4NzQ0YzY2NGIwMmQ2ODNh
MjdiYzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQpAQCAtNDU5LDYgKzQ1OSwxNSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25l
RGVmZXJyaW5nVG91Y2hFbmQoYm9vbCBwcmV2ZW50TmF0aXZlR2VzdHVyZXMpCiAKICNlbmRpZiAv
LyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09X
TkVSKQorCitXZWJDb3JlOjpEYXRhT3duZXJUeXBlIFBhZ2VDbGllbnRJbXBsOjpkYXRhT3duZXJG
b3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQgaW50ZW50KSBjb25zdAoreworICAg
IHJldHVybiBbbV9jb250ZW50VmlldyBfZGF0YU93bmVyRm9yUGFzdGVib2FyZDppbnRlbnRdOwor
fQorCisjZW5kaWYKKwogUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKIHsKICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaAppbmRleCAwMGI3ODdlM2U4MDQxYmM1MWYyNGU1OTVjYTA2NzRiNWY5YWEw
MzI1Li5hNWEyOWYxYzI5NmJmNGFlNTgzOTdlMjY4Yjg3MWNmZDEzZGI3M2VlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW1wb3J0ICJGcmFtZUluZm9EYXRhLmgiCiAjaW1wb3J0
ICJHZXN0dXJlVHlwZXMuaCIKICNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmgiCisjaW1wb3J0ICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCiAjaW1wb3J0ICJTeW50
aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUuaCIKICNpbXBvcnQgIlRleHRDaGVja2luZ0NvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIlRyYW5zYWN0aW9uSUQuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbXBv
cnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RhdGFPd25lclR5cGUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lZGlh
Q29udHJvbHNDb250ZXh0TWVudUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9pbnRlcklELmg+
CkBAIC03MDAsNiArNzAyLDEwIEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJ
T04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJRVcpCiAtIChCT09MKV9m
b3JtQ29udHJvbFJlZnJlc2hFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRf
REFUQV9PV05FUikKKy0gKFdlYkNvcmU6OkRhdGFPd25lclR5cGUpX2RhdGFPd25lckZvclBhc3Rl
Ym9hcmQ6KFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVudClpbnRlbnQ7CisjZW5kaWYKKwog
QGVuZAogCiBAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLVGVzdGluZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CmluZGV4IDViNGI2NWNiNDBhNGQyYWViMjViOTZkNmE3OWE5Zjc1ZjFiMDc1MDUuLmYzNWQ1OWQ5
MDZhNjljZmZhYTYxNzZkYWVhNjdiNTExMjI2MTlkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzQ2
OCw2ICs3NDY4LDM3IEBAIC0gKEJPT0wpX3Nob3VsZFVzZUxlZ2FjeVNlbGVjdFBvcG92ZXJEaXNt
aXNzYWxCZWhhdmlvcgogICAgIHJldHVybiBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNEYXRh
QWN0aXZhdGlvbigpOwogfQogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKKy0g
KFdlYkNvcmU6OkRhdGFPd25lclR5cGUpX2RhdGFPd25lckZvclBhc3RlYm9hcmQ6KFdlYktpdDo6
UGFzdGVib2FyZEFjY2Vzc0ludGVudClpbnRlbnQKK3sKKyAgICBhdXRvIGNvcmVUeXBlID0gW10g
KF9VSURhdGFPd25lciBwbGF0Zm9ybVR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChwbGF0Zm9ybVR5
cGUpIHsKKyAgICAgICAgY2FzZSBfVUlEYXRhT3duZXJVc2VyOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkRhdGFPd25lclR5cGU6OlVzZXI7CisgICAgICAgIGNhc2UgX1VJRGF0YU93bmVy
RW50ZXJwcmlzZToKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpF
bnRlcnByaXNlOworICAgICAgICBjYXNlIF9VSURhdGFPd25lclNoYXJlZDoKKyAgICAgICAgICAg
IHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpTaGFyZWQ7CisgICAgICAgIGNhc2UgX1VJ
RGF0YU93bmVyVW5kZWZpbmVkOgorICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFPd25l
clR5cGU6OlVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFPd25lclR5cGU6OlVuZGVmaW5lZDsKKyAg
ICB9OworCisgICAgaWYgKGludGVudCA9PSBXZWJLaXQ6OlBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6
OlJlYWQpCisgICAgICAgIHJldHVybiBjb3JlVHlwZShzZWxmLl9kYXRhT3duZXJGb3JQYXN0ZSk7
CisKKyAgICBpZiAoaW50ZW50ID09IFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3Jp
dGUpCisgICAgICAgIHJldHVybiBjb3JlVHlwZShzZWxmLl9kYXRhT3duZXJGb3JDb3B5KTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJU
eXBlOjpVbmRlZmluZWQ7Cit9CisKKyNlbmRpZiAvLyBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05F
UikKKwogLSAoUmV0YWluUHRyPFVJVmlldz4pX2NyZWF0ZVByZXZpZXdDb250YWluZXJXaXRoTGF5
ZXJOYW1lOihOU1N0cmluZyAqKWxheWVyTmFtZQogewogICAgIGF1dG8gY29udGFpbmVyID0gYWRv
cHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmQ4MzJjZGE4OGIxYjdlMzhiNWFlOTNmNGU0
ODEzYjQxOWNlZTY0Ny4uODE0N2QyZmFkOWM3NWM2NDg0NDYyYThhNDQ3ZThlNjkzNTUzM2JjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00MjYsMTIgKzQyNiw2IEBACiAJCTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oICovOyB9OwogCQkxQ0JCRTRBMDE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVj
dG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUNCQkU0OUUxOUI2NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJ
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUNCQkU0QTExOUI2NkM1MzAwNkI3RDgxIC8q
IFdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDQkJFNDlGMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmggKi87IH07Ci0JCTFENDc2NTg2MjVDQ0E0MTYwMDdBRjMxMiAvKiBSZW1vdGVJ
bWFnZURlY29kZXJBVkZQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUQ0NzY1ODQyNUNDQTQxNjAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2Rl
ckFWRlByb3h5LmggKi87IH07Ci0JCTFENDc2NTkzMjVDQ0NFOTMwMDdBRjMxMiAvKiBSZW1vdGVJ
bWFnZURlY29kZXJBVkZQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxRDQ3NjU5MDI1Q0NDRTkzMDA3QUYzMTIgLyogUmVtb3RlSW1h
Z2VEZWNvZGVyQVZGUHJveHlNZXNzYWdlcy5oICovOyB9OwotCQkxRDQ3NjU5NDI1Q0NDRTkzMDA3
QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGUHJveHlNZXNzYWdlc1JlcGxpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFENDc2NTkxMjVDQ0NF
OTMwMDdBRjMxMiAvKiBSZW1vdGVJbWFnZURlY29kZXJBVkZQcm94eU1lc3NhZ2VzUmVwbGllcy5o
ICovOyB9OwotCQkxRDQ3NjU5QzI1Q0U3NEFEMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRDQ3NjU5OTI1Q0U3NEFDMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVy
QVZGTWFuYWdlck1lc3NhZ2VzLmggKi87IH07Ci0JCTFENDc2NTlEMjVDRTc0QUQwMDdBRjMxMiAv
KiBSZW1vdGVJbWFnZURlY29kZXJBVkZNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRDQ3NjU5QTI1Q0U3NEFDMDA3
QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZGTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oICov
OyB9OwotCQkxRDQ3NjVBMTI1Q0Y1NzQwMDA3QUYzMTIgLyogUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUQ0NzY1OUYyNUNGNTc0MDAwN0FGMzEyIC8qIFJlbW90ZUltYWdlRGVjb2RlckFWRk1hbmFnZXIu
aCAqLzsgfTsKIAkJMUQ0RDczNzAyM0E5RTU0NzAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFENEQ3MzZCMjNBOURGNTUwMDcxN0EyNSAvKiBSZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTFENEQ3MzcxMjNB
OUU1NjIwMDcxN0EyNSAvKiBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRDRENzM2QzIzQTlE
RjYwMDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlcy5oICovOyB9
OwogCQkxRDRENzM3NjIzQTlFRDE4MDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXJNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFENEQ3Mzc1MjNBOUVCNjgwMDcxN0EyNSAvKiBSZW1vdGVNZWRpYVJlc291cmNl
TWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwpAQCAtMTk5NSw2ICsxOTg5LDcgQEAKIAkJ
RjQ0MjkxOTYxRkE1OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0MjkxOTUxRkE1OTQy
QTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlGNDQ4MTU2NDIz
ODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0ODE1NjIyMzg3ODIwMDAw
OTgyNjU3IC8qIFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJRjQ0REZF
QjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAv
KiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07CisJCUY0NjYwQkMyMjVERUYwODEwMEU4NjU5OCAv
KiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDY2MEJDMTI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2FyZEFj
Y2Vzc0ludGVudC5oICovOyB9OwogCQlGNDhEMkE4NTIxNTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhE
MkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi87IH07CiAJCUY0OTZBNDMxMUY1
OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1
NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLzsgfTsKIAkJRjRBNkQ2QkMyNTRDQTNF
OTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyog
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKQEAgLTU4NTcsNiArNTg1Miw3IEBACiAJ
CUY0NDgxNTYzMjM4NzgyMDAwMDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5t
bTsgcGF0aCA9IGlvcy9XS0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0
aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJY29uVXRpbGl0
aWVzLmg7IHBhdGggPSBpb3MvV2ViSWNvblV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDRERkVCMTFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkljb25VdGlsaXRp
ZXMubW07IHBhdGggPSBpb3MvV2ViSWNvblV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRjQ2NjBCQzEyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBwYXRoID0g
aW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBw
YXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTk3NTAsNiArOTc0Niw3IEBACiAJCQkJQkM2RURBQTUxMTEyNzFDNjAwRTc2
NzhCIC8qIFBhZ2VDbGllbnQuaCAqLywKIAkJCQkxQUM3NTM3OTE4M0E5RkRBMDA3MkNCMTUgLyog
UGFnZUxvYWRTdGF0ZS5jcHAgKi8sCiAJCQkJMUFDNzUzN0ExODNBOUZEQjAwNzJDQjE1IC8qIFBh
Z2VMb2FkU3RhdGUuaCAqLywKKwkJCQlGNDY2MEJDMTI1REVGMDgxMDBFODY1OTggLyogUGFzdGVi
b2FyZEFjY2Vzc0ludGVudC5oICovLAogCQkJCTgzMkVEMTg5MUUyRkUxM0IwMDZCQTY0QSAvKiBQ
ZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyLmNwcCAqLywKIAkJCQk4MzJFRDE4QTFFMkZF
MTNCMDA2QkE2NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5oICovLAogCQkJ
CTM3NzE2QTU5MTk1QjkxMDUwMEVFOEIxQiAvKiBQcm9jZXNzQXNzZXJ0aW9uLmNwcCAqLywKQEAg
LTExODg5LDYgKzExODg2LDcgQEAKIAkJCQkwRkNCNEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFn
ZUNsaWVudEltcGxNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzc1MzdDMTgzQTlGREIwMDcy
Q0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThCNjZCMDFCQzQz
Qzg2MDA4MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNDY2MEJDMjI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRU
eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3OThCNTEyMjMwQTEwRTAwMDc2NEJEIC8qIFBh
eW1lbnRBdXRob3JpemF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3OThC
M0UyMjJEOTdBMjAwMDc2NEJEIC8qIFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlNGFiZmFjOTg5NzIzNzk1YzQzNTU1MjA2YjgxZmU5NDQ1YjViMmQyLi5mMzIwZmE2
ZTZhZDUxMWQ0MjNhMGRhZDMzMTBjMjU0ZDE1MDAxNjc3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDItMTkg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10g
U3BlY2lmeSBhIF9VSURhdGFPd25lciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBz
eXN0ZW0gcGFzdGVib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIyMDcyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjb3VwbGUg
b2YgbmV3IEFQSSB0ZXN0cyB0byB2ZXJpZnkgdGhhdCBgK1tVSVBhc3RlYm9hcmQgX3BlcmZvcm1B
c0RhdGFPd25lcjpibG9jazpdYCBpcyBpbnZva2VkIHdpdGggdGhlCisgICAgICAgIGV4cGVjdGVk
IGRhdGEgb3duZXIgdHlwZSB3aGVuIGNvcHlpbmcgYW5kIHBhc3RpbmcuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbToKKyAgICAgICAgKCtb
VGVzdFVJUGFzdGVib2FyZCBfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOl0pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0
V0tXZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgY29udGVudHNBc1N0cmluZ10pOgorCisgICAgICAg
IEFkZGl0aW9uYWxseSBhZGQgYSBoZWxwZXIgbWV0aG9kIHRvIGdyYWIgYSBgV0tXZWJWaWV3YCdz
IGNvbnRlbnRzIGFzIGFuIGBOU1N0cmluZ2AsIGp1c3QgZm9yIGNvbnZlbmllbmNlLgorCiAyMDIx
LTAyLTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRml4IG51bGwgZGVyZWZlcmVuY2luZyBpbiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpn
aXZlUmVzcG9uc2VUb1Rhc2tzV2l0aEZpbmlzaGVkUmFuZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tCmluZGV4IGY1MjA5NDFmZTg5
ZTU3OTcxZmJjOTlhNGI5NWMyNTUxNzExZWIyYjEuLmQxNWEyNjQ4NmZjMTFhMmMyZGE4Njc3YWJh
YzNhOTViMjdkOTkwYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L1VJUGFzdGVib2FyZFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L1VJUGFzdGVib2FyZFRlc3RzLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogCisjaW1wb3J0ICJDbGFzc01ldGhvZFN3aXp6bGVyLmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAi
VUlLaXRTUEkuaCIKQEAgLTQ4LDYgKzQ5LDI2IEBAIHN0YXRpYyB2b2lkIGNoZWNrSlNPTldpdGhM
b2dnaW5nKE5TU3RyaW5nICpqc29uU3RyaW5nLCBOU0RpY3Rpb25hcnkgKmV4cGVjdGVkKQogICAg
ICAgICBOU0xvZyhAIkV4cGVjdGVkIEpTT046ICVAIHRvIG1hdGNoIHZhbHVlczogJUAiLCBqc29u
U3RyaW5nLCBleHBlY3RlZCk7CiB9CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikK
Kworc3RhdGljIF9VSURhdGFPd25lciBnTGFzdEtub3duRGF0YU93bmVyID0gX1VJRGF0YU93bmVy
VW5kZWZpbmVkOworCitAaW50ZXJmYWNlIFRlc3RVSVBhc3RlYm9hcmQgOiBOU09iamVjdAorKyAo
dm9pZClfcGVyZm9ybUFzRGF0YU93bmVyOihfVUlEYXRhT3duZXIpb3duZXIgYmxvY2s6KGRpc3Bh
dGNoX2Jsb2NrX3QpYmxvY2s7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0VUlQYXN0ZWJv
YXJkCisKKysgKHZvaWQpX3BlcmZvcm1Bc0RhdGFPd25lcjooX1VJRGF0YU93bmVyKW93bmVyIGJs
b2NrOihkaXNwYXRjaF9ibG9ja190KWJsb2NrCit7CisgICAgYmxvY2soKTsKKyAgICBnTGFzdEtu
b3duRGF0YU93bmVyID0gb3duZXI7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEhBVkUoUEFTVEVC
T0FSRF9EQVRBX09XTkVSKQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CkBAIC0zNDgsNiArMzY5LDUwIEBAIFRFU1QoVUlQYXN0ZWJvYXJkVGVz
dHMsIE1pc3NpbmdQcmVmZXJyZWRQcmVzZW50YXRpb25TaXplRm9ySW1hZ2UpCiAgICAgRVhQRUNU
X1dLX1NUUkVRKCIwIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLndpZHRoIl0pOwogICAgIEVYUEVDVF9XS19TVFJF
USgiMTc0IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLmhlaWdodCJdKTsKIH0KKworI2lmIEhBVkUoUEFTVEVCT0FS
RF9EQVRBX09XTkVSKQorCitURVNUKFVJUGFzdGVib2FyZFRlc3RzLCBQZXJmb3JtV2l0aERhdGFP
d25lcldoZW5Db3B5aW5nKQoreworICAgIGF1dG8gc3dpenpsZXIgPSBDbGFzc01ldGhvZFN3aXp6
bGVyIHsKKyAgICAgICAgVUlQYXN0ZWJvYXJkLmNsYXNzLAorICAgICAgICBAc2VsZWN0b3IoX3Bl
cmZvcm1Bc0RhdGFPd25lcjpibG9jazopLAorICAgICAgICBbVGVzdFVJUGFzdGVib2FyZCBtZXRo
b2RGb3JTZWxlY3RvcjpAc2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazopXQorICAg
IH07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFdlYlZpZXdGb3JQYXN0ZWJvYXJkVGVzdHMo
QCJzaW1wbGUiKTsKKyAgICBbd2ViVmlldyBfc2V0RGF0YU93bmVyRm9yQ29weTpfVUlEYXRhT3du
ZXJTaGFyZWRdOworICAgIFt3ZWJWaWV3IF9zZXREYXRhT3duZXJGb3JQYXN0ZTpfVUlEYXRhT3du
ZXJFbnRlcnByaXNlXTsKKyAgICBbd2ViVmlldyBzZWxlY3RBbGw6bmlsXTsKKyAgICBbd2ViVmll
dyBjb3B5Om5pbF07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVd
OworCisgICAgRVhQRUNUX0VRKGdMYXN0S25vd25EYXRhT3duZXIsIF9VSURhdGFPd25lclNoYXJl
ZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFVJUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZC5z
dHJpbmcsICJTaW1wbGUgSFRNTCBmaWxlLiIpOworfQorCitURVNUKFVJUGFzdGVib2FyZFRlc3Rz
LCBQZXJmb3JtV2l0aERhdGFPd25lcldoZW5QYXN0aW5nKQoreworICAgIGF1dG8gc3dpenpsZXIg
PSBDbGFzc01ldGhvZFN3aXp6bGVyIHsKKyAgICAgICAgVUlQYXN0ZWJvYXJkLmNsYXNzLAorICAg
ICAgICBAc2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazopLAorICAgICAgICBbVGVz
dFVJUGFzdGVib2FyZCBtZXRob2RGb3JTZWxlY3RvcjpAc2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFP
d25lcjpibG9jazopXQorICAgIH07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFdlYlZpZXdG
b3JQYXN0ZWJvYXJkVGVzdHMoQCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIik7CisgICAgW3dl
YlZpZXcgX3NldERhdGFPd25lckZvckNvcHk6X1VJRGF0YU93bmVyU2hhcmVkXTsKKyAgICBbd2Vi
VmlldyBfc2V0RGF0YU93bmVyRm9yUGFzdGU6X1VJRGF0YU93bmVyRW50ZXJwcmlzZV07CisKKyAg
ICBVSVBhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQuc3RyaW5nID0gQCJGb28gYmFyIjsKKyAg
ICBbd2ViVmlldyBwYXN0ZTpuaWxdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0
aW9uVXBkYXRlXTsKKworICAgIEVYUEVDVF9FUShnTGFzdEtub3duRGF0YU93bmVyLCBfVUlEYXRh
T3duZXJFbnRlcnByaXNlKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW3dlYlZpZXcgY29udGVudHNB
c1N0cmluZ10sICJGb28gYmFyXG4iKTsKK30KKworI2VuZGlmIC8vIEhBVkUoUEFTVEVCT0FSRF9E
QVRBX09XTkVSKQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RX
S1dlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCmlu
ZGV4IGMxZGMwOGNmYTRjZjA2MTMzNTI0NTdiZjExYThlZTMwNjEwN2FlOGEuLjVlZjNmOGU0ZmE2
YjBjNzFmYmQxYjU0MTE5NmY2OTAwMmFmZGRkMDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvVGVzdFdLV2ViVmlldy5oCkBAIC00OCw2ICs0OCw3IEBACiBAZW5kCiAKIEBpbnRlcmZhY2Ug
V0tXZWJWaWV3IChUZXN0V2ViS2l0QVBJKQorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU1N0cmluZyAqY29udGVudHNBc1N0cmluZzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNBcnJheTxOU1N0cmluZyAqPiAqdGFnc0luQm9keTsKIC0gKHZvaWQpbG9hZFRlc3RQ
YWdlTmFtZWQ6KE5TU3RyaW5nICopcGFnZU5hbWU7CiAtICh2b2lkKXN5bmNocm9ub3VzbHlHb0Jh
Y2s7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KaW5kZXggOGQ5
NjcxNjNiNDZkYTc5MTk5MzRlNjQ5MDY0MDNjZDIzMWIyZTYwYy4uZTU3Mjk4MjI0YTFiNmI1ZDdk
M2MyOGM1NDlmZjhjZThiNjUyMjM4YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9j
b2NvYS9UZXN0V0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dFdLV2ViVmlldy5tbQpAQCAtMTMwLDYgKzEzMCwxOCBAQCAtIChCT09MKV9zeW5jaHJvbm91c2x5
RXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5n
CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKKy0gKE5TU3RyaW5nICopY29udGVudHNBc1N0cmlu
ZworeworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5Q
dHI8TlNTdHJpbmc+IHJlc3VsdDsKKyAgICBbc2VsZiBfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhD
b21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nICpjb250ZW50cywgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAgICAgcmVzdWx0ID0gY29udGVudHM7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgcmV0dXJuIHJlc3Vs
dC5hdXRvcmVsZWFzZSgpOworfQorCiAtIChOU0FycmF5PE5TU3RyaW5nICo+ICopdGFnc0luQm9k
eQogewogICAgIHJldHVybiBbc2VsZiBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiQXJy
YXkuZnJvbShkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLm1hcChlID0+
IGUudGFnTmFtZSkiXTsK
</data>
<flag name="review"
          id="439713"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421005</attachid>
            <date>2021-02-19 12:02:57 -0800</date>
            <delta_ts>2021-02-19 12:58:20 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-222072-20210219120256.patch</filename>
            <type>text/plain</type>
            <size>82969</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxZjI2OWZkYWFlOWIzYTczMTM1Y2U4
MTlhYWFmYjRhMWUxMDcwMzguLjRmNjNjYWI4ODQ3MWM2M2VhNjdmYjlhMTFkODI5ZGU5M2VjZDdk
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25l
ciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBEZXZp
biBSb3Vzc28uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisKKyAgICAgICAgVHVy
biBzZXZlcmFsIGNvbXBpbGUtdGltZSBndWFyZHMgcHJldmlvdXNseSBpbiBgUGxhdGZvcm1QYXN0
ZWJvYXJkSU9TLm1tYCBpbnRvIGBIQVZFKClgLXMuCisKIDIwMjEtMDItMTggIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFNldCBFTkFCTEVfVlA5IHRvIDEgb24g
SU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOTU1NTkwZGEwNWNmNjFmOTZhMjhlMGFlMGM0ZGJhMzZhOWIwOTEx
OS4uNjcxYmEyNWM2NDY1NzU0ZmIzZGJlOGNkNDVmYzZkNTRlMjQ2ZDkzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMzIEBACisyMDIxLTAyLTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiBy
ZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3Nv
LgorCisgICAgICAgIEFkZCBhIHN0YXRpYyBoZWxwZXIgbWV0aG9kIHRvIGBQbGF0Zm9ybVBhc3Rl
Ym9hcmRgLCBzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIGFyYml0cmFyeSBwYXN0ZWJvYXJkIG9wZXJh
dGlvbnMKKyAgICAgICAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZ2l2ZW4gYERhdGFPd25lclR5
cGVgLiBXZSB0aGVuIHVzZSB0aGlzIHN0YXRpYyBoZWxwZXIgdG8gd3JhcCBhbGwgcGFzdGVib2Fy
ZCBhY2Nlc3MKKyAgICAgICAgKHJlYWRpbmcsIHdyaXRpbmcsIGV0Yy4pIGluc2lkZSBjYWxscyB0
byBgK1tVSVBhc3RlYm9hcmQgX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazpdYCAtLSBzZWUgV2Vi
S2l0IENoYW5nZUxvZworICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgIFRlc3Rz
OiAgVUlQYXN0ZWJvYXJkVGVzdHMuUGVyZm9ybUFzRGF0YU93bmVyV2hlbkNvcHlpbmcKKyAgICAg
ICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5QZXJmb3JtQXNEYXRhT3duZXJXaGVuUGFzdGlu
ZworCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGF0YU93bmVyVHlwZS5oOiBB
ZGRlZC4KKworICAgICAgICBBZGQgYSBuZXcgZW51bSB0byByZXByZXNlbnQgYSBkYXRhIG93bmVy
IHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJXUEUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcik6CisKIDIwMjEtMDIt
MTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1
bWIgYW4gT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHRocm91Z2ggV2ViUGFzdGVib2FyZFByb3h5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwppbmRleCA4MDg0Nzk0MmZiNjNkMmQ1MWI3Yzk4ZTRkYmJkNzlmNDFj
MWM3NWU1Li4yYjFkYWRkNzljNWIwMDdlOTQ1YzM4ZjM2MDhmMDkwODM2YzBmMjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBTcGVjaWZ5IGEgX1VJRGF0
YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZyb20gdGhlIHN5c3RlbSBwYXN0ZWJvYXJk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIwNzIK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjA4NTc2PgorCisgICAgICAgIFJldmlld2VkIGJ5
IERldmluIFJvdXNzby4KKworICAgICAgICBJbXBvcnQgYFVJUGFzdGVib2FyZF9Qcml2YXRlLmhg
IHNvIHRoYXQgYFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbWAgY2FuIHVzZSB0aGUgbmV3IFNQSS4K
KworICAgICAgICAqIHBhbC9zcGkvaW9zL1VJS2l0U1BJLmg6CisKIDIwMjEtMDItMTggIFBlciBB
cm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBPYnNlcnZlIHN5c3Rl
bSBzbGVlcCBldmVudHMgaW4gdGhlIFVJIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTQ1MmEwYWI1OTFi
MTIzZmRhMTEyZGUwNTA1YjZmOGI3MzUzMGE2MS4uNmNhOGQzNzk3ZTA2NWQwOWJiZTVmYmQyMjll
NWY3NWY0ODg2MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAyMS0wMi0xOSAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBTcGVj
aWZ5IGEgX1VJRGF0YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZyb20gdGhlIHN5c3Rl
bSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjIwNzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjA4NTc2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IERldmluIFJvdXNzby4KKworICAgICAgICBBZGRzIFdlYktpdDIgc3VwcG9y
dCBmb3IgdGFnZ2luZyBgUGxhdGZvcm1QYXN0ZWJvYXJkYCB3aXRoIHRoZSBjb250ZW50IHZpZXcn
cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZS4gU2VlCisgICAgICAgIGJlbG93IGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisKKyAg
ICAgICAgSW1wb3J0IGBVSVBhc3RlYm9hcmRfUHJpdmF0ZS5oYCBzbyB0aGF0IHdlIGtub3cgYWJv
dXQgYCtfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOmAgaW4gdGhlIEFQSSB0ZXN0cy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVHlwZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRQYXRobmFtZXNG
b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJv
YXJkU3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRVUkwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmFkZFBhc3RlYm9hcmRUeXBlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVVJMKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQ29sb3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdG
b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWluc1VS
TFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyk6CisKKyAgICAgICAgTWFrZSBhbGwgb2YgdGhlc2Ug
bWV0aG9kcyB1c2UgYGRhdGFPd25lcigpYCB3aXRoIGVpdGhlciBhIGBSZWFkYCBvciBgV3JpdGVg
IHBhc3RlYm9hcmQgYWNjZXNzIGludGVudCB0byBncmFiIHRoZQorICAgICAgICBkYXRhIG93bmVy
IHR5cGUgZnJvbSB0aGUgdmlldyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIGlkZW50aWZpZXIs
IGFuZCB0aGVuIHdyYXAgYWxsIHBhc3RlYm9hcmQgYWNjZXNzIHdpdGhpbgorICAgICAgICBgUGxh
dGZvcm1QYXN0ZWJvYXJkYCdzIG5ldyBgcGVyZm9ybUFzRGF0YU93bmVyYCBzdGF0aWMgaGVscGVy
LgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFi
bGVGb3JMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZvKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVVJMRnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRC
dWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVJbWFnZVRvUGFzdGVi
b2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVTdHJpbmdU
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0
ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRQcm94eTo6ZGV0ZXJtaW5lRGF0YU93bmVyIGNvbnN0KToKKworICAgICAgICBVc2UgdGhlIGdp
dmVuIHBhZ2UgaWRlbnRpZmllciBpbiB2YXJpb3VzIHBhc3RlYm9hcmQgSVBDIGVuZHBvaW50cyBp
biBgV2ViUGFzdGVib2FyZFByb3h5YCB0byBhc2sgYFdlYlBhZ2VQcm94eWAKKyAgICAgICAgZm9y
IGl0cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZSB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBw
YXN0ZWJvYXJkIGRhdGEuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorCisg
ICAgICAgIEFkZCBhIGNsaWVudCBob29rIHRvIHJldHVybiBhIGBEYXRhT3duZXJUeXBlYCBlbnVt
LCBnaXZlbiBhIGBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50YCAtLSB0aGF0IGlzLCBjb3B5ICh3cml0
ZSkgb3IKKyAgICAgICAgcGFzdGUgKHJlYWQpLgorCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnQ6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRhdGFPd25lckZv
clBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRhdGFP
d25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChjb3JlRGF0YU93bmVyVHlwZSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX2RhdGFPd25lckZvclBhc3RlYm9hcmQ6XSk6CisKKyAgICAgICAg
UmV0dXJuIGAtX2RhdGFPd25lckZvclBhc3RlYCBvciBgLV9kYXRhT3duZXJGb3JDb3B5YCAoZGVw
ZW5kaW5nIG9uIHRoZSBgUGFzdGVib2FyZEFjY2Vzc0ludGVudGApLgorCisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDItMTggIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1bWIgYW4gT3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHRocm91Z2ggV2ViUGFzdGVib2FyZFByb3h5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2
ZS5oCmluZGV4IDA0ODZmY2UyYzQxODZkMmQ4YmYyNTkxMjU1OTZlODYzOWNkMzQ1MTEuLmM3NDdk
NGUxMGYzNzM4YjVlYzA3OTJkYjcxMDQ4MjIwYzcyZWZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtSGF2ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5o
CkBAIC04ODgsMyArODg4LDE1IEBACiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMAogI2RlZmluZSBIQVZFX1NUQVRJQ19GT05UX1JF
R0lTVFJZIDEKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JN
KFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQorI2RlZmluZSBIQVZFX1BBU1RFQk9BUkRf
SVRFTV9QUk9WSURFUlMgMQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYpICYmICFQTEFURk9STShNQUND
QVRBTFlTVCkKKyNkZWZpbmUgSEFWRV9QQVNURUJPQVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRf
VEVBTV9EQVRBIDEKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQorI2RlZmluZSBIQVZFX05TVVJMX1RJVExFIDEKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKaW5kZXggN2FkODFkOTdhOWRmYWI4ZWRlYTFlZTAyZGM4ZWQyNDM4MjkxZTVk
NC4uZTY0NWYxMzVjN2JlZGI4MzVjNTkzMWEwMjJhNGIzNjEwNzI0MDZiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCkBAIC05OTksNiArOTk5LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL0N1cnNvci5oCiAgICAgcGxhdGZvcm0vRGF0YUxpc3RTdWdn
ZXN0aW9uUGlja2VyLmgKICAgICBwbGF0Zm9ybS9EYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmgK
KyAgICBwbGF0Zm9ybS9EYXRhT3duZXJUeXBlLmgKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50
cy5oCiAgICAgcGxhdGZvcm0vRGVjaW1hbC5oCiAgICAgcGxhdGZvcm0vRGVmZXJyYWJsZVRhc2su
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCBhMjA1Mjc5
MGU3OTdkNzc0MWVlZmE3NmQyNDUzYTdiNDQzODYxNTg5Li4zYmUwNzhjNzM2MDZiNWNkNDM2YTkw
ODYwOTRmOGU2NzY1ZTZkOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlL
aXRTUEkuaApAQCAtNDEsNiArNDEsNyBAQCBXVEZfRVhURVJOX0NfRU5ECiAjaW1wb3J0IDxVSUtp
dC9VSUZvY3VzUmluZ1N0eWxlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgog
I2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQ
YXN0ZWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuX1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlL
aXQvTlNJdGVtUHJvdmlkZXIrVUlLaXRBZGRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MjgyMGQ1ZjgyNmY0YTZm
ZDdlNmJlMDgwMTlkZTU3ZTRmN2ZhY2VlLi42OGJmMjMwOWJlYzJmNjlhMjcxNGY1ZDI1OWQ2NzM4
ODAxYzExZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01MjgxLDYgKzUyODEsNyBAQAogCQlGNDU3NzVDRTI0MTQzN0Q1MDAy
REYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
NjcyOTI4MUUwREU2ODUwMEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjcyOTI1MUUwREU1QUIw
MEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDZDNDQ3RTIzNDY1NDU0MDAzOUE3OUQgLyog
Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2QzQ0N0MyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuaCAqLzsgfTsKKwkJRjQ3Mzg0NTgyNURERTlGQjAw
NkRFOEREIC8qIERhdGFPd25lclR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0NzM4NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3
QTA5RDEyMEE5M0E5NzAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0
MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxl
U2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
N0E2MzNEMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNjMzQzFGRjZGRDUw
MDA4MUIzQ0MgLyogUHJvbWlzZWRBdHRhY2htZW50SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjYyOCw2ICsxNjYyOSw3IEBACiAJCUY0
NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3
OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3Rl
Ym9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0
ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NzM4
NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERh
dGFPd25lclR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5Q0YyMEE5
MzlGNjAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
YWJsZWRBZGFwdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlE
NDIwQTlERDA0MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTg0LDYgKzI3NTg2LDcgQEAKIAkJ
CQlGNTg3ODY4NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJRTUyQ0Y1NEUy
MEEzNUEyODAwREFEQTI3IC8qIERhdGFMaXN0U3VnZ2VzdGlvblBpY2tlci5oICovLAogCQkJCUU1
MkNGNTRDMjBBMjY4QUMwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggKi8s
CisJCQkJRjQ3Mzg0NTcyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLywKIAkJ
CQlBNTczMkIwODEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovLAogCQkJ
CUE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICovLAogCQkJCTM3
QzczOEYxMUVEQkRFODcwMDNGMkIwQiAvKiBEYXRlVGltZUNob29zZXIuaCAqLywKQEAgLTMxODM4
LDYgKzMxODQxLDcgQEAKIAkJCQlFNTE3NjcwMzIwQjg4QzE0MDBENDExNjcgLyogRGF0YUxpc3RT
dWdnZXN0aW9uSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTRGMjBBMzVB
MjgwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25QaWNrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU1MkNGNTREMjBBMjY4QUMwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogRGF0YU93
bmVyVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8q
IERhdGFzZXRET01TdHJpbmdNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNFMEE0NEVG
QzcwMEY5OTJFMCAvKiBEYXRhVHJhbnNmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTk5
MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDVhMWMzOThm
NzY3YWRkYWVjMWQwNWEzZjdiNDcxZTdlYTQ1ZmUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGF0YU93bmVyVHlwZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNz
IERhdGFPd25lclR5cGUgOiB1aW50OF90IHsKKyAgICBVbmRlZmluZWQsCisgICAgVXNlciwKKyAg
ICBFbnRlcnByaXNlLAorICAgIFNoYXJlZCwKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKaW5kZXggNjRi
ODg1MjAwMGU1NWIwNDg4Y2FiMmRmNTMwOWMwMzA4ODlmZTJhMS4uNmFiNDFmYjdlMTI5ZjBiZTk1
Y2JkY2E4ZmU4MWNmYWNjY2MzYzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1QYXN0ZWJvYXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgUGxhdGZvcm1QYXN0ZWJvYXJkX2gKLSNkZWZpbmUgUGxhdGZvcm1QYXN0ZWJvYXJk
X2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGF0YU93bmVyVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgpAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZvPiBpbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4
KHNpemVfdCBpbmRleCwgaW50NjRfdCBjaGFuZ2VDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
T3B0aW9uYWw8VmVjdG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+IGFsbFBhc3RlYm9hcmRJdGVtSW5m
byhpbnQ2NF90IGNoYW5nZUNvdW50KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHBlcmZvcm1Bc0RhdGFPd25lcihEYXRhT3duZXJUeXBlLCBGdW5jdGlvbjx2b2lkKCk+JiYpOwor
CiAgICAgZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VUeXBlcyA6IGJvb2wgeyBObywgWWVzIH07CiAg
ICAgc3RhdGljIFN0cmluZyBwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01U
b1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIGRvbVR5cGUsIEluY2x1ZGVJbWFnZVR5cGVzID0g
SW5jbHVkZUltYWdlVHlwZXM6Ok5vKTsKIApAQCAtMTI2LDYgKzEyOCw0IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIH07CiAKLX0KLQotI2VuZGlmIC8vICFQbGF0Zm9ybVBhc3RlYm9hcmRfaAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
bGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggZjlkOGQ5MmMxNmM3ZTY3YzkwNzY0MWExMzhi
ZTBmNWVmN2ZlOGI5OS4uZTc1NWNkMjI2YjRhZGVkYjIzOWFmNDU4YjYwYTRlMzFlMzEzYzRkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2Fy
ZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tCkBAIC04Niw2ICs4NiwzNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIHJldHVy
biBudWxscHRyOwogfQogCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKERhdGFPd25lclR5cGUgdHlwZSwgRnVuY3Rpb248dm9pZCgpPiYmIGFjdGlvbnMpCit7Cisj
aWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgYXV0byBkYXRhT3duZXIgPSBfVUlE
YXRhT3duZXJVbmRlZmluZWQ7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRhT3du
ZXJUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURhdGFPd25lclVuZGVm
aW5lZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhT3duZXJUeXBlOjpVc2VyOgorICAg
ICAgICBkYXRhT3duZXIgPSBfVUlEYXRhT3duZXJVc2VyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIERhdGFPd25lclR5cGU6OkVudGVycHJpc2U6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURh
dGFPd25lckVudGVycHJpc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YU93bmVyVHlw
ZTo6U2hhcmVkOgorICAgICAgICBkYXRhT3duZXIgPSBfVUlEYXRhT3duZXJTaGFyZWQ7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIFtQQUw6OmdldFVJUGFzdGVib2FyZENsYXNzKCkgX3Bl
cmZvcm1Bc0RhdGFPd25lcjpkYXRhT3duZXIgYmxvY2s6XnsKKyAgICAgICAgYWN0aW9ucygpOwor
ICAgIH1dOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgYWN0aW9ucygpOwor
I2VuZGlmCit9CisKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNGb3JUeXBl
KFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikgY29uc3QKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJXUEUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExp
YldQRS5jcHAKaW5kZXggM2RkNDhlOWYxOGYyNzExMGU4MTZlMjYyMDEwNWFmYjhmZWQ4ZDA4Mi4u
MzQxMTA4YzFmODA0NjJkMzM2ODU3OTI4ZmRhY2NjZGQxNjNmZjM2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExpYldQRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExp
YldQRS5jcHAKQEAgLTQ3LDYgKzQ3LDExIEBAIFBsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZvcm1Q
YXN0ZWJvYXJkKCkKICAgICBBU1NFUlQobV9wYXN0ZWJvYXJkKTsKIH0KIAordm9pZCBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcihEYXRhT3duZXJUeXBlLCBGdW5jdGlvbjx2
b2lkKCk+JiYgYWN0aW9ucykKK3sKKyAgICBhY3Rpb25zKCk7Cit9CisKIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMpCiB7CiAgICAgc3RydWN0
IHdwZV9wYXN0ZWJvYXJkX3N0cmluZ192ZWN0b3IgcGFzdGVib2FyZFR5cGVzID0geyBudWxscHRy
LCAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbQppbmRleCA5ZTU5YzdhZTEzNzVmOWNlMzkyMTIyMzc5OTcwYjc4ZDM1ZjBm
YTY2Li42OWE4MzM2NzI0YjczMDQzZmJkMzVmNjYzZjg5MmQ2YjkwNDVhYzRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0K
QEAgLTUyLDYgKzUyLDExIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAg
IHJldHVybiBbKF9fYnJpZGdlIE5TU3RyaW5nICopY2ZTdHJpbmcuZ2V0KCkgbGVuZ3RoT2ZCeXRl
c1VzaW5nRW5jb2Rpbmc6TlNTdHJpbmcuZGVmYXVsdENTdHJpbmdFbmNvZGluZ107CiB9CiAKK3Zv
aWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSwg
RnVuY3Rpb248dm9pZCgpPiYmIGFjdGlvbnMpCit7CisgICAgYWN0aW9ucygpOworfQorCiBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQogICAgIDogbV9wYXN0ZWJvYXJkKFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhO
YW1lOnBhc3RlYm9hcmROYW1lXSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmgKaW5kZXggZjg0YzUxZmEwNzc2M2IwZDljYjNhZWQ0MWU1NGJlNTRjMTJkZTk4NS4u
MWUxN2I4MWRiMjQ0NTdlNTU1MDgyYmNlNTY0M2Q5YjBkNTZkZjM2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSU1lbnVDb250cm9s
bGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJUGFzdGVib2FyZF9Qcml2YXRlLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxIb3N0Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBlcmlw
aGVyYWxIb3N0X1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJUGlja2VyQ29udGVudFZpZXdf
UHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFzdGVib2FyZFByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQppbmRleCBjMDc2ZDk0YjZlMjRiY2QyZDE5ZGI0NzU5
Y2QxOWJiYWYzYmFmYTg5Li43ZTQ1MGZhYjI1ODA1MTdjNzBjNTU1Mzg4NzMxNmY2YjQ0YTk2ZGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJk
UHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0
ZWJvYXJkUHJveHlDb2NvYS5tbQpAQCAtMjcsMTIgKzI3LDE0IEBACiAjaW1wb3J0ICJXZWJQYXN0
ZWJvYXJkUHJveHkuaCIKIAogI2ltcG9ydCAiQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiUGFzdGVi
b2FyZEFjY2Vzc0ludGVudC5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRGF0YU93bmVyVHlwZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9h
cmRJdGVtSW5mby5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KQEAg
LTE0Miw5ICsxNDQsMTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRU
eXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICBpZiAoIWNhbkFj
Y2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcGFz
dGVib2FyZFR5cGVzOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0
VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBh
c3RlYm9hcmRUeXBlcykpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVy
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNE
YXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFzdGVi
b2FyZFR5cGVzOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdl
dFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUocGFzdGVib2FyZFR5cGVzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsCkBAIC0xNTYsMjMgKzE2
MywyNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0Zv
clR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgIGlmICghY2FuQWNjZXNzUGFzdGVi
b2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhuYW1l
czsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uczsK
LSAgICBpZiAod2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkgewotICAg
ICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdldFBhdGhuYW1lc0ZvclR5
cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRl
cm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRh
dGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pKTsKIAorICAgIFBsYXRmb3JtUGFz
dGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBhdGhuYW1lczsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkgc2FuZGJveEV4dGVuc2lvbnM7CisgICAgICAgIGlmICh3ZWJQcm9jZXNzUHJveHlGb3JD
b25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7CisgICAgICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLmdldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJk
VHlwZSk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAvLyBPbiBpT1MsIGZpbGVzIGFyZSBj
b3BpZWQgaW50byBhcHAncyBjb250YWluZXIgdXBvbiBwYXN0ZS4KLSAgICAgICAgc2FuZGJveEV4
dGVuc2lvbnMuYWxsb2NhdGUocGF0aG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvJiBm
aWxlbmFtZSA9IHBhdGhuYW1lc1tpXTsKLSAgICAgICAgICAgIGlmICghW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVuYW1lXSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShmaWxlbmFtZSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHNhbmRib3hFeHRl
bnNpb25zW2ldKTsKLSAgICAgICAgfQorICAgICAgICAgICAgLy8gT24gaU9TLCBmaWxlcyBhcmUg
Y29waWVkIGludG8gYXBwJ3MgY29udGFpbmVyIHVwb24gcGFzdGUuCisgICAgICAgICAgICBzYW5k
Ym94RXh0ZW5zaW9ucy5hbGxvY2F0ZShwYXRobmFtZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZmlsZW5hbWUgPSBwYXRobmFtZXNbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZW5h
bWVdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmlsZW5hbWUsIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgICB9CiAjZW5k
aWYKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShwYXRobmFtZXMpLCBXVEZN
b3ZlKHNhbmRib3hFeHRlbnNpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShwYXRobmFtZXMpLCBXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb25zKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5n
Rm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVu
dGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTgyLDcgKzE5MywxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LAogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNv
bXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5n
Rm9yVHlwZShwYXN0ZWJvYXJkVHlwZSkpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5l
RGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3du
ZXIsIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpw
ZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JUeXBlKHBh
c3RlYm9hcmRUeXBlKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpn
ZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyLDcgKzIwOCwx
MiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbgogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2Fy
ZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsK
KyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBN
RVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7IH0p
KTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3du
ZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIwMiwyNSArMjIzLDM3IEBAIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOwogCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAg
dWludDY0X3Qgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4g
c2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplKTsKLSAgICBp
ZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7Ci0gICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRh
dGEoKSwgc2l6ZSk7Ci0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICgh
c2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlBy
b3RlY3Rpb246OlJlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZN
b3ZlKGhhbmRsZSksIHNpemUgfSk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRh
T3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vz
c0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZv
cm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIGJ1ZmZlciA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJk
VHlwZSk7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXItPnNpemUoKTsK
KyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9
IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5
QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAg
ICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIHNp
emUpOworICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGlmICgh
c2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlBy
b3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisg
ICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwor
CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwg
WyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBw
YWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6Q29sb3ImJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0yMjgsNyArMjYxLDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb2xvcigp
KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7
IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRh
T3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuY29sb3IoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIzNiw3ICsyNzQsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6Omdl
dFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHIKICAg
ICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0
aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybCgpLnN0cmlu
ZygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsK
KyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxl
cih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpk
YXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsKCkuc3RyaW5nKCkpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6YWRkUGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTI0NiwxMCArMjg5LDE1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjphZGRQYXN0ZWJvYXJk
VHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgZm9yIChhdXRv
JiB0eXBlIDogcGFzdGVib2FyZFR5cGVzKQogICAgICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oIXR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHBy
ZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNo
YW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuYWRkVHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLSAgICBkaWRNb2Rp
ZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlv
dXNDaGFuZ2VDb3VudCwgcHJldmlvdXNDaGFuZ2VDb3VudCk7Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIobmV3Q2hhbmdlQ291bnQpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93
bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBj
b21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1B
c0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdl
Q291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7
CisgICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGRpZE1vZGlmeUNv
bnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0No
YW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5l
d0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNl
dFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTksMTAgKzMwNywxNSBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlwZSA6IHBhc3RlYm9hcmRUeXBl
cykKICAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0eXBlLmlzRW1wdHkoKSwgY29t
cGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8g
bmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFR5
cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQo
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5n
ZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0
byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0Vf
Q0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAg
IFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7
CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2Fy
ZFR5cGVzKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0yNzYsMTAgKzMyOSwxNSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2Fy
ZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhcwogICAgICAgICBpZiAo
IXdlYlByb2Nlc3NQcm94eS0+Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKHBhc3RlYm9h
cmRVUkwudXJsLnN0cmluZygpLCBDaGVja0JhY2tGb3J3YXJkTGlzdDo6Tm8pKQogICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwogCi0gICAgICAgIGF1dG8gcHJldmlvdXND
aGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291
bnQoKTsKLSAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuc2V0VVJMKHBhc3RlYm9hcmRVUkwpOwotICAgICAgICBkaWRNb2RpZnlD
b250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXND
aGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgICAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWlu
ZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJk
QWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihk
YXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgICAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICAgICAg
YXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VVJMKHBhc3RlYm9hcmRVUkwpOwor
ICAgICAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgICAg
IH0pOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFuZGxlcigwKTsKIH0KQEAgLTI4OCwxMCArMzQ2
LDE1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01Q
TEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsK
IAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRDb2xvcihjb2xvcik7Ci0gICAgZGlk
TW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBy
ZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3du
ZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0lu
dGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNv
bXBsZXRpb25IYW5kbGVyKDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFz
RGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VD
b3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsK
KyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuc2V0Q29sb3IoY29sb3IpOworICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFz
dGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwg
bmV3Q2hhbmdlQ291bnQpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3Vu
dCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJk
U3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjk5LDEwICszNjIs
MTUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogICAg
IE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21w
bGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0
Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgYXV0byBu
ZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0U3Ry
aW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsKLSAgICBkaWRNb2RpZnlDb250ZW50
c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VD
b3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNv
dW50KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7
CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRs
ZXIoMCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRh
dGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOworICAgICAgICBhdXRv
IG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRT
dHJpbmdGb3JUeXBlKHN0cmluZywgcGFzdGVib2FyZFR5cGUpOworICAgICAgICBkaWRNb2RpZnlD
b250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXND
aGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihu
ZXdDaGFuZ2VDb3VudCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpj
b250YWluc1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0zMTAsNyArMzc4LDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250
YWluc1VSTFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvCiAgICAg
aWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUp
KQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCi0gICAgY29tcGxl
dGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb250YWluc1VS
TFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVy
bWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0
YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJv
YXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb250YWluc1VS
TFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZygpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OnVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYgdXJsLCBT
dHJpbmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zMTgsOSArMzkxLDE0IEBA
IHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0
YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcih7IH0sIHsgfSk7CiAKLSAgICBTdHJpbmcgdGl0bGU7Ci0gICAgYXV0byB1cmxTdHJp
bmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybFN0cmluZ1N1aXRhYmxl
Rm9yTG9hZGluZyh0aXRsZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh1cmxTdHJp
bmcpLCBXVEZNb3ZlKHRpdGxlKSk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRh
T3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vz
c0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwg
Y29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6
cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIFN0cmluZyB0aXRs
ZTsKKyAgICAgICAgYXV0byB1cmxTdHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyh0aXRsZSk7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUodXJsU3RyaW5nKSwgV1RGTW92ZSh0aXRsZSkpOworICAgIH0p
OwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5
cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYgaXBjSGFuZGxlLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzI4
LDIwICs0MDYsMjUgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRCdWZm
ZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIo
MCkpOwogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0
eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0g
ICAgaWYgKGlwY0hhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBuZXdDaGFu
Z2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9y
VHlwZShudWxscHRyLCBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgICAgIGRpZE1vZGlmeUNvbnRlbnRz
T2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNv
dW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihu
ZXdDaGFuZ2VDb3VudCk7Ci0gICAgfQorICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0
YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nl
c3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVy
LCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6Om1hcChpcGNIYW5kbGUuaGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwotICAgIGF1dG8gYnVm
ZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihz
aGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIHN0YXRpY19jYXN0PHNpemVfdD4oaXBjSGFuZGxl
LmRhdGFTaXplKSk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIucHRyKCksIHBhc3RlYm9h
cmRUeXBlKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHBy
ZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNo
YW5nZUNvdW50KCk7CisgICAgICAgIGlmIChpcGNIYW5kbGUuaGFuZGxlLmlzTnVsbCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKG51bGxwdHIsIHBhc3RlYm9hcmRUeXBlKTsKKyAg
ICAgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6Om1hcChp
cGNIYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAg
ICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoMCk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEo
KSksIHN0YXRpY19jYXN0PHNpemVfdD4oaXBjSGFuZGxlLmRhdGFTaXplKSk7CisgICAgICAgIGF1
dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNl
dEJ1ZmZlckZvclR5cGUoYnVmZmVyLnB0cigpLCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgICAgIGRp
ZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
cmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTM0OSw3ICs0MzIsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldE51bWJlck9m
RmlsZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHIKICAgICBpZiAoIWNh
bkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigwKTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVy
KFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkubnVtYmVyT2ZGaWxlcygpKTsKKyAg
ICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNT
QUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisK
KyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBb
Jl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLm51bWJlck9mRmlsZXMoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYg
b3JpZ2luLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzU5LDE3
ICs0NDcsMjcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnR5cGVzU2FmZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGkKICAgICBpZiAoIWNhbkFjY2Vzc1Bh
c3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0
ZShvcmlnaW4pKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25u
ZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpS
ZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9u
SGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
b3JpZ2luKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUN1
c3RvbURhdGEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBWZWN0b3I8UGFzdGVi
b2FyZEN1c3RvbURhdGE+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElP
TighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAg
ICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmNoYW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUoZGF0YSk7Ci0gICAgZGlkTW9kaWZ5Q29u
dGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hh
bmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFu
Z2VDb3VudCk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVj
dGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3Jp
dGUpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25I
YW5kbGVyKDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVy
KCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAg
YXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
d3JpdGUoZGF0YSk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5l
Y3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3Vu
dCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGlu
dDY0X3QgY2hhbmdlQ291bnQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8VmVjdG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzc3LDcgKzQ3NSwxMiBAQCB2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZvKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29ucwogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24s
IHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7
CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhjaGFuZ2VDb3VudCkpOworICAgIGF1dG8gZGF0YU93
bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdl
SUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09N
UExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5h
bGxQYXN0ZWJvYXJkSXRlbUluZm8oY2hhbmdlQ291bnQpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGludDY0X3QgY2hhbmdlQ291bnQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZvPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTM4NSw3ICs0ODgsMTIgQEAgdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLAogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBh
c3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVs
bG9wdCk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoaW5kZXgsIGNoYW5nZUNvdW50KSk7
CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFz
dGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAg
TUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoV1RG
OjpudWxsb3B0KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25l
cigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoaW5kZXgs
IGNoYW5nZUNvdW50KSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpn
ZXRQYXN0ZWJvYXJkSXRlbXNDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMzkzLDcgKzUwMSwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2Fy
ZEl0ZW1zQ291bnQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjbwogICAgIGlmICghY2Fu
QWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIo
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb3VudCgpKTsKKyAgICBhdXRvIGRh
dGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwg
cGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LmNvdW50KCkpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0
cmluZ0Zyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTQwMyw3ICs1MTYsMTIg
QEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHMKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRE
YXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSk7Cisg
ICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7
CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVy
LCBbJl0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC00MTEsOSArNTI5LDE0IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFk
VVJMRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplCiAgICAg
aWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkp
CiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSk7CiAKLSAgICBTdHJp
bmcgdGl0bGU7Ci0gICAgU3RyaW5nIHVybCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkucmVhZFVSTChpbmRleCwgdGl0bGUpLnN0cmluZygpOwotICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUodXJsKSwgV1RGTW92ZSh0aXRsZSkpOworICAgIGF1dG8gZGF0YU93bmVyID0g
ZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElP
TihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KSk7CisKKyAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAg
ICBTdHJpbmcgdGl0bGU7CisgICAgICAgIFN0cmluZyB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLnJlYWRVUkwoaW5kZXgsIHRpdGxlKS5zdHJpbmcoKTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHRpdGxlKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBh
Z2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVkTWVtb3J5
OjpJUENIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC00MjMsMjAgKzU0NiwyNSBA
QCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgcwogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERh
dGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKIAotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZEJ1ZmZlcihpbmRleCwgcGFzdGVib2Fy
ZFR5cGUpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKLSAgICB1aW50NjRfdCBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKCFz
aXplKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRl
KHNpemUpOwotICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVyKQotICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQotICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICBhdXRvIGRhdGFPd25lciA9
IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQ
YXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFz
dGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1
dG8gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFkQnVmZmVy
KGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIHVpbnQ2NF90IHNpemUg
PSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoc2l6ZSk7CisgICAgICAg
IGlmICghc2hhcmVkTWVtb3J5QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CisgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5kYXRhKCksIHNpemUpOworICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRv
UmVhZEZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC00NDQsNyArNTcyLDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWlu
c1N0cmluZ1NhZmVGb3JET01Ub1JlYWRGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYKICAgICBpZiAo
IWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKLSAgICBjb21wbGV0aW9u
SGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbnRhaW5zU3RyaW5n
U2FmZUZvckRPTVRvUmVhZEZvclR5cGUodHlwZSkpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0
ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3Rl
Ym9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihk
YXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKSk7CisKKyAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbnRhaW5z
U3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUodHlwZSkpOworICAgIH0pOwogfQogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ1MywzMyArNTg2LDQ4IEBAIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp3cml0ZVVSTFRvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0CiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgp
KTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLndyaXRlKHVybCk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9h
cmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7Ci0gICAgaWYgKGF1
dG8gcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCi0g
ICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0
ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICBhdXRvIGRhdGFP
d25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFn
ZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDSyhk
YXRhT3duZXIuaGFzVmFsdWUoKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1B
c0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdl
Q291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7
CisgICAgICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUodXJsKTsK
KyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQ
cm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQorICAgICAgICAgICAgcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hy
b25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6d3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBw
YWdlSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsK
IAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLndyaXRlKGNvbnRlbnQpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJv
YXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0
Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOwotICAgIGlmIChh
dXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQot
ICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFz
dGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgYXV0byBkYXRh
T3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBh
Z2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0so
ZGF0YU93bmVyLmhhc1ZhbHVlKCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3Jt
QXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5n
ZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgp
OworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLndyaXRlKGNvbnRl
bnQpOworICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9
IHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICBw
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFz
eW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5Ojp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1h
Z2UsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgp
KTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7Ci0gICAgZGlkTW9kaWZ5Q29udGVu
dHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdl
Q291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7
Ci0gICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29u
bmVjdGlvbikpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRp
ZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAg
ICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVT
U0FHRV9DSEVDSyhkYXRhT3duZXIuaGFzVmFsdWUoKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHBy
ZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNo
YW5nZUNvdW50KCk7CisgICAgICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
d3JpdGUocGFzdGVib2FyZEltYWdlKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3Rl
Ym9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgICAg
IGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rp
b24pKQorICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlk
V3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAg
IH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9h
cmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9w
dGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpCkBAIC00ODcsMjAgKzYzNSw1MyBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjbwogICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmROYW1lLmlz
RW1wdHkoKSk7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpIHx8
IHRleHQuaXNFbXB0eSgpKTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLndyaXRlKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KTsK
LSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5jaGFuZ2VDb3VudCgpKTsKLSAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1By
b3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKLSAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0
ZWJvYXJkTmFtZSksIDApOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVy
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLKGRhdGFPd25lci5oYXNWYWx1ZSgpKTsKKwor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsm
XSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJkVHlwZSwgdGV4dCk7CisgICAgICAg
IGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
LCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LmNoYW5nZUNvdW50KCkpOworICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1By
b3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0ZWJvYXJkQXN5bmNocm9ub3VzbHko
cGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aWRlbnRpZmllcnMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6dXBkYXRlU3VwcG9y
dGVkVHlwZUlkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+KQogewog
ICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXBkYXRlU3VwcG9ydGVkVHlw
ZUlkZW50aWZpZXJzKGlkZW50aWZpZXJzKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAKK09wdGlvbmFsPERhdGFPd25lclR5cGU+IFdlYlBhc3RlYm9hcmRQcm94eTo6ZGV0
ZXJtaW5lRGF0YU93bmVyKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0Cit7CisgICAgTUVTU0FHRV9DSEVDS19XSVRI
X1JFVFVSTl9WQUxVRSghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBXVEY6Om51bGxvcHQpOwor
CisgICAgYXV0byogcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVj
dGlvbik7CisgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRShwcm9jZXNzLCBXVEY6
Om51bGxvcHQpOworCisgICAgaWYgKCFwYWdlSUQpCisgICAgICAgIHJldHVybiBEYXRhT3duZXJU
eXBlOjpVbmRlZmluZWQ7CisKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICBP
cHRpb25hbDxEYXRhT3duZXJUeXBlPiByZXN1bHQ7CisgICAgZm9yIChhdXRvKiBwYWdlIDogcHJv
Y2Vzcy0+cGFnZXMoKSkgeworICAgICAgICBpZiAocGFnZS0+d2ViUGFnZUlEKCkgPT0gKnBhZ2VJ
RCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcGFnZS0+ZGF0YU93bmVyRm9yUGFzdGVib2FyZChp
bnRlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gSWYg
dGhpcyBtZXNzYWdlIGNoZWNrIGlzIGhpdCwgdGhlbiB0aGUgaW5jb21pbmcgd2ViIHBhZ2UgSUQg
ZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBwYWdlCisgICAgLy8gY3VycmVudGx5IGtub3duIHRv
IHRoZSBVSSBwcm9jZXNzLgorICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUocmVz
dWx0Lmhhc1ZhbHVlKCksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGludGVudCk7CisgICAgcmV0dXJuIERhdGFPd25lclR5cGU6OlVu
ZGVmaW5lZDsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2Fy
ZEFjY2Vzc0luZm9ybWF0aW9uOjpncmFudEFjY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Ms
IFBhc3RlYm9hcmRBY2Nlc3NUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBtYXRjaEluZGV4ID0gcHJv
Y2Vzc2VzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgcHJvY2Vzc0FuZFR5cGUpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBjODg0MTk5ZjRiNjkzYzJiY2RhN2Y1MzcyOWNk
Y2EzYjM0MjZmMTJkLi5kNTQ3ZWM1NzE2ZTNjNzgzMjQwODE0MmQ1ZmFkMWFlM2I3MGQ1NjJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEFjY2Vz
c0ludGVudC5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKQEAg
LTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dENsaWVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGFjdEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bnRhY3RzUmVxdWVzdERhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPd25lclR5cGUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0
b3JDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzRGlyZWN0aW9uLmg+CkBAIC01MTcs
NiArNTE5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNCbGFua092ZXJs
YXkoYm9vbCkgeyB9CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkRhdGFPd25lclR5cGUgZGF0YU93bmVyRm9yUGFzdGVib2FyZChQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpV
bmRlZmluZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElNQUdFX0VYVFJBQ1RJT04pCiAgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RJbWFnZUV4dHJhY3Rpb24oY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkltYWdlRXh0cmFjdGlv
blJlc3VsdCYmKT4mJiBjb21wbGV0aW9uKSB7IGNvbXBsZXRpb24oeyB9KTsgfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDU5OWQ2ZWIzNGE0ZTIyY2IzM2FlNjgyNTliYmIyMGEzNTZlYWE0NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Bhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQgOiBib29s
IHsKKyAgICBSZWFkLAorICAgIFdyaXRlLAorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBkOWFjNjlhODM0OTdk
ZjE4OTY0ODNkOGJmODM3OGY4NjQxYTk1MTIyLi4yNDdiMzViMDlkY2ViMzU4MGFlZDUyNGNkZWFm
MGIxYzA2Yjc5NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
QEAgLTk2MjIsNiArOTYyMiwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hCYXJNZW51SXRl
bURhdGFSZW1vdmVkKGNvbnN0IFRvdWNoQmFyTWVudUl0ZW1EYXRhJiB0b3VjaAogfQogI2VuZGlm
CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKworRGF0YU93bmVyVHlwZSBXZWJQ
YWdlUHJveHk6OmRhdGFPd25lckZvclBhc3RlYm9hcmQoUGFzdGVib2FyZEFjY2Vzc0ludGVudCBp
bnRlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2VDbGllbnQoKS5kYXRhT3duZXJGb3JQYXN0
ZWJvYXJkKGludGVudCk7Cit9CisKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OndyaXRlUHJvbWlzZWRBdHRhY2htZW50VG9QYXN0
ZWJvYXJkKFdlYkNvcmU6OlByb21pc2VkQXR0YWNobWVudEluZm8mJiBpbmZvKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBlNDc1ODBmYmE4NWQwMGQ0YzZkNjVjMDNk
ZTQzN2E0MjJhMDI5YmNhLi4yMTc4NzlhNmRlNmRmZTM4ZjEzNmQyYThhYTQxNmYyMjlhMjQxNWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Lmgi
CiAjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3Rh
dGUuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgpAQCAtMjg1LDYgKzI4NiwxMCBAQCBz
dHJ1Y3QgV2luZG93RmVhdHVyZXM7CiBzdHJ1Y3QgSW1hZ2VFeHRyYWN0aW9uUmVzdWx0OwogI2Vu
ZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKK2VudW0gY2xhc3MgRGF0YU93
bmVyVHlwZSA6IHVpbnQ4X3Q7CisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFJl
Y3RFZGdlczsKIHVzaW5nIEZsb2F0Qm94RXh0ZW50ID0gUmVjdEVkZ2VzPGZsb2F0PjsKIH0KQEAg
LTEwNzksNiArMTA4NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0OwogICAgIGJvb2wgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwoKSBjb25zdDsK
IAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorICAgIFdlYkNvcmU6OkRhdGFPd25l
clR5cGUgZGF0YU93bmVyRm9yUGFzdGVib2FyZChQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25z
dDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3
ZWIgcHJvY2VzcyB0aHJvdWdoIGEgbWVzc2FnZS4KICAgICB2b2lkIHJlZ2lzdGVyV2ViUHJvY2Vz
c0FjY2Vzc2liaWxpdHlUb2tlbihjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggZjVjZDU5NThiMmNm
NDMzNmM1YmQwMmZiNmRkY2UzYzYwM2UxNzg1Mi4uODJkN2ZjYmE3YzkyZGU0ZmExZjQ2NDZkZThi
YWJmNmQ2NzVhNDA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2Fy
ZFByb3h5LmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgU2hhcmVkQnVmZmVyQ29weTsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworZW51bSBjbGFzcyBEYXRhT3duZXJUeXBlIDogdWludDhfdDsK
IGNsYXNzIENvbG9yOwogY2xhc3MgUGFzdGVib2FyZEN1c3RvbURhdGE7CiBjbGFzcyBTZWxlY3Rp
b25EYXRhOwpAQCAtNTIsNiArNTMsNyBAQCBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitlbnVtIGNsYXNzIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQg
OiBib29sOwogY2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIApA
QCAtMTAwLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5n
Rm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRp
Zmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdl
dFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiYpPiYmKTsKLSAgICB2b2lk
IGdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBP
cHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
aW50NjRfdCk+JiYpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29u
bmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJik7CiAg
ICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9yJiYpPiYmKTsKICAgICB2b2lkIGdldFBh
c3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYpOwpAQCAtMTQ5LDYgKzE1MSw4
IEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBQYXN0ZWJvYXJkQWNjZXNzVHlwZSA6IHVpbnQ4
X3QgeyBUeXBlcywgVHlwZXNBbmREYXRhIH07CiAgICAgT3B0aW9uYWw8UGFzdGVib2FyZEFjY2Vz
c1R5cGU+IGFjY2Vzc1R5cGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgY29uc3Q7CiAgICAgdm9pZCBncmFudEFjY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBQYXN0ZWJvYXJkQWNjZXNzVHlwZSk7CisKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpEYXRhT3duZXJUeXBlPiBkZXRlcm1pbmVEYXRhT3duZXIoSVBD
OjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXI+LCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdDsKICNl
bmRpZgogCiAgICAgV2ViUHJvY2Vzc1Byb3h5TGlzdCBtX3dlYlByb2Nlc3NQcm94eUxpc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVz
c2FnZXMuaW4KaW5kZXggZjIzZjg1Y2Q1NTgwMjZkMDk5ODRmNjg3MTg4MDIxZmM4ZTc4YTcyMy4u
NDdiMzdjMGVlZTEwOTQ1ZjYzNWMzYjI1ZWM1MWQzM2IzNWIxNGYzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpA
QCAtNDcsNyArNDcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291
bnRlZCB7CiAgICAgR2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQpIC0+IChTdHJpbmcgc3RyaW5nKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rp
b24KICAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1l
LCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQpIC0+IChWZWN0b3I8U3RyaW5nPiBzdHJpbmdzKSBTeW5jaHJvbm91cyBXYW50c0Nv
bm5lY3Rpb24KICAgICBHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50
aWZpZXI+IHBhZ2VJRCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxl
KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KLSAgICBHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291
bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cj4gcGFnZUlEKSAtPiAoaW50NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMKKyAgICBHZXRQ
YXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJD
b3JlOjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoaW50NjRfdCBjaGFuZ2VDb3VudCkgU3lu
Y2hyb25vdXMgV2FudHNDb25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZENvbG9yKFN0cmluZyBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkg
LT4gKFdlYkNvcmU6OkNvbG9yIGNvbG9yKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAg
ICBHZXRQYXN0ZWJvYXJkVVJMKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9u
b3VzIFdhbnRzQ29ubmVjdGlvbgogICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVi
b2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcywgT3B0aW9uYWw8V2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKGludDY0X3QgY2hhbmdlQ291bnQpIFN5bmNo
cm9ub3VzIFdhbnRzQ29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA2ZGEwYmZiOGFhYjc5MDBkMTcwNWE0NzVhNzZhNzdh
MjFkODk4NWM5Li4xNGZiZTk1YTMzNWU2NjYwZGQ4ZjA4YjA0MTVlMTZlNDlmNjBjYzE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaApAQCAt
MTI2LDYgKzEyNiwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJEYXRhTGlzdFN1Z2dlc3Rp
b25zRHJvcGRvd24+IGNyZWF0ZURhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bihXZWJQYWdlUHJv
eHkmKSBmaW5hbDsKICNlbmRpZgogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisg
ICAgV2ViQ29yZTo6RGF0YU93bmVyVHlwZSBkYXRhT3duZXJGb3JQYXN0ZWJvYXJkKFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKICNpZiBFTkFCTEUoREFURV9B
TkRfVElNRV9JTlBVVF9UWVBFUykKICAgICBSZWZQdHI8V2ViRGF0ZVRpbWVQaWNrZXI+IGNyZWF0
ZURhdGVUaW1lUGlja2VyKFdlYlBhZ2VQcm94eSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggMDBjZGYx
M2JhOTJiZDA2YzBjMjkxNzVmNDFjMmNkNjFjOTU1ZTEzMS4uYjlkODgzNWNkZWY2YWQ4Nzc4NzQ0
YzY2NGIwMmQ2ODNhMjdiYzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNDU5LDYgKzQ1OSwxNSBAQCB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkb25lRGVmZXJyaW5nVG91Y2hFbmQoYm9vbCBwcmV2ZW50TmF0aXZlR2VzdHVyZXMp
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIAorI2lmIEhBVkUoUEFTVEVC
T0FSRF9EQVRBX09XTkVSKQorCitXZWJDb3JlOjpEYXRhT3duZXJUeXBlIFBhZ2VDbGllbnRJbXBs
OjpkYXRhT3duZXJGb3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQgaW50ZW50KSBj
b25zdAoreworICAgIHJldHVybiBbbV9jb250ZW50VmlldyBfZGF0YU93bmVyRm9yUGFzdGVib2Fy
ZDppbnRlbnRdOworfQorCisjZW5kaWYKKwogUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKIHsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCAwMGI3ODdlM2U4MDQxYmM1MWYyNGU1OTVj
YTA2NzRiNWY5YWEwMzI1Li5hNWEyOWYxYzI5NmJmNGFlNTgzOTdlMjY4Yjg3MWNmZDEzZGI3M2Vl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW1wb3J0ICJGcmFtZUluZm9EYXRh
LmgiCiAjaW1wb3J0ICJHZXN0dXJlVHlwZXMuaCIKICNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmgiCisjaW1wb3J0ICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCiAj
aW1wb3J0ICJTeW50aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRyYW5zYWN0aW9uSUQuaCIKQEAgLTU3LDYgKzU4
LDcgQEAKICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0
eVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Rh
dGFPd25lclR5cGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL01lZGlhQ29udHJvbHNDb250ZXh0TWVudUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUv
UG9pbnRlcklELmg+CkBAIC03MDAsNiArNzAyLDEwIEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05U
RU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJRVcp
CiAtIChCT09MKV9mb3JtQ29udHJvbFJlZnJlc2hFbmFibGVkOwogI2VuZGlmCiAKKyNpZiBIQVZF
KFBBU1RFQk9BUkRfREFUQV9PV05FUikKKy0gKFdlYkNvcmU6OkRhdGFPd25lclR5cGUpX2RhdGFP
d25lckZvclBhc3RlYm9hcmQ6KFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVudClpbnRlbnQ7
CisjZW5kaWYKKwogQGVuZAogCiBAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLVGVzdGluZykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCmluZGV4IDViNGI2NWNiNDBhNGQyYWViMjViOTZkNmE3OWE5Zjc1ZjFiMDc1
MDUuLjg5YTdiODdkNDE2ZDhmN2IxOWI2ODQxM2YyNTkwMWJkOGQ0ODU2YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQpAQCAtNzQ2OCw2ICs3NDY4LDM4IEBAIC0gKEJPT0wpX3Nob3VsZFVzZUxlZ2FjeVNlbGVj
dFBvcG92ZXJEaXNtaXNzYWxCZWhhdmlvcgogICAgIHJldHVybiBXZWJDb3JlOjpJT1NBcHBsaWNh
dGlvbjo6aXNEYXRhQWN0aXZhdGlvbigpOwogfQogCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFf
T1dORVIpCisKK3N0YXRpYyBXZWJDb3JlOjpEYXRhT3duZXJUeXBlIGNvcmVEYXRhT3duZXJUeXBl
KF9VSURhdGFPd25lciBwbGF0Zm9ybVR5cGUpCit7CisgICAgc3dpdGNoIChwbGF0Zm9ybVR5cGUp
IHsKKyAgICBjYXNlIF9VSURhdGFPd25lclVzZXI6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpE
YXRhT3duZXJUeXBlOjpVc2VyOworICAgIGNhc2UgX1VJRGF0YU93bmVyRW50ZXJwcmlzZToKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFPd25lclR5cGU6OkVudGVycHJpc2U7CisgICAgY2Fz
ZSBfVUlEYXRhT3duZXJTaGFyZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJU
eXBlOjpTaGFyZWQ7CisgICAgY2FzZSBfVUlEYXRhT3duZXJVbmRlZmluZWQ6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVbmRlZmluZWQ7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVbmRl
ZmluZWQ7Cit9CisKKy0gKFdlYkNvcmU6OkRhdGFPd25lclR5cGUpX2RhdGFPd25lckZvclBhc3Rl
Ym9hcmQ6KFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVudClpbnRlbnQKK3sKKyAgICBpZiAo
aW50ZW50ID09IFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCkKKyAgICAgICAg
cmV0dXJuIGNvcmVEYXRhT3duZXJUeXBlKHNlbGYuX2RhdGFPd25lckZvclBhc3RlKTsKKworICAg
IGlmIChpbnRlbnQgPT0gV2ViS2l0OjpQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpXcml0ZSkKKyAg
ICAgICAgcmV0dXJuIGNvcmVEYXRhT3duZXJUeXBlKHNlbGYuX2RhdGFPd25lckZvckNvcHkpOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFPd25l
clR5cGU6OlVuZGVmaW5lZDsKK30KKworI2VuZGlmIC8vIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09X
TkVSKQorCiAtIChSZXRhaW5QdHI8VUlWaWV3PilfY3JlYXRlUHJldmlld0NvbnRhaW5lcldpdGhM
YXllck5hbWU6KE5TU3RyaW5nICopbGF5ZXJOYW1lCiB7CiAgICAgYXV0byBjb250YWluZXIgPSBh
ZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDgzMmNkYTg4YjFiN2UzOGI1YWU5M2Y0
ZTQ4MTNiNDE5Y2VlNjQ3Li40MGU1OTg5MGU1YzJmZGFlZjIzYzYyNGM5ZmRlZDg2MThiYzNiMGMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE5OTUsNiArMTk5NSw3IEBACiAJCUY0NDI5MTk2MUZBNTk0MkEwMDJDQzkzRSAvKiBfV0tB
dHRhY2htZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0NDI5MTk1MUZBNTk0MkEwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50SW50ZXJu
YWwuaCAqLzsgfTsKIAkJRjQ0ODE1NjQyMzg3ODIwMDAwOTgyNjU3IC8qIFdLRGVmZXJyaW5nR2Vz
dHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0NDgxNTYyMjM4NzgyMDAwMDk4MjY1NyAvKiBXS0RlZmVycmluZ0dlc3R1cmVSZWNv
Z25pemVyLmggKi87IH07CiAJCUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OworCQlG
NDY2MEJDMjI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NjBCQzEyNURFRjA4
MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLzsgfTsKIAkJRjQ4RDJBODUy
MTU4M0E3RTAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQ
SS5oICovOyB9OwogCQlGNDk2QTQzMTFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmgg
Ki87IH07CiAJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRB
NkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi87IH07
CkBAIC01ODU3LDYgKzU4NTgsNyBAQAogCQlGNDQ4MTU2MzIzODc4MjAwMDA5ODI2NTcgLyogV0tE
ZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRGVm
ZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tEZWZlcnJpbmdHZXN0dXJl
UmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjAxRTlF
NzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjExRTlFNzUyRjAwMzhE
MTk2IC8qIFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRp
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NjYwQkMxMjVERUYwODEwMEU4
NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ4RDJBODQy
MTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBLaXRTUEku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3
IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8q
IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzUwLDYgKzk3NTIsNyBAQAog
CQkJCUJDNkVEQUE1MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50LmggKi8sCiAJCQkJMUFD
NzUzNzkxODNBOUZEQTAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwICovLAogCQkJCTFBQzc1
MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi8sCisJCQkJRjQ2NjBCQzEy
NURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCAqLywKIAkJCQk4MzJF
RDE4OTFFMkZFMTNCMDA2QkE2NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5j
cHAgKi8sCiAJCQkJODMyRUQxOEExRTJGRTEzQjAwNkJBNjRBIC8qIFBlckFjdGl2aXR5U3RhdGVD
UFVVc2FnZVNhbXBsZXIuaCAqLywKIAkJCQkzNzcxNkE1OTE5NUI5MTA1MDBFRThCMUIgLyogUHJv
Y2Vzc0Fzc2VydGlvbi5jcHAgKi8sCkBAIC0xMTg4OSw2ICsxMTg5Miw3IEBACiAJCQkJMEZDQjRF
NjIxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUM3NTM3QzE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4QjY2QjAxQkM0M0M4NjAwODJERjc3IC8qIFBhZ2VMb2FkU3RhdGVPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ2NjBCQzIyNURFRjA4MTAwRTg2NTk4IC8qIFBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzk4
QjUxMjIzMEExMEUwMDA3NjRCRCAvKiBQYXltZW50QXV0aG9yaXphdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUExNzk4QjNFMjIyRDk3QTIwMDA3NjRCRCAvKiBQYXltZW50QXV0
aG9yaXphdGlvblByZXNlbnRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTRhYmZhYzk4OTcyMzc5NWM0MzU1NTIw
NmI4MWZlOTQ0NWI1YjJkMi4uMzA2ZGYwNDlkZmZiMTFlMGUwYThjNGE3ZWU1YmQ5MGY1ZGE1ZTE3
MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDIxLTAyLTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiByZWFk
aW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgor
CisgICAgICAgIEFkZCBhIGNvdXBsZSBvZiBuZXcgQVBJIHRlc3RzIHRvIHZlcmlmeSB0aGF0IGAr
W1VJUGFzdGVib2FyZCBfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOl1gIGlzIGludm9rZWQgd2l0
aCB0aGUKKyAgICAgICAgZXhwZWN0ZWQgZGF0YSBvd25lciB0eXBlIHdoZW4gY29weWluZyBhbmQg
cGFzdGluZy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2Fy
ZFRlc3RzLm1tOgorICAgICAgICAoK1tUZXN0VUlQYXN0ZWJvYXJkIF9wZXJmb3JtQXNEYXRhT3du
ZXI6YmxvY2s6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBjb250ZW50
c0FzU3RyaW5nXSk6CisKKyAgICAgICAgQWRkaXRpb25hbGx5IGFkZCBhIGhlbHBlciBtZXRob2Qg
dG8gZ3JhYiBhIGBXS1dlYlZpZXdgJ3MgY29udGVudHMgYXMgYW4gYE5TU3RyaW5nYCwganVzdCBm
b3IgY29udmVuaWVuY2UuCisKIDIwMjEtMDItMTggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggbnVsbCBkZXJlZmVyZW5jaW5nIGluIFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza3NXaXRoRmluaXNoZWRSYW5n
ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2Fy
ZFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVz
dHMubW0KaW5kZXggZjUyMDk0MWZlODllNTc5NzFmYmM5OWE0Yjk1YzI1NTE3MTFlYjJiMS4uYWQw
MmY3ZTY0ZGUzNDM4N2I5NTNhNGQzYWQ2NTVjMTEwY2YzY2E2OCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMubW0KQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKKyNpbXBvcnQgIkNsYXNzTWV0aG9k
U3dpenpsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0
V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgpAQCAtNDgsNiArNDksMjYgQEAgc3Rh
dGljIHZvaWQgY2hlY2tKU09OV2l0aExvZ2dpbmcoTlNTdHJpbmcgKmpzb25TdHJpbmcsIE5TRGlj
dGlvbmFyeSAqZXhwZWN0ZWQpCiAgICAgICAgIE5TTG9nKEAiRXhwZWN0ZWQgSlNPTjogJUAgdG8g
bWF0Y2ggdmFsdWVzOiAlQCIsIGpzb25TdHJpbmcsIGV4cGVjdGVkKTsKIH0KIAorI2lmIEhBVkUo
UEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCitzdGF0aWMgX1VJRGF0YU93bmVyIGdMYXN0S25vd25E
YXRhT3duZXIgPSBfVUlEYXRhT3duZXJVbmRlZmluZWQ7CisKK0BpbnRlcmZhY2UgVGVzdFVJUGFz
dGVib2FyZCA6IE5TT2JqZWN0CisrICh2b2lkKV9wZXJmb3JtQXNEYXRhT3duZXI6KF9VSURhdGFP
d25lcilvd25lciBibG9jazooZGlzcGF0Y2hfYmxvY2tfdClibG9jazsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RVSVBhc3RlYm9hcmQKKworKyAodm9pZClfcGVyZm9ybUFzRGF0YU93bmVy
OihfVUlEYXRhT3duZXIpb3duZXIgYmxvY2s6KGRpc3BhdGNoX2Jsb2NrX3QpYmxvY2sKK3sKKyAg
ICBibG9jaygpOworICAgIGdMYXN0S25vd25EYXRhT3duZXIgPSBvd25lcjsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKQEAgLTM0OCw2ICszNjksNTAg
QEAgVEVTVChVSVBhc3RlYm9hcmRUZXN0cywgTWlzc2luZ1ByZWZlcnJlZFByZXNlbnRhdGlvblNp
emVGb3JJbWFnZSkKICAgICBFWFBFQ1RfV0tfU1RSRVEoIjAiLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykud2lkdGgi
XSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKCIxNzQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykuaGVpZ2h0Il0pOwog
fQorCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKK1RFU1QoVUlQYXN0ZWJvYXJk
VGVzdHMsIFBlcmZvcm1Bc0RhdGFPd25lcldoZW5Db3B5aW5nKQoreworICAgIGF1dG8gc3dpenps
ZXIgPSBDbGFzc01ldGhvZFN3aXp6bGVyIHsKKyAgICAgICAgVUlQYXN0ZWJvYXJkLmNsYXNzLAor
ICAgICAgICBAc2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazopLAorICAgICAgICBb
VGVzdFVJUGFzdGVib2FyZCBtZXRob2RGb3JTZWxlY3RvcjpAc2VsZWN0b3IoX3BlcmZvcm1Bc0Rh
dGFPd25lcjpibG9jazopXQorICAgIH07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFdlYlZp
ZXdGb3JQYXN0ZWJvYXJkVGVzdHMoQCJzaW1wbGUiKTsKKyAgICBbd2ViVmlldyBfc2V0RGF0YU93
bmVyRm9yQ29weTpfVUlEYXRhT3duZXJTaGFyZWRdOworICAgIFt3ZWJWaWV3IF9zZXREYXRhT3du
ZXJGb3JQYXN0ZTpfVUlEYXRhT3duZXJFbnRlcnByaXNlXTsKKyAgICBbd2ViVmlldyBzZWxlY3RB
bGw6bmlsXTsKKyAgICBbd2ViVmlldyBjb3B5Om5pbF07CisgICAgW3dlYlZpZXcgd2FpdEZvck5l
eHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgRVhQRUNUX0VRKGdMYXN0S25vd25EYXRhT3du
ZXIsIF9VSURhdGFPd25lclNoYXJlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKFVJUGFzdGVib2Fy
ZC5nZW5lcmFsUGFzdGVib2FyZC5zdHJpbmcsICJTaW1wbGUgSFRNTCBmaWxlLiIpOworfQorCitU
RVNUKFVJUGFzdGVib2FyZFRlc3RzLCBQZXJmb3JtQXNEYXRhT3duZXJXaGVuUGFzdGluZykKK3sK
KyAgICBhdXRvIHN3aXp6bGVyID0gQ2xhc3NNZXRob2RTd2l6emxlciB7CisgICAgICAgIFVJUGFz
dGVib2FyZC5jbGFzcywKKyAgICAgICAgQHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6Ymxv
Y2s6KSwKKyAgICAgICAgW1Rlc3RVSVBhc3RlYm9hcmQgbWV0aG9kRm9yU2VsZWN0b3I6QHNlbGVj
dG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KV0KKyAgICB9OworCisgICAgYXV0byB3ZWJW
aWV3ID0gc2V0VXBXZWJWaWV3Rm9yUGFzdGVib2FyZFRlc3RzKEAiYXV0b2ZvY3VzLWNvbnRlbnRl
ZGl0YWJsZSIpOworICAgIFt3ZWJWaWV3IF9zZXREYXRhT3duZXJGb3JDb3B5Ol9VSURhdGFPd25l
clNoYXJlZF07CisgICAgW3dlYlZpZXcgX3NldERhdGFPd25lckZvclBhc3RlOl9VSURhdGFPd25l
ckVudGVycHJpc2VdOworCisgICAgVUlQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJkLnN0cmlu
ZyA9IEAiRm9vIGJhciI7CisgICAgW3dlYlZpZXcgcGFzdGU6bmlsXTsKKyAgICBbd2ViVmlldyB3
YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBFWFBFQ1RfRVEoZ0xhc3RLbm93
bkRhdGFPd25lciwgX1VJRGF0YU93bmVyRW50ZXJwcmlzZSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KFt3ZWJWaWV3IGNvbnRlbnRzQXNTdHJpbmddLCAiRm9vIGJhclxuIik7Cit9CisKKyNlbmRpZiAv
LyBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3RXS1dlYlZpZXcuaAppbmRleCBjMWRjMDhjZmE0Y2YwNjEzMzUyNDU3YmYxMWE4ZWUzMDYx
MDdhZThhLi41ZWYzZjhlNGZhNmIwYzcxZmJkMWI1NDExOTZmNjkwMDJhZmRkZDA5IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaApAQCAtNDgsNiArNDgsNyBAQAog
QGVuZAogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoVGVzdFdlYktpdEFQSSkKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmNvbnRlbnRzQXNTdHJpbmc7CiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnRhZ3NJbkJvZHk7
CiAtICh2b2lkKWxvYWRUZXN0UGFnZU5hbWVkOihOU1N0cmluZyAqKXBhZ2VOYW1lOwogLSAodm9p
ZClzeW5jaHJvbm91c2x5R29CYWNrOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9j
b2NvYS9UZXN0V0tXZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tX
ZWJWaWV3Lm1tCmluZGV4IDhkOTY3MTYzYjQ2ZGE3OTE5OTM0ZTY0OTA2NDAzY2QyMzFiMmU2MGMu
LmU1NzI5ODIyNGExYjZiNWQ3ZDNjMjhjNTQ5ZmY4Y2U4YjY1MjIzOGMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KQEAgLTEzMCw2ICsxMzAsMTggQEAgLSAo
Qk9PTClfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5k
IGFyZ3VtZW50OihOU1N0cmluZwogICAgIHJldHVybiBzdWNjZXNzOwogfQogCistIChOU1N0cmlu
ZyAqKWNvbnRlbnRzQXNTdHJpbmcKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQ7CisgICAgW3NlbGYgX2dldENv
bnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqY29udGVudHMs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGNvbnRlbnRzOworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKK30KKwogLSAoTlNBcnJheTxOU1N0
cmluZyAqPiAqKXRhZ3NJbkJvZHkKIHsKICAgICByZXR1cm4gW3NlbGYgb2JqZWN0QnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAIkFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnKicpKS5tYXAoZSA9PiBlLnRhZ05hbWUpIl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421028</attachid>
            <date>2021-02-19 13:35:14 -0800</date>
            <delta_ts>2021-02-19 16:39:39 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-222072-20210219133513.patch</filename>
            <type>text/plain</type>
            <size>83218</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxZjI2OWZkYWFlOWIzYTczMTM1Y2U4
MTlhYWFmYjRhMWUxMDcwMzguLjRmNjNjYWI4ODQ3MWM2M2VhNjdmYjlhMTFkODI5ZGU5M2VjZDdk
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDItMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gU3BlY2lmeSBhIF9VSURhdGFPd25l
ciB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBmcm9tIHRoZSBzeXN0ZW0gcGFzdGVib2FyZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDcyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDIwODU3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBEZXZp
biBSb3Vzc28uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisKKyAgICAgICAgVHVy
biBzZXZlcmFsIGNvbXBpbGUtdGltZSBndWFyZHMgcHJldmlvdXNseSBpbiBgUGxhdGZvcm1QYXN0
ZWJvYXJkSU9TLm1tYCBpbnRvIGBIQVZFKClgLXMuCisKIDIwMjEtMDItMTggIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFNldCBFTkFCTEVfVlA5IHRvIDEgb24g
SU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOTU1NTkwZGEwNWNmNjFmOTZhMjhlMGFlMGM0ZGJhMzZhOWIwOTEx
OS4uNjcxYmEyNWM2NDY1NzU0ZmIzZGJlOGNkNDVmYzZkNTRlMjQ2ZDkzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMzIEBACisyMDIxLTAyLTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBfVUlEYXRhT3duZXIgd2hlbiBy
ZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3RlYm9hcmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjA3MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3Nv
LgorCisgICAgICAgIEFkZCBhIHN0YXRpYyBoZWxwZXIgbWV0aG9kIHRvIGBQbGF0Zm9ybVBhc3Rl
Ym9hcmRgLCBzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIGFyYml0cmFyeSBwYXN0ZWJvYXJkIG9wZXJh
dGlvbnMKKyAgICAgICAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZ2l2ZW4gYERhdGFPd25lclR5
cGVgLiBXZSB0aGVuIHVzZSB0aGlzIHN0YXRpYyBoZWxwZXIgdG8gd3JhcCBhbGwgcGFzdGVib2Fy
ZCBhY2Nlc3MKKyAgICAgICAgKHJlYWRpbmcsIHdyaXRpbmcsIGV0Yy4pIGluc2lkZSBjYWxscyB0
byBgK1tVSVBhc3RlYm9hcmQgX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazpdYCAtLSBzZWUgV2Vi
S2l0IENoYW5nZUxvZworICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgIFRlc3Rz
OiAgVUlQYXN0ZWJvYXJkVGVzdHMuUGVyZm9ybUFzRGF0YU93bmVyV2hlbkNvcHlpbmcKKyAgICAg
ICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5QZXJmb3JtQXNEYXRhT3duZXJXaGVuUGFzdGlu
ZworCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGF0YU93bmVyVHlwZS5oOiBB
ZGRlZC4KKworICAgICAgICBBZGQgYSBuZXcgZW51bSB0byByZXByZXNlbnQgYSBkYXRhIG93bmVy
IHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJXUEUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcik6CisKIDIwMjEtMDIt
MTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1
bWIgYW4gT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHRocm91Z2ggV2ViUGFzdGVib2FyZFByb3h5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwppbmRleCA4MDg0Nzk0MmZiNjNkMmQ1MWI3Yzk4ZTRkYmJkNzlmNDFj
MWM3NWU1Li4yYjFkYWRkNzljNWIwMDdlOTQ1YzM4ZjM2MDhmMDkwODM2YzBmMjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wMi0xOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBTcGVjaWZ5IGEgX1VJRGF0
YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZyb20gdGhlIHN5c3RlbSBwYXN0ZWJvYXJk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIwNzIK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjA4NTc2PgorCisgICAgICAgIFJldmlld2VkIGJ5
IERldmluIFJvdXNzby4KKworICAgICAgICBJbXBvcnQgYFVJUGFzdGVib2FyZF9Qcml2YXRlLmhg
IHNvIHRoYXQgYFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbWAgY2FuIHVzZSB0aGUgbmV3IFNQSS4K
KworICAgICAgICAqIHBhbC9zcGkvaW9zL1VJS2l0U1BJLmg6CisKIDIwMjEtMDItMTggIFBlciBB
cm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBPYnNlcnZlIHN5c3Rl
bSBzbGVlcCBldmVudHMgaW4gdGhlIFVJIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTQ1MmEwYWI1OTFi
MTIzZmRhMTEyZGUwNTA1YjZmOGI3MzUzMGE2MS4uNmNhOGQzNzk3ZTA2NWQwOWJiZTVmYmQyMjll
NWY3NWY0ODg2MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAyMS0wMi0xOSAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBTcGVj
aWZ5IGEgX1VJRGF0YU93bmVyIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZyb20gdGhlIHN5c3Rl
bSBwYXN0ZWJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjIwNzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjA4NTc2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IERldmluIFJvdXNzby4KKworICAgICAgICBBZGRzIFdlYktpdDIgc3VwcG9y
dCBmb3IgdGFnZ2luZyBgUGxhdGZvcm1QYXN0ZWJvYXJkYCB3aXRoIHRoZSBjb250ZW50IHZpZXcn
cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZS4gU2VlCisgICAgICAgIGJlbG93IGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisKKyAg
ICAgICAgSW1wb3J0IGBVSVBhc3RlYm9hcmRfUHJpdmF0ZS5oYCBzbyB0aGF0IHdlIGtub3cgYWJv
dXQgYCtfcGVyZm9ybUFzRGF0YU93bmVyOmJsb2NrOmAgaW4gdGhlIEFQSSB0ZXN0cy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVHlwZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRQYXRobmFtZXNG
b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJv
YXJkU3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRVUkwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmFkZFBhc3RlYm9hcmRUeXBlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVVJMKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQ29sb3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdG
b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWluc1VS
TFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyk6CisKKyAgICAgICAgTWFrZSBhbGwgb2YgdGhlc2Ug
bWV0aG9kcyB1c2UgYGRhdGFPd25lcigpYCB3aXRoIGVpdGhlciBhIGBSZWFkYCBvciBgV3JpdGVg
IHBhc3RlYm9hcmQgYWNjZXNzIGludGVudCB0byBncmFiIHRoZQorICAgICAgICBkYXRhIG93bmVy
IHR5cGUgZnJvbSB0aGUgdmlldyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIGlkZW50aWZpZXIs
IGFuZCB0aGVuIHdyYXAgYWxsIHBhc3RlYm9hcmQgYWNjZXNzIHdpdGhpbgorICAgICAgICBgUGxh
dGZvcm1QYXN0ZWJvYXJkYCdzIG5ldyBgcGVyZm9ybUFzRGF0YU93bmVyYCBzdGF0aWMgaGVscGVy
LgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFi
bGVGb3JMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQ
cm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZvKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVVJMRnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRC
dWZmZXJGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVJbWFnZVRvUGFzdGVi
b2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVTdHJpbmdU
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0
ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRQcm94eTo6ZGV0ZXJtaW5lRGF0YU93bmVyIGNvbnN0KToKKworICAgICAgICBVc2UgdGhlIGdp
dmVuIHBhZ2UgaWRlbnRpZmllciBpbiB2YXJpb3VzIHBhc3RlYm9hcmQgSVBDIGVuZHBvaW50cyBp
biBgV2ViUGFzdGVib2FyZFByb3h5YCB0byBhc2sgYFdlYlBhZ2VQcm94eWAKKyAgICAgICAgZm9y
IGl0cyBwYXN0ZWJvYXJkIGRhdGEgb3duZXIgdHlwZSB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBw
YXN0ZWJvYXJkIGRhdGEuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorCisg
ICAgICAgIEFkZCBhIGNsaWVudCBob29rIHRvIHJldHVybiBhIGBEYXRhT3duZXJUeXBlYCBlbnVt
LCBnaXZlbiBhIGBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50YCAtLSB0aGF0IGlzLCBjb3B5ICh3cml0
ZSkgb3IKKyAgICAgICAgcGFzdGUgKHJlYWQpLgorCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnQ6OmRhdGFPd25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YXN0ZWJvYXJkQWNjZXNzSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRhdGFPd25lckZv
clBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRhdGFP
d25lckZvclBhc3RlYm9hcmQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChjb3JlRGF0YU93bmVyVHlwZSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX2RhdGFPd25lckZvclBhc3RlYm9hcmQ6XSk6CisKKyAgICAgICAg
UmV0dXJuIGAtX2RhdGFPd25lckZvclBhc3RlYCBvciBgLV9kYXRhT3duZXJGb3JDb3B5YCAoZGVw
ZW5kaW5nIG9uIHRoZSBgUGFzdGVib2FyZEFjY2Vzc0ludGVudGApLgorCisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDItMTggIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1bWIgYW4gT3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHRocm91Z2ggV2ViUGFzdGVib2FyZFByb3h5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2
ZS5oCmluZGV4IDA0ODZmY2UyYzQxODZkMmQ4YmYyNTkxMjU1OTZlODYzOWNkMzQ1MTEuLmM3NDdk
NGUxMGYzNzM4YjVlYzA3OTJkYjcxMDQ4MjIwYzcyZWZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtSGF2ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5o
CkBAIC04ODgsMyArODg4LDE1IEBACiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMAogI2RlZmluZSBIQVZFX1NUQVRJQ19GT05UX1JF
R0lTVFJZIDEKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JN
KFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQorI2RlZmluZSBIQVZFX1BBU1RFQk9BUkRf
SVRFTV9QUk9WSURFUlMgMQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAh
UExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYpICYmICFQTEFURk9STShNQUND
QVRBTFlTVCkKKyNkZWZpbmUgSEFWRV9QQVNURUJPQVJEX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRf
VEVBTV9EQVRBIDEKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRG
T1JNKE1BQ0NBVEFMWVNUKQorI2RlZmluZSBIQVZFX05TVVJMX1RJVExFIDEKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKaW5kZXggN2FkODFkOTdhOWRmYWI4ZWRlYTFlZTAyZGM4ZWQyNDM4MjkxZTVk
NC4uZTY0NWYxMzVjN2JlZGI4MzVjNTkzMWEwMjJhNGIzNjEwNzI0MDZiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCkBAIC05OTksNiArOTk5LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL0N1cnNvci5oCiAgICAgcGxhdGZvcm0vRGF0YUxpc3RTdWdn
ZXN0aW9uUGlja2VyLmgKICAgICBwbGF0Zm9ybS9EYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmgK
KyAgICBwbGF0Zm9ybS9EYXRhT3duZXJUeXBlLmgKICAgICBwbGF0Zm9ybS9EYXRlQ29tcG9uZW50
cy5oCiAgICAgcGxhdGZvcm0vRGVjaW1hbC5oCiAgICAgcGxhdGZvcm0vRGVmZXJyYWJsZVRhc2su
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCBhMjA1Mjc5
MGU3OTdkNzc0MWVlZmE3NmQyNDUzYTdiNDQzODYxNTg5Li4zYmUwNzhjNzM2MDZiNWNkNDM2YTkw
ODYwOTRmOGU2NzY1ZTZkOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9pb3MvVUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvVUlL
aXRTUEkuaApAQCAtNDEsNiArNDEsNyBAQCBXVEZfRVhURVJOX0NfRU5ECiAjaW1wb3J0IDxVSUtp
dC9VSUZvY3VzUmluZ1N0eWxlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgog
I2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQ
YXN0ZWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuX1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlL
aXQvTlNJdGVtUHJvdmlkZXIrVUlLaXRBZGRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MjgyMGQ1ZjgyNmY0YTZm
ZDdlNmJlMDgwMTlkZTU3ZTRmN2ZhY2VlLi42OGJmMjMwOWJlYzJmNjlhMjcxNGY1ZDI1OWQ2NzM4
ODAxYzExZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01MjgxLDYgKzUyODEsNyBAQAogCQlGNDU3NzVDRTI0MTQzN0Q1MDAy
REYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
NjcyOTI4MUUwREU2ODUwMEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjcyOTI1MUUwREU1QUIw
MEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDZDNDQ3RTIzNDY1NDU0MDAzOUE3OUQgLyog
Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2QzQ0N0MyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuaCAqLzsgfTsKKwkJRjQ3Mzg0NTgyNURERTlGQjAw
NkRFOEREIC8qIERhdGFPd25lclR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0NzM4NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3
QTA5RDEyMEE5M0E5NzAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBBOTM5RjYwMDI0
MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxl
U2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
N0E2MzNEMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNjMzQzFGRjZGRDUw
MDA4MUIzQ0MgLyogUHJvbWlzZWRBdHRhY2htZW50SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjYyOCw2ICsxNjYyOSw3IEBACiAJCUY0
NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3
OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3Rl
Ym9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0
ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0NzM4
NDU3MjVEREU5RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERh
dGFPd25lclR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5Q0YyMEE5
MzlGNjAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
YWJsZWRBZGFwdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlE
NDIwQTlERDA0MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTg0LDYgKzI3NTg2LDcgQEAKIAkJ
CQlGNTg3ODY4NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJRTUyQ0Y1NEUy
MEEzNUEyODAwREFEQTI3IC8qIERhdGFMaXN0U3VnZ2VzdGlvblBpY2tlci5oICovLAogCQkJCUU1
MkNGNTRDMjBBMjY4QUMwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50LmggKi8s
CisJCQkJRjQ3Mzg0NTcyNURERTlGQjAwNkRFOEREIC8qIERhdGFPd25lclR5cGUuaCAqLywKIAkJ
CQlBNTczMkIwODEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovLAogCQkJ
CUE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICovLAogCQkJCTM3
QzczOEYxMUVEQkRFODcwMDNGMkIwQiAvKiBEYXRlVGltZUNob29zZXIuaCAqLywKQEAgLTMxODM4
LDYgKzMxODQxLDcgQEAKIAkJCQlFNTE3NjcwMzIwQjg4QzE0MDBENDExNjcgLyogRGF0YUxpc3RT
dWdnZXN0aW9uSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkNGNTRGMjBBMzVB
MjgwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25QaWNrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU1MkNGNTREMjBBMjY4QUMwMERBREEyNyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25zQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDczODQ1ODI1RERFOUZCMDA2REU4REQgLyogRGF0YU93
bmVyVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8q
IERhdGFzZXRET01TdHJpbmdNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNFMEE0NEVG
QzcwMEY5OTJFMCAvKiBEYXRhVHJhbnNmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTk5
MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFPd25lclR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDVhMWMzOThm
NzY3YWRkYWVjMWQwNWEzZjdiNDcxZTdlYTQ1ZmUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRGF0YU93bmVyVHlwZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNz
IERhdGFPd25lclR5cGUgOiB1aW50OF90IHsKKyAgICBVbmRlZmluZWQsCisgICAgVXNlciwKKyAg
ICBFbnRlcnByaXNlLAorICAgIFNoYXJlZCwKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKaW5kZXggNjRi
ODg1MjAwMGU1NWIwNDg4Y2FiMmRmNTMwOWMwMzA4ODlmZTJhMS4uNmFiNDFmYjdlMTI5ZjBiZTk1
Y2JkY2E4ZmU4MWNmYWNjY2MzYzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1QYXN0ZWJvYXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgUGxhdGZvcm1QYXN0ZWJvYXJkX2gKLSNkZWZpbmUgUGxhdGZvcm1QYXN0ZWJvYXJk
X2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGF0YU93bmVyVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgpAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZvPiBpbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4
KHNpemVfdCBpbmRleCwgaW50NjRfdCBjaGFuZ2VDb3VudCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
T3B0aW9uYWw8VmVjdG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+IGFsbFBhc3RlYm9hcmRJdGVtSW5m
byhpbnQ2NF90IGNoYW5nZUNvdW50KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHBlcmZvcm1Bc0RhdGFPd25lcihEYXRhT3duZXJUeXBlLCBGdW5jdGlvbjx2b2lkKCk+JiYpOwor
CiAgICAgZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VUeXBlcyA6IGJvb2wgeyBObywgWWVzIH07CiAg
ICAgc3RhdGljIFN0cmluZyBwbGF0Zm9ybVBhc3RlYm9hcmRUeXBlRm9yU2FmZVR5cGVGb3JET01U
b1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIGRvbVR5cGUsIEluY2x1ZGVJbWFnZVR5cGVzID0g
SW5jbHVkZUltYWdlVHlwZXM6Ok5vKTsKIApAQCAtMTI2LDYgKzEyOCw0IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIH07CiAKLX0KLQotI2VuZGlmIC8vICFQbGF0Zm9ybVBhc3RlYm9hcmRfaAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
bGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggZjlkOGQ5MmMxNmM3ZTY3YzkwNzY0MWExMzhi
ZTBmNWVmN2ZlOGI5OS4uZTc1NWNkMjI2YjRhZGVkYjIzOWFmNDU4YjYwYTRlMzFlMzEzYzRkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2Fy
ZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tCkBAIC04Niw2ICs4NiwzNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIHJldHVy
biBudWxscHRyOwogfQogCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93
bmVyKERhdGFPd25lclR5cGUgdHlwZSwgRnVuY3Rpb248dm9pZCgpPiYmIGFjdGlvbnMpCit7Cisj
aWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisgICAgYXV0byBkYXRhT3duZXIgPSBfVUlE
YXRhT3duZXJVbmRlZmluZWQ7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRhT3du
ZXJUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURhdGFPd25lclVuZGVm
aW5lZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhT3duZXJUeXBlOjpVc2VyOgorICAg
ICAgICBkYXRhT3duZXIgPSBfVUlEYXRhT3duZXJVc2VyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIERhdGFPd25lclR5cGU6OkVudGVycHJpc2U6CisgICAgICAgIGRhdGFPd25lciA9IF9VSURh
dGFPd25lckVudGVycHJpc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YU93bmVyVHlw
ZTo6U2hhcmVkOgorICAgICAgICBkYXRhT3duZXIgPSBfVUlEYXRhT3duZXJTaGFyZWQ7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIFtQQUw6OmdldFVJUGFzdGVib2FyZENsYXNzKCkgX3Bl
cmZvcm1Bc0RhdGFPd25lcjpkYXRhT3duZXIgYmxvY2s6XnsKKyAgICAgICAgYWN0aW9ucygpOwor
ICAgIH1dOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgYWN0aW9ucygpOwor
I2VuZGlmCit9CisKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNGb3JUeXBl
KFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikgY29uc3QKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpYndwZS9QbGF0Zm9ybVBhc3RlYm9hcmRMaWJXUEUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExp
YldQRS5jcHAKaW5kZXggM2RkNDhlOWYxOGYyNzExMGU4MTZlMjYyMDEwNWFmYjhmZWQ4ZDA4Mi4u
MzQxMTA4YzFmODA0NjJkMzM2ODU3OTI4ZmRhY2NjZGQxNjNmZjM2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExpYldQRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlid3BlL1BsYXRmb3JtUGFzdGVib2FyZExp
YldQRS5jcHAKQEAgLTQ3LDYgKzQ3LDExIEBAIFBsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZvcm1Q
YXN0ZWJvYXJkKCkKICAgICBBU1NFUlQobV9wYXN0ZWJvYXJkKTsKIH0KIAordm9pZCBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcihEYXRhT3duZXJUeXBlLCBGdW5jdGlvbjx2
b2lkKCk+JiYgYWN0aW9ucykKK3sKKyAgICBhY3Rpb25zKCk7Cit9CisKIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMpCiB7CiAgICAgc3RydWN0
IHdwZV9wYXN0ZWJvYXJkX3N0cmluZ192ZWN0b3IgcGFzdGVib2FyZFR5cGVzID0geyBudWxscHRy
LCAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbQppbmRleCA5ZTU5YzdhZTEzNzVmOWNlMzkyMTIyMzc5OTcwYjc4ZDM1ZjBm
YTY2Li42OWE4MzM2NzI0YjczMDQzZmJkMzVmNjYzZjg5MmQ2YjkwNDVhYzRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0K
QEAgLTUyLDYgKzUyLDExIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAg
IHJldHVybiBbKF9fYnJpZGdlIE5TU3RyaW5nICopY2ZTdHJpbmcuZ2V0KCkgbGVuZ3RoT2ZCeXRl
c1VzaW5nRW5jb2Rpbmc6TlNTdHJpbmcuZGVmYXVsdENTdHJpbmdFbmNvZGluZ107CiB9CiAKK3Zv
aWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoRGF0YU93bmVyVHlwZSwg
RnVuY3Rpb248dm9pZCgpPiYmIGFjdGlvbnMpCit7CisgICAgYWN0aW9ucygpOworfQorCiBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQogICAgIDogbV9wYXN0ZWJvYXJkKFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhO
YW1lOnBhc3RlYm9hcmROYW1lXSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmgKaW5kZXggZjg0YzUxZmEwNzc2M2IwZDljYjNhZWQ0MWU1NGJlNTRjMTJkZTk4NS4u
MWUxN2I4MWRiMjQ0NTdlNTU1MDgyYmNlNTY0M2Q5YjBkNTZkZjM2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSU1lbnVDb250cm9s
bGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJUGFzdGVib2FyZF9Qcml2YXRlLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxIb3N0Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBlcmlw
aGVyYWxIb3N0X1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJUGlja2VyQ29udGVudFZpZXdf
UHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFzdGVib2FyZFByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQppbmRleCBjMDc2ZDk0YjZlMjRiY2QyZDE5ZGI0NzU5
Y2QxOWJiYWYzYmFmYTg5Li5lODk3ODQ4NjhkOGUwNGM5N2IwOGI5YWM4Y2EwYzMwM2FhNGMxYmE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJk
UHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0
ZWJvYXJkUHJveHlDb2NvYS5tbQpAQCAtMjcsMTIgKzI3LDE0IEBACiAjaW1wb3J0ICJXZWJQYXN0
ZWJvYXJkUHJveHkuaCIKIAogI2ltcG9ydCAiQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiUGFzdGVi
b2FyZEFjY2Vzc0ludGVudC5oIgogI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRGF0YU93bmVyVHlwZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9h
cmRJdGVtSW5mby5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KQEAg
LTE0Miw5ICsxNDQsMTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRU
eXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICBpZiAoIWNhbkFj
Y2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcGFz
dGVib2FyZFR5cGVzOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0
VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBh
c3RlYm9hcmRUeXBlcykpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVy
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRl
bnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNE
YXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFzdGVi
b2FyZFR5cGVzOworICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdl
dFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUocGFzdGVib2FyZFR5cGVzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsCkBAIC0xNTYsMjMgKzE2
MywyNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0Zv
clR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgIGlmICghY2FuQWNjZXNzUGFzdGVi
b2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhuYW1l
czsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uczsK
LSAgICBpZiAod2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkgewotICAg
ICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdldFBhdGhuYW1lc0ZvclR5
cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRl
cm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRh
dGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pKTsKIAorICAgIFBsYXRmb3JtUGFz
dGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBhdGhuYW1lczsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkgc2FuZGJveEV4dGVuc2lvbnM7CisgICAgICAgIGlmICh3ZWJQcm9jZXNzUHJveHlGb3JD
b25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7CisgICAgICAgICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLmdldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJk
VHlwZSk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAvLyBPbiBpT1MsIGZpbGVzIGFyZSBj
b3BpZWQgaW50byBhcHAncyBjb250YWluZXIgdXBvbiBwYXN0ZS4KLSAgICAgICAgc2FuZGJveEV4
dGVuc2lvbnMuYWxsb2NhdGUocGF0aG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvJiBm
aWxlbmFtZSA9IHBhdGhuYW1lc1tpXTsKLSAgICAgICAgICAgIGlmICghW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVuYW1lXSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShmaWxlbmFtZSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHNhbmRib3hFeHRl
bnNpb25zW2ldKTsKLSAgICAgICAgfQorICAgICAgICAgICAgLy8gT24gaU9TLCBmaWxlcyBhcmUg
Y29waWVkIGludG8gYXBwJ3MgY29udGFpbmVyIHVwb24gcGFzdGUuCisgICAgICAgICAgICBzYW5k
Ym94RXh0ZW5zaW9ucy5hbGxvY2F0ZShwYXRobmFtZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZmlsZW5hbWUgPSBwYXRobmFtZXNbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZW5h
bWVdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmlsZW5hbWUsIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgICB9CiAjZW5k
aWYKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShwYXRobmFtZXMpLCBXVEZN
b3ZlKHNhbmRib3hFeHRlbnNpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShwYXRobmFtZXMpLCBXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb25zKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5n
Rm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVu
dGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTgyLDcgKzE5MywxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LAogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNv
bXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5n
Rm9yVHlwZShwYXN0ZWJvYXJkVHlwZSkpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5l
RGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3du
ZXIsIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpw
ZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JUeXBlKHBh
c3RlYm9hcmRUeXBlKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpn
ZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyLDcgKzIwOCwx
MiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbgogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2Fy
ZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsK
KyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBN
RVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7IH0p
KTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3du
ZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIwMiwyNSArMjIzLDM3IEBAIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOwogCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAg
dWludDY0X3Qgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4g
c2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplKTsKLSAgICBp
ZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7Ci0gICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRh
dGEoKSwgc2l6ZSk7Ci0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICgh
c2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlBy
b3RlY3Rpb246OlJlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZN
b3ZlKGhhbmRsZSksIHNpemUgfSk7CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRh
T3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vz
c0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZv
cm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIGJ1ZmZlciA9IFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJk
VHlwZSk7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXItPnNpemUoKTsK
KyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9
IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5
QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAg
ICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIHNp
emUpOworICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGlmICgh
c2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlBy
b3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSB7IFdURk1vdmUoaGFuZGxlKSwgc2l6ZSB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisg
ICAgYXV0byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVi
b2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVT
U0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwor
CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwg
WyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBw
YWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6Q29sb3ImJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0yMjgsNyArMjYxLDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb2xvcigp
KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9uLCBw
YXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7
IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRh
T3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuY29sb3IoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIzNiw3ICsyNzQsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6Omdl
dFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHIKICAg
ICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0
aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybCgpLnN0cmlu
ZygpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsK
KyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxl
cih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpk
YXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsKCkuc3RyaW5nKCkpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6YWRkUGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTI0NiwxMCArMjg5LDE1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjphZGRQYXN0ZWJvYXJk
VHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgZm9yIChhdXRv
JiB0eXBlIDogcGFzdGVib2FyZFR5cGVzKQogICAgICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJ
T04oIXR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICBhdXRvIHBy
ZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNo
YW5nZUNvdW50KCk7Ci0gICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuYWRkVHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLSAgICBkaWRNb2Rp
ZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlv
dXNDaGFuZ2VDb3VudCwgcHJldmlvdXNDaGFuZ2VDb3VudCk7Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIobmV3Q2hhbmdlQ291bnQpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93
bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBj
b21wbGV0aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1B
c0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdl
Q291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7
CisgICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgICAgIGRpZE1vZGlmeUNv
bnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0No
YW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5l
d0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNl
dFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNTksMzkgKzMwNyw1NCBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgUwogICAgIGZvciAoYXV0byYgdHlwZSA6IHBhc3RlYm9hcmRUeXBl
cykKICAgICAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCF0eXBlLmlzRW1wdHkoKSwgY29t
cGxldGlvbkhhbmRsZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8g
bmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFR5
cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQo
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5n
ZUNvdW50KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7CisgICAgYXV0
byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0Vf
Q0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKworICAg
IFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7
CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgYXV0byBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2Fy
ZFR5cGVzKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCks
IGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIGlmIChhdXRvKiB3ZWJQcm9jZXNzUHJveHkg
PSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0gICAgICAgIGlm
ICghcGFzdGVib2FyZFVSTC51cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKDApOworICAgIGF1dG8qIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JD
b25uZWN0aW9uKGNvbm5lY3Rpb24pOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihwcm9j
ZXNzLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKLSAgICAgICAgaWYgKCF3ZWJQcm9jZXNzUHJv
eHktPmNoZWNrVVJMUmVjZWl2ZWRGcm9tV2ViUHJvY2VzcyhwYXN0ZWJvYXJkVVJMLnVybC5zdHJp
bmcoKSwgQ2hlY2tCYWNrRm9yd2FyZExpc3Q6Ok5vKSkKLSAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcigwKTsKKyAgICBpZiAoIXBhc3RlYm9hcmRVUkwudXJsLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwogCisgICAgaWYgKCFwcm9jZXNz
LT5jaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nlc3MocGFzdGVib2FyZFVSTC51cmwuc3RyaW5n
KCksIENoZWNrQmFja0ZvcndhcmRMaXN0OjpObykpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcigwKTsKKworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6
OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0
aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFP
d25lcigqZGF0YU93bmVyLCBbJl0gewogICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQg
PSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CiAgICAg
ICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLnNldFVSTChwYXN0ZWJvYXJkVVJMKTsKICAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBh
c3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQs
IG5ld0NoYW5nZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG5ld0No
YW5nZUNvdW50KTsKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoMCk7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiBjb2xvciwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NI
RUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIoMCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIGF1dG8gbmV3Q2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldENvbG9yKGNvbG9yKTsK
LSAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJk
TmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRp
b25IYW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWlu
ZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJk
QWNjZXNzSW50ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFP
d25lciwgY29tcGxldGlvbkhhbmRsZXIoMCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpw
ZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91
c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VD
b3VudCgpOworICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIGRpZE1vZGlmeUNvbnRl
bnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5n
ZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5ld0No
YW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yOTks
MTAgKzM2MiwxNSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFN0cmlu
Z0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAgIE1FU1NBR0VfQ0hFQ0tf
Q09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigw
KSk7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5
KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAg
ICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS5zZXRTdHJpbmdGb3JUeXBlKHN0cmluZywgcGFzdGVib2FyZFR5cGUpOwotICAgIGRpZE1vZGlm
eUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91
c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobmV3
Q2hhbmdlQ291bnQpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNv
bm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6
OldyaXRlKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0
aW9uSGFuZGxlcigwKSk7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFP
d25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291bnQg
PSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CisgICAg
ICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLnNldFN0cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgICAgIGRp
ZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
cmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3VudCk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTMxMCw3ICszNzgsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlvbiYg
Y28KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNv
bnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKCkpOworICAgIGF1dG8gZGF0YU93bmVy
ID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQs
IFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExF
VElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKSk7CisKKyAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNv
bnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKCkpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcm
JiB1cmwsIFN0cmluZyYmIHRpdGxlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTMxOCw5ICsz
OTEsMTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVybFN0cmluZ1N1aXRhYmxlRm9yTG9h
ZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24KICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3Rl
Ym9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAotICAgIFN0cmluZyB0aXRsZTsKLSAgICBhdXRv
IHVybFN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsU3RyaW5n
U3VpdGFibGVGb3JMb2FkaW5nKHRpdGxlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHVybFN0cmluZyksIFdURk1vdmUodGl0bGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVy
bWluZURhdGFPd25lcihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50OjpSZWFkKTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0
YU93bmVyLCBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgU3Ry
aW5nIHRpdGxlOworICAgICAgICBhdXRvIHVybFN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkudXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKHRpdGxlKTsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh1cmxTdHJpbmcpLCBXVEZNb3ZlKHRpdGxlKSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQnVm
ZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlJiBpcGNIYW5kbGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0zMjgsMjAgKzQwNiwyNSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAgIE1FU1NB
R0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9u
SGFuZGxlcigwKSk7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlw
ZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIGF1dG8gcHJldmlvdXND
aGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291
bnQoKTsKLSAgICBpZiAoaXBjSGFuZGxlLmhhbmRsZS5pc051bGwoKSkgewotICAgICAgICBhdXRv
IG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRC
dWZmZXJGb3JUeXBlKG51bGxwdHIsIHBhc3RlYm9hcmRUeXBlKTsKLSAgICAgICAgZGlkTW9kaWZ5
Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3Vz
Q2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG5ld0NoYW5nZUNvdW50KTsKLSAgICB9CisgICAgYXV0byBkYXRhT3duZXIgPSBkZXRl
cm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJRCwgUGFzdGVi
b2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihk
YXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIAotICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6bWFwKGlwY0hhbmRsZS5oYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIGlmICghc2hhcmVk
TWVtb3J5QnVmZmVyKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7Ci0gICAg
YXV0byBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyICo+KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
cGNIYW5kbGUuZGF0YVNpemUpKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlci5wdHIoKSwg
cGFzdGVib2FyZFR5cGUpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5l
Y3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBuZXdDaGFuZ2VDb3Vu
dCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIFBsYXRmb3Jt
UGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAg
IGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgaWYgKGlwY0hhbmRsZS5oYW5kbGUuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUobnVsbHB0ciwgcGFzdGVib2FyZFR5
cGUpOworICAgICAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlv
biwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsK
KyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuZXdDaGFuZ2VDb3VudCk7Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9y
eTo6bWFwKGlwY0hhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOworICAgICAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHNoYXJlZE1lbW9yeUJ1ZmZl
ci0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpcGNIYW5kbGUuZGF0YVNpemUpKTsKKyAg
ICAgICAgYXV0byBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIucHRyKCksIHBhc3RlYm9hcmRUeXBlKTsKKyAg
ICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0NoYW5nZUNvdW50KTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMzQ5LDcgKzQzMiwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0
TnVtYmVyT2ZGaWxlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cgogICAg
IGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwogCi0gICAgY29tcGxldGlv
bkhhbmRsZXIoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5udW1iZXJPZkZpbGVz
KCkpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24s
IHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOwor
ICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVy
KDApKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRh
T3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkubnVtYmVyT2ZGaWxlcygpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW4sIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0zNTksMTcgKzQ0NywyNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6dHlwZXNTYWZlRm9y
RE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgIGlmICghY2Fu
QWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnR5cGVzU2FmZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKG9yaWdpbikpOworICAgIGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93
bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3Jt
QXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS50eXBlc1NhZmVGb3JET01Ub1JlYWRB
bmRXcml0ZShvcmlnaW4pKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OndyaXRlQ3VzdG9tRGF0YShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFZlY3Rv
cjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mIGRhdGEsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19D
T01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDAp
KTsKIAotICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0g
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShkYXRhKTsKLSAgICBkaWRN
b2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJl
dmlvdXNDaGFuZ2VDb3VudCwgbmV3Q2hhbmdlQ291bnQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVy
KG5ld0NoYW5nZUNvdW50KTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25l
cihjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50OjpXcml0ZSk7CisgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29t
cGxldGlvbkhhbmRsZXIoMCkpOworCisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNE
YXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAgICAgICAgYXV0byBwcmV2aW91c0NoYW5nZUNv
dW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwor
ICAgICAgICBhdXRvIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS53cml0ZShkYXRhKTsKKyAgICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9h
cmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIG5ld0No
YW5nZUNvdW50KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmV3Q2hhbmdlQ291bnQpOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1J
bmZvKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgaW50NjRfdCBjaGFuZ2VDb3VudCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxWZWN0b3I8UGFzdGVib2FyZEl0ZW1J
bmZvPj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zNzcsNyArNDc1LDEyIEBAIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjphbGxQYXN0ZWJvYXJkSXRlbUluZm8oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29u
bmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuYWxsUGFzdGVib2FyZEl0ZW1JbmZvKGNoYW5nZUNvdW50KSk7CisgICAgYXV0
byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9D
SEVDS19DT01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CisKKyAg
ICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0RhdGFPd25lcigqZGF0YU93bmVyLCBbJl0g
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhjaGFuZ2VDb3VudCkpOworICAgIH0pOwogfQog
CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgaW50NjRfdCBjaGFuZ2VDb3VudCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxQYXN0ZWJvYXJkSXRlbUlu
Zm8+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMzg1LDcgKzQ4OCwxMiBAQCB2b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVj
dGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
V1RGOjpudWxsb3B0KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuaW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleChpbmRleCwgY2hhbmdl
Q291bnQpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0
aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFk
KTsKKyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQpKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFz
RGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuaW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRl
eChpbmRleCwgY2hhbmdlQ291bnQpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0zOTMsNyArNTAxLDEyIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQ
YXN0ZWJvYXJkSXRlbXNDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvCiAgICAg
aWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUp
KQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7CiAKLSAgICBjb21wbGV0aW9u
SGFuZGxlcihQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvdW50KCkpOworICAg
IGF1dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NB
R0VfQ0hFQ0tfQ09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKKwor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsm
XSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuY291bnQoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBz
aXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNDAzLDcg
KzUxNiwxMiBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgcwogICAgIGlmICghY2FuQWNjZXNzUGFz
dGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZFN0cmluZyhpbmRleCwgcGFzdGVib2FyZFR5
cGUpKTsKKyAgICBhdXRvIGRhdGFPd25lciA9IGRldGVybWluZURhdGFPd25lcihjb25uZWN0aW9u
LCBwYXN0ZWJvYXJkTmFtZSwgcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50OjpSZWFkKTsK
KyAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oZGF0YU93bmVyLCBjb21wbGV0aW9uSGFuZGxl
cih7IH0pKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpk
YXRhT3duZXIsIFsmXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZFN0cmluZyhpbmRleCwgcGFzdGVib2FyZFR5cGUpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRVUkxGcm9tUGFzdGVi
b2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJiB1cmwsIFN0cmluZyYmIHRpdGxlKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTQxMSw5ICs1MjksMTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OnJlYWRVUkxGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNp
emUKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3RlYm9h
cmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgeyB9KTsKIAot
ICAgIFN0cmluZyB0aXRsZTsKLSAgICBTdHJpbmcgdXJsID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5yZWFkVVJMKGluZGV4LCB0aXRsZSkuc3RyaW5nKCk7Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZSh1cmwpLCBXVEZNb3ZlKHRpdGxlKSk7CisgICAgYXV0byBkYXRh
T3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBh
Z2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19D
T01QTEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pKTsKKworICAg
IFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7
CisgICAgICAgIFN0cmluZyB0aXRsZTsKKyAgICAgICAgU3RyaW5nIHVybCA9IFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZFVSTChpbmRleCwgdGl0bGUpLnN0cmluZygpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHVybCksIFdURk1vdmUodGl0bGUpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXJGcm9tUGFz
dGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0
aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTQyMywyMCAr
NTQ2LDI1IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9h
cmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzCiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0
ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5yZWFkQnVmZmVyKGluZGV4LCBw
YXN0ZWJvYXJkVHlwZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcih7IH0pOwotICAgIHVpbnQ2NF90IHNpemUgPSBidWZmZXItPnNpemUoKTsKLSAg
ICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAg
IFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6
YWxsb2NhdGUoc2l6ZSk7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIHNpemUpOwotICAgIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGhhbmRsZTsKLSAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCi0gICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBzaXplIH0pOworICAgIGF1dG8gZGF0
YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBw
YWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OlJlYWQpOworICAgIE1FU1NBR0VfQ0hFQ0tf
Q09NUExFVElPTihkYXRhT3duZXIsIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOworCisgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkOjpwZXJmb3JtQXNEYXRhT3duZXIoKmRhdGFPd25lciwgWyZdIHsKKyAg
ICAgICAgYXV0byBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnJl
YWRCdWZmZXIoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgdWludDY0
X3Qgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplKTsK
KyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7CisgICAgICAgIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRs
ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBzaXplIH0pOwor
ICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZl
Rm9yRE9NVG9SZWFkRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTQ0NCw3ICs1NzIsMTIgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUoSVBDOjpDb25uZWN0aW9uJgog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAotICAgIGNv
bXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY29udGFp
bnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZSh0eXBlKSk7CisgICAgYXV0byBkYXRhT3du
ZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJ
RCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6UmVhZCk7CisgICAgTUVTU0FHRV9DSEVDS19DT01Q
TEVUSU9OKGRhdGFPd25lciwgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpKTsKKworICAgIFBsYXRm
b3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZSh0eXBlKSk7CisgICAgfSk7CiB9
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDUzLDMzICs1ODYsNDggQEAgdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlVVJMVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QKIHsKICAgICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5p
c0VtcHR5KCkpOwogCi0gICAgYXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUodXJsKTsKLSAgICBkaWRNb2RpZnlDb250ZW50c09m
UGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3Vu
dCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKLSAg
ICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0
aW9uKSkKLSAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3Jp
dGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIGF1
dG8gZGF0YU93bmVyID0gZGV0ZXJtaW5lRGF0YU93bmVyKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lLCBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQ6OldyaXRlKTsKKyAgICBNRVNTQUdF
X0NIRUNLKGRhdGFPd25lcik7CisKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnBlcmZvcm1Bc0Rh
dGFPd25lcigqZGF0YU93bmVyLCBbJl0geworICAgICAgICBhdXRvIHByZXZpb3VzQ2hhbmdlQ291
bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7Cisg
ICAgICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkud3JpdGUodXJsKTsKKyAg
ICAgICAgZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUsIHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuY2hhbmdlQ291bnQoKSk7CisgICAgICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9j
ZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQorICAgICAgICAgICAgcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25v
dXNseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9h
cmRQcm94eTo6d3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKIAot
ICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLndyaXRlKGNvbnRlbnQpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJk
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOwotICAgIGlmIChhdXRv
IHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQotICAg
ICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVi
b2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgYXV0byBkYXRhT3du
ZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJ
RCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0soZGF0
YU93bmVyKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpk
YXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShjb250ZW50KTsKKyAgICAgICAg
ZGlkTW9kaWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUs
IHByZXZpb3VzQ2hhbmdlQ291bnQsIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
Y2hhbmdlQ291bnQoKSk7CisgICAgICAgIGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJv
eHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQorICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkV3JpdGVUb1Bhc3RlYm9hcmRBc3luY2hyb25vdXNseShw
YXN0ZWJvYXJkTmFtZSksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQogewog
ICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBhdXRv
IHByZXZpb3VzQ2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
LmNoYW5nZUNvdW50KCk7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53
cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJk
KGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOwotICAgIGlmIChhdXRv
IHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQotICAg
ICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVi
b2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgYXV0byBkYXRhT3du
ZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUsIHBhZ2VJ
RCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0VfQ0hFQ0soZGF0
YU93bmVyKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0YU93bmVyKCpk
YXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3VudCA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAgICAgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwor
ICAgICAgICBkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChjb25uZWN0aW9uLCBwYXN0ZWJv
YXJkTmFtZSwgcHJldmlvdXNDaGFuZ2VDb3VudCwgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5jaGFuZ2VDb3VudCgpKTsKKyAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9IHdlYlBy
b2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICBwcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0ZVRvUGFzdGVib2FyZEFzeW5jaHJv
bm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCkKQEAgLTQ4NywyMCArNjM1LDUzIEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0
ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvCiAgICAg
TUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKICAgICBNRVNTQUdFX0NI
RUNLKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCkgfHwgdGV4dC5pc0VtcHR5KCkpOwogCi0gICAg
YXV0byBwcmV2aW91c0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5jaGFuZ2VDb3VudCgpOwotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkud3JpdGUocGFzdGVib2FyZFR5cGUsIHRleHQpOwotICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQ
YXN0ZWJvYXJkKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50
LCBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOwotICAg
IGlmIChhdXRvIHByb2Nlc3MgPSB3ZWJQcm9jZXNzUHJveHlGb3JDb25uZWN0aW9uKGNvbm5lY3Rp
b24pKQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRXcml0
ZVRvUGFzdGVib2FyZEFzeW5jaHJvbm91c2x5KHBhc3RlYm9hcmROYW1lKSwgMCk7CisgICAgYXV0
byBkYXRhT3duZXIgPSBkZXRlcm1pbmVEYXRhT3duZXIoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUsIHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudDo6V3JpdGUpOworICAgIE1FU1NBR0Vf
Q0hFQ0soZGF0YU93bmVyKTsKKworICAgIFBsYXRmb3JtUGFzdGVib2FyZDo6cGVyZm9ybUFzRGF0
YU93bmVyKCpkYXRhT3duZXIsIFsmXSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKKyAg
ICAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZShwYXN0ZWJvYXJk
VHlwZSwgdGV4dCk7CisgICAgICAgIGRpZE1vZGlmeUNvbnRlbnRzT2ZQYXN0ZWJvYXJkKGNvbm5l
Y3Rpb24sIHBhc3RlYm9hcmROYW1lLCBwcmV2aW91c0NoYW5nZUNvdW50LCBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCkpOworICAgICAgICBpZiAoYXV0byBw
cm9jZXNzID0gd2ViUHJvY2Vzc1Byb3h5Rm9yQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKKyAgICAg
ICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZFdyaXRlVG9QYXN0
ZWJvYXJkQXN5bmNocm9ub3VzbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICB9KTsKIH0KIAot
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaWRlbnRpZmllcnMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpCit2b2lkIFdlYlBhc3RlYm9h
cmRQcm94eTo6dXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBpZGVudGlmaWVycywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+KQogewogICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkudXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzKGlkZW50aWZpZXJzKTsKIH0KIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKK09wdGlvbmFsPERhdGFPd25lclR5cGU+IFdl
YlBhc3RlYm9hcmRQcm94eTo6ZGV0ZXJtaW5lRGF0YU93bmVyKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50
aWZpZXI+IHBhZ2VJRCwgUGFzdGVib2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0Cit7Cisg
ICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRSghcGFzdGVib2FyZE5hbWUuaXNFbXB0
eSgpLCBXVEY6Om51bGxvcHQpOworCisgICAgYXV0byogcHJvY2VzcyA9IHdlYlByb2Nlc3NQcm94
eUZvckNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVS
Tl9WQUxVRShwcm9jZXNzLCBXVEY6Om51bGxvcHQpOworCisgICAgaWYgKCFwYWdlSUQpCisgICAg
ICAgIHJldHVybiBEYXRhT3duZXJUeXBlOjpVbmRlZmluZWQ7CisKKyNpZiBIQVZFKFBBU1RFQk9B
UkRfREFUQV9PV05FUikKKyAgICBPcHRpb25hbDxEYXRhT3duZXJUeXBlPiByZXN1bHQ7CisgICAg
Zm9yIChhdXRvKiBwYWdlIDogcHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICBpZiAocGFnZS0+
d2ViUGFnZUlEKCkgPT0gKnBhZ2VJRCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcGFnZS0+ZGF0
YU93bmVyRm9yUGFzdGVib2FyZChpbnRlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gSWYgdGhpcyBtZXNzYWdlIGNoZWNrIGlzIGhpdCwgdGhlbiB0aGUg
aW5jb21pbmcgd2ViIHBhZ2UgSUQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBwYWdlCisgICAg
Ly8gY3VycmVudGx5IGtub3duIHRvIHRoZSBVSSBwcm9jZXNzLgorICAgIE1FU1NBR0VfQ0hFQ0tf
V0lUSF9SRVRVUk5fVkFMVUUocmVzdWx0Lmhhc1ZhbHVlKCksIFdURjo6bnVsbG9wdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGludGVudCk7CisgICAgcmV0
dXJuIERhdGFPd25lclR5cGU6OlVuZGVmaW5lZDsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9ybWF0aW9uOjpncmFudEFjY2VzcyhXZWJQ
cm9jZXNzUHJveHkmIHByb2Nlc3MsIFBhc3RlYm9hcmRBY2Nlc3NUeXBlIHR5cGUpCiB7CiAgICAg
YXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgcHJvY2Vz
c0FuZFR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBjODg0MTk5
ZjRiNjkzYzJiY2RhN2Y1MzcyOWNkY2EzYjM0MjZmMTJkLi5kNTQ3ZWM1NzE2ZTNjNzgzMjQwODE0
MmQ1ZmFkMWFlM2I3MGQ1NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAi
V2ViQ29sb3JQaWNrZXIuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Fs
dGVybmF0aXZlVGV4dENsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGFjdEluZm8uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRhY3RzUmVxdWVzdERhdGEuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0RhdGFPd25lclR5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3Vz
RGlyZWN0aW9uLmg+CkBAIC01MTcsNiArNTE5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRIYXNCbGFua092ZXJsYXkoYm9vbCkgeyB9CiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRf
REFUQV9PV05FUikKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRhdGFPd25lclR5cGUgZGF0YU93bmVy
Rm9yUGFzdGVib2FyZChQYXN0ZWJvYXJkQWNjZXNzSW50ZW50KSBjb25zdCB7IHJldHVybiBXZWJD
b3JlOjpEYXRhT3duZXJUeXBlOjpVbmRlZmluZWQ7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElN
QUdFX0VYVFJBQ1RJT04pCiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RJbWFnZUV4dHJhY3Rpb24o
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OkltYWdlRXh0cmFjdGlvblJlc3VsdCYmKT4mJiBjb21wbGV0aW9uKSB7IGNvbXBsZXRp
b24oeyB9KTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYXN0ZWJv
YXJkQWNjZXNzSW50ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU5OWQ2ZWIzNGE0ZTIyY2IzM2FlNjgyNTli
YmIyMGEzNTZlYWE0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Bhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFBhc3RlYm9h
cmRBY2Nlc3NJbnRlbnQgOiBib29sIHsKKyAgICBSZWFkLAorICAgIFdyaXRlLAorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCBkOWFjNjlhODM0OTdkZjE4OTY0ODNkOGJmODM3OGY4NjQxYTk1MTIyLi4yNDdiMzVi
MDlkY2ViMzU4MGFlZDUyNGNkZWFmMGIxYzA2Yjc5NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk2MjIsNiArOTYyMiwxNSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6dG91Y2hCYXJNZW51SXRlbURhdGFSZW1vdmVkKGNvbnN0IFRvdWNoQmFyTWVudUl0ZW1E
YXRhJiB0b3VjaAogfQogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikK
KworRGF0YU93bmVyVHlwZSBXZWJQYWdlUHJveHk6OmRhdGFPd25lckZvclBhc3RlYm9hcmQoUGFz
dGVib2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2VDbGll
bnQoKS5kYXRhT3duZXJGb3JQYXN0ZWJvYXJkKGludGVudCk7Cit9CisKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OndyaXRlUHJv
bWlzZWRBdHRhY2htZW50VG9QYXN0ZWJvYXJkKFdlYkNvcmU6OlByb21pc2VkQXR0YWNobWVudElu
Zm8mJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBlNDc1
ODBmYmE4NWQwMGQ0YzZkNjVjMDNkZTQzN2E0MjJhMDI5YmNhLi4yMTc4NzlhNmRlNmRmZTM4ZjEz
NmQyYThhYTQxNmYyMjlhMjQxNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkQWNjZXNzSW50
ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQ
b2xpY3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgpA
QCAtMjg1LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiBzdHJ1Y3QgSW1hZ2VF
eHRyYWN0aW9uUmVzdWx0OwogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05F
UikKK2VudW0gY2xhc3MgRGF0YU93bmVyVHlwZSA6IHVpbnQ4X3Q7CisjZW5kaWYKKwogdGVtcGxh
dGU8dHlwZW5hbWU+IGNsYXNzIFJlY3RFZGdlczsKIHVzaW5nIEZsb2F0Qm94RXh0ZW50ID0gUmVj
dEVkZ2VzPGZsb2F0PjsKIH0KQEAgLTEwNzksNiArMTA4NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0OwogICAgIGJvb2wgdXNlRWxldmF0ZWRVc2VySW50
ZXJmYWNlTGV2ZWwoKSBjb25zdDsKIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQor
ICAgIFdlYkNvcmU6OkRhdGFPd25lclR5cGUgZGF0YU93bmVyRm9yUGFzdGVib2FyZChQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50KSBjb25zdDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB0aHJvdWdoIGEgbWVzc2FnZS4KICAgICB2
b2lkIHJlZ2lzdGVyV2ViUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbihjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3Rl
Ym9hcmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5
LmgKaW5kZXggZjVjZDU5NThiMmNmNDMzNmM1YmQwMmZiNmRkY2UzYzYwM2UxNzg1Mi4uODJkN2Zj
YmE3YzkyZGU0ZmExZjQ2NDZkZThiYWJmNmQ2NzVhNDA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgU2hh
cmVkQnVmZmVyQ29weTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworZW51bSBjbGFzcyBEYXRh
T3duZXJUeXBlIDogdWludDhfdDsKIGNsYXNzIENvbG9yOwogY2xhc3MgUGFzdGVib2FyZEN1c3Rv
bURhdGE7CiBjbGFzcyBTZWxlY3Rpb25EYXRhOwpAQCAtNTIsNiArNTMsNyBAQCBzdHJ1Y3QgUGFz
dGVib2FyZFdlYkNvbnRlbnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitlbnVtIGNsYXNzIFBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQgOiBib29sOwogY2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNz
IFdlYlByb2Nlc3NQcm94eTsKIApAQCAtMTAwLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25h
bDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmKTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlJiYpPiYmKTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYpOworICAgIHZvaWQgZ2V0UGFzdGVib2Fy
ZENoYW5nZUNvdW50KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQ2NF90KT4mJik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6
UGFnZUlkZW50aWZpZXI+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9yJiYp
PiYmKTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKICAgICB2b2lkIGFk
ZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+
JiYpOwpAQCAtMTQ5LDYgKzE1MSw4IEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBQYXN0ZWJv
YXJkQWNjZXNzVHlwZSA6IHVpbnQ4X3QgeyBUeXBlcywgVHlwZXNBbmREYXRhIH07CiAgICAgT3B0
aW9uYWw8UGFzdGVib2FyZEFjY2Vzc1R5cGU+IGFjY2Vzc1R5cGUoSVBDOjpDb25uZWN0aW9uJiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgY29uc3Q7CiAgICAgdm9pZCBncmFudEFjY2Vz
cyhXZWJQcm9jZXNzUHJveHkmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBQYXN0ZWJv
YXJkQWNjZXNzVHlwZSk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpEYXRhT3duZXJUeXBlPiBk
ZXRlcm1pbmVEYXRhT3duZXIoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+LCBQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50KSBjb25zdDsKICNlbmRpZgogCiAgICAgV2ViUHJvY2Vzc1Byb3h5TGlzdCBtX3dl
YlByb2Nlc3NQcm94eUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZjIzZjg1Y2Q1NTgwMjZkMDk5ODRm
Njg3MTg4MDIxZmM4ZTc4YTcyMy4uNDdiMzdjMGVlZTEwOTQ1ZjYzNWMzYjI1ZWM1MWQzM2IzNWIx
NGYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9h
cmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtNDcsNyArNDcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0
ZWJvYXJkUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgR2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5
cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFs
PFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+IChTdHJpbmcgc3RyaW5nKSBTeW5j
aHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUo
U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpIC0+IChWZWN0b3I8U3RyaW5nPiBzdHJpbmdz
KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQYXN0ZWJvYXJkQnVmZmVyRm9y
VHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9u
YWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KLSAgICBH
ZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoaW50NjRfdCBjaGFuZ2VDb3VudCkg
U3luY2hyb25vdXMKKyAgICBHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllcj4gcGFnZUlEKSAtPiAoaW50
NjRfdCBjaGFuZ2VDb3VudCkgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCiAgICAgR2V0UGFz
dGVib2FyZENvbG9yKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKFdlYkNvcmU6OkNvbG9yIGNvbG9yKSBTeW5jaHJvbm91
cyBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQYXN0ZWJvYXJkVVJMKFN0cmluZyBwYXN0ZWJvYXJk
TmFtZSwgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKFN0cmlu
ZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgogICAgIEFkZFBhc3RlYm9h
cmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRU
eXBlcywgT3B0aW9uYWw8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkgLT4gKGludDY0
X3QgY2hhbmdlQ291bnQpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA2ZGEwYmZiOGFh
Yjc5MDBkMTcwNWE0NzVhNzZhNzdhMjFkODk4NWM5Li4xNGZiZTk1YTMzNWU2NjYwZGQ4ZjA4YjA0
MTVlMTZlNDlmNjBjYzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaApAQCAtMTI2LDYgKzEyNiwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24+IGNyZWF0ZURhdGFMaXN0U3VnZ2VzdGlv
bnNEcm9wZG93bihXZWJQYWdlUHJveHkmKSBmaW5hbDsKICNlbmRpZgogCisjaWYgSEFWRShQQVNU
RUJPQVJEX0RBVEFfT1dORVIpCisgICAgV2ViQ29yZTo6RGF0YU93bmVyVHlwZSBkYXRhT3duZXJG
b3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKICAgICBSZWZQdHI8V2Vi
RGF0ZVRpbWVQaWNrZXI+IGNyZWF0ZURhdGVUaW1lUGlja2VyKFdlYlBhZ2VQcm94eSYpIGZpbmFs
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MubW0KaW5kZXggMDBjZGYxM2JhOTJiZDA2YzBjMjkxNzVmNDFjMmNkNjFjOTU1ZTEzMS4u
YjlkODgzNWNkZWY2YWQ4Nzc4NzQ0YzY2NGIwMmQ2ODNhMjdiYzE3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNDU5LDYgKzQ1
OSwxNSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lRGVmZXJyaW5nVG91Y2hFbmQoYm9vbCBw
cmV2ZW50TmF0aXZlR2VzdHVyZXMpCiAKICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCitXZWJDb3JlOjpEYXRhT3du
ZXJUeXBlIFBhZ2VDbGllbnRJbXBsOjpkYXRhT3duZXJGb3JQYXN0ZWJvYXJkKFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQgaW50ZW50KSBjb25zdAoreworICAgIHJldHVybiBbbV9jb250ZW50VmlldyBf
ZGF0YU93bmVyRm9yUGFzdGVib2FyZDppbnRlbnRdOworfQorCisjZW5kaWYKKwogUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2Vi
UGFnZVByb3h5JikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCAwMGI3
ODdlM2U4MDQxYmM1MWYyNGU1OTVjYTA2NzRiNWY5YWEwMzI1Li5hNWEyOWYxYzI5NmJmNGFlNTgz
OTdlMjY4Yjg3MWNmZDEzZGI3M2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0zNyw2ICszNyw3IEBACiAj
aW1wb3J0ICJGcmFtZUluZm9EYXRhLmgiCiAjaW1wb3J0ICJHZXN0dXJlVHlwZXMuaCIKICNpbXBv
cnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCisjaW1wb3J0ICJQYXN0ZWJv
YXJkQWNjZXNzSW50ZW50LmgiCiAjaW1wb3J0ICJTeW50aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUu
aCIKICNpbXBvcnQgIlRleHRDaGVja2luZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRyYW5zYWN0
aW9uSUQuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0RhdGFPd25lclR5cGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxv
YXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lZGlhQ29udHJvbHNDb250ZXh0TWVudUl0ZW0u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUG9pbnRlcklELmg+CkBAIC03MDAsNiArNzAyLDEwIEBAIEZP
Ul9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVX
X0FDVElPTl9GT1JfV0VCX1ZJRVcpCiAtIChCT09MKV9mb3JtQ29udHJvbFJlZnJlc2hFbmFibGVk
OwogI2VuZGlmCiAKKyNpZiBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKy0gKFdlYkNvcmU6
OkRhdGFPd25lclR5cGUpX2RhdGFPd25lckZvclBhc3RlYm9hcmQ6KFdlYktpdDo6UGFzdGVib2Fy
ZEFjY2Vzc0ludGVudClpbnRlbnQ7CisjZW5kaWYKKwogQGVuZAogCiBAaW50ZXJmYWNlIFdLQ29u
dGVudFZpZXcgKFdLVGVzdGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDViNGI2NWNiNDBhNGQyYWVi
MjViOTZkNmE3OWE5Zjc1ZjFiMDc1MDUuLjg5YTdiODdkNDE2ZDhmN2IxOWI2ODQxM2YyNTkwMWJk
OGQ0ODU2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzQ2OCw2ICs3NDY4LDM4IEBAIC0gKEJPT0wp
X3Nob3VsZFVzZUxlZ2FjeVNlbGVjdFBvcG92ZXJEaXNtaXNzYWxCZWhhdmlvcgogICAgIHJldHVy
biBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNEYXRhQWN0aXZhdGlvbigpOwogfQogCisjaWYg
SEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIpCisKK3N0YXRpYyBXZWJDb3JlOjpEYXRhT3duZXJU
eXBlIGNvcmVEYXRhT3duZXJUeXBlKF9VSURhdGFPd25lciBwbGF0Zm9ybVR5cGUpCit7CisgICAg
c3dpdGNoIChwbGF0Zm9ybVR5cGUpIHsKKyAgICBjYXNlIF9VSURhdGFPd25lclVzZXI6CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVc2VyOworICAgIGNhc2UgX1VJRGF0
YU93bmVyRW50ZXJwcmlzZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFPd25lclR5cGU6
OkVudGVycHJpc2U7CisgICAgY2FzZSBfVUlEYXRhT3duZXJTaGFyZWQ6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpTaGFyZWQ7CisgICAgY2FzZSBfVUlEYXRhT3duZXJV
bmRlZmluZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhT3duZXJUeXBlOjpVbmRlZmlu
ZWQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJDb3Jl
OjpEYXRhT3duZXJUeXBlOjpVbmRlZmluZWQ7Cit9CisKKy0gKFdlYkNvcmU6OkRhdGFPd25lclR5
cGUpX2RhdGFPd25lckZvclBhc3RlYm9hcmQ6KFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0ludGVu
dClpbnRlbnQKK3sKKyAgICBpZiAoaW50ZW50ID09IFdlYktpdDo6UGFzdGVib2FyZEFjY2Vzc0lu
dGVudDo6UmVhZCkKKyAgICAgICAgcmV0dXJuIGNvcmVEYXRhT3duZXJUeXBlKHNlbGYuX2RhdGFP
d25lckZvclBhc3RlKTsKKworICAgIGlmIChpbnRlbnQgPT0gV2ViS2l0OjpQYXN0ZWJvYXJkQWNj
ZXNzSW50ZW50OjpXcml0ZSkKKyAgICAgICAgcmV0dXJuIGNvcmVEYXRhT3duZXJUeXBlKHNlbGYu
X2RhdGFPd25lckZvckNvcHkpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkRhdGFPd25lclR5cGU6OlVuZGVmaW5lZDsKK30KKworI2VuZGlmIC8vIEhB
VkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCiAtIChSZXRhaW5QdHI8VUlWaWV3PilfY3JlYXRl
UHJldmlld0NvbnRhaW5lcldpdGhMYXllck5hbWU6KE5TU3RyaW5nICopbGF5ZXJOYW1lCiB7CiAg
ICAgYXV0byBjb250YWluZXIgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDgz
MmNkYTg4YjFiN2UzOGI1YWU5M2Y0ZTQ4MTNiNDE5Y2VlNjQ3Li40MGU1OTg5MGU1YzJmZGFlZjIz
YzYyNGM5ZmRlZDg2MThiYzNiMGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5OTUsNiArMTk5NSw3IEBACiAJCUY0NDI5MTk2MUZB
NTk0MkEwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NDI5MTk1MUZBNTk0MkEwMDJDQzkzRSAv
KiBfV0tBdHRhY2htZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJRjQ0ODE1NjQyMzg3ODIwMDAwOTgy
NjU3IC8qIFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NDgxNTYyMjM4NzgyMDAwMDk4MjY1NyAvKiBX
S0RlZmVycmluZ0dlc3R1cmVSZWNvZ25pemVyLmggKi87IH07CiAJCUY0NERGRUIyMUU5RTc1MkYw
MDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0
aWxpdGllcy5oICovOyB9OworCQlGNDY2MEJDMjI1REVGMDgxMDBFODY1OTggLyogUGFzdGVib2Fy
ZEFjY2Vzc0ludGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ2NjBCQzEyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQu
aCAqLzsgfTsKIAkJRjQ4RDJBODUyMTU4M0E3RTAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBODQyMTU4M0Ew
MjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovOyB9OwogCQlGNDk2QTQzMTFGNThBMjcyMDA0QzE3
NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLmggKi87IH07CiAJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAv
KiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlLmggKi87IH07CkBAIC01ODU3LDYgKzU4NTgsNyBAQAogCQlGNDQ4MTU2MzIz
ODc4MjAwMDA5ODI2NTcgLyogV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFdLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBp
b3MvV0tEZWZlcnJpbmdHZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjQ0REZFQjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRo
ID0gaW9zL1dlYkljb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQ0REZFQjExRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRo
ID0gaW9zL1dlYkljb25VdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUY0NjYwQkMxMjVERUYwODEwMEU4NjU5OCAvKiBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcHBLaXRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5
NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlvcy9EcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5NkE0
MzAxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0aCA9IGlvcy9E
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NzUwLDYgKzk3NTIsNyBAQAogCQkJCUJDNkVEQUE1MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdl
Q2xpZW50LmggKi8sCiAJCQkJMUFDNzUzNzkxODNBOUZEQTAwNzJDQjE1IC8qIFBhZ2VMb2FkU3Rh
dGUuY3BwICovLAogCQkJCTFBQzc1MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRl
LmggKi8sCisJCQkJRjQ2NjBCQzEyNURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJ
bnRlbnQuaCAqLywKIAkJCQk4MzJFRDE4OTFFMkZFMTNCMDA2QkE2NEEgLyogUGVyQWN0aXZpdHlT
dGF0ZUNQVVVzYWdlU2FtcGxlci5jcHAgKi8sCiAJCQkJODMyRUQxOEExRTJGRTEzQjAwNkJBNjRB
IC8qIFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBsZXIuaCAqLywKIAkJCQkzNzcxNkE1OTE5
NUI5MTA1MDBFRThCMUIgLyogUHJvY2Vzc0Fzc2VydGlvbi5jcHAgKi8sCkBAIC0xMTg4OSw2ICsx
MTg5Miw3IEBACiAJCQkJMEZDQjRFNjIxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM3NTM3QzE4M0E5RkRCMDA3MkNCMTUgLyogUGFn
ZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4QjY2QjAxQkM0M0M4NjAwODJERjc3
IC8qIFBhZ2VMb2FkU3RhdGVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ2NjBCQzIy
NURFRjA4MTAwRTg2NTk4IC8qIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzk4QjUxMjIzMEExMEUwMDA3NjRCRCAvKiBQYXltZW50QXV0aG9y
aXphdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzk4QjNFMjIyRDk3QTIw
MDA3NjRCRCAvKiBQYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTRh
YmZhYzk4OTcyMzc5NWM0MzU1NTIwNmI4MWZlOTQ0NWI1YjJkMi4uMzA2ZGYwNDlkZmZiMTFlMGUw
YThjNGE3ZWU1YmQ5MGY1ZGE1ZTE3MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTAyLTE5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFNwZWNpZnkgYSBf
VUlEYXRhT3duZXIgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgZnJvbSB0aGUgc3lzdGVtIHBhc3Rl
Ym9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MjA3MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQyMDg1NzY+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGV2aW4gUm91c3NvLgorCisgICAgICAgIEFkZCBhIGNvdXBsZSBvZiBuZXcgQVBJIHRl
c3RzIHRvIHZlcmlmeSB0aGF0IGArW1VJUGFzdGVib2FyZCBfcGVyZm9ybUFzRGF0YU93bmVyOmJs
b2NrOl1gIGlzIGludm9rZWQgd2l0aCB0aGUKKyAgICAgICAgZXhwZWN0ZWQgZGF0YSBvd25lciB0
eXBlIHdoZW4gY29weWluZyBhbmQgcGFzdGluZy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tOgorICAgICAgICAoK1tUZXN0VUlQYXN0ZWJv
YXJkIF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaDoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW06CisgICAgICAg
ICgtW1dLV2ViVmlldyBjb250ZW50c0FzU3RyaW5nXSk6CisKKyAgICAgICAgQWRkaXRpb25hbGx5
IGFkZCBhIGhlbHBlciBtZXRob2QgdG8gZ3JhYiBhIGBXS1dlYlZpZXdgJ3MgY29udGVudHMgYXMg
YW4gYE5TU3RyaW5nYCwganVzdCBmb3IgY29udmVuaWVuY2UuCisKIDIwMjEtMDItMTggIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggbnVs
bCBkZXJlZmVyZW5jaW5nIGluIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRv
VGFza3NXaXRoRmluaXNoZWRSYW5nZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMubW0KaW5kZXggZjUyMDk0MWZlODllNTc5NzFmYmM5OWE0
Yjk1YzI1NTE3MTFlYjJiMS4uYWQwMmY3ZTY0ZGUzNDM4N2I5NTNhNGQzYWQ2NTVjMTEwY2YzY2E2
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJk
VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJk
VGVzdHMubW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAK
KyNpbXBvcnQgIkNsYXNzTWV0aG9kU3dpenpsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgpA
QCAtNDgsNiArNDksMjYgQEAgc3RhdGljIHZvaWQgY2hlY2tKU09OV2l0aExvZ2dpbmcoTlNTdHJp
bmcgKmpzb25TdHJpbmcsIE5TRGljdGlvbmFyeSAqZXhwZWN0ZWQpCiAgICAgICAgIE5TTG9nKEAi
RXhwZWN0ZWQgSlNPTjogJUAgdG8gbWF0Y2ggdmFsdWVzOiAlQCIsIGpzb25TdHJpbmcsIGV4cGVj
dGVkKTsKIH0KIAorI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVSKQorCitzdGF0aWMgX1VJ
RGF0YU93bmVyIGdMYXN0S25vd25EYXRhT3duZXIgPSBfVUlEYXRhT3duZXJVbmRlZmluZWQ7CisK
K0BpbnRlcmZhY2UgVGVzdFVJUGFzdGVib2FyZCA6IE5TT2JqZWN0CisrICh2b2lkKV9wZXJmb3Jt
QXNEYXRhT3duZXI6KF9VSURhdGFPd25lcilvd25lciBibG9jazooZGlzcGF0Y2hfYmxvY2tfdCli
bG9jazsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RVSVBhc3RlYm9hcmQKKworKyAodm9p
ZClfcGVyZm9ybUFzRGF0YU93bmVyOihfVUlEYXRhT3duZXIpb3duZXIgYmxvY2s6KGRpc3BhdGNo
X2Jsb2NrX3QpYmxvY2sKK3sKKyAgICBibG9jaygpOworICAgIGdMYXN0S25vd25EYXRhT3duZXIg
PSBvd25lcjsKK30KKworQGVuZAorCisjZW5kaWYgLy8gSEFWRShQQVNURUJPQVJEX0RBVEFfT1dO
RVIpCisKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKQEAgLTM0OCw2ICszNjksNTAgQEAgVEVTVChVSVBhc3RlYm9hcmRUZXN0cywgTWlzc2luZ1By
ZWZlcnJlZFByZXNlbnRhdGlvblNpemVGb3JJbWFnZSkKICAgICBFWFBFQ1RfV0tfU1RSRVEoIjAi
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignaW1nJykud2lkdGgiXSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKCIxNzQiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignaW1nJykuaGVpZ2h0Il0pOwogfQorCisjaWYgSEFWRShQQVNURUJPQVJEX0RBVEFfT1dORVIp
CisKK1RFU1QoVUlQYXN0ZWJvYXJkVGVzdHMsIFBlcmZvcm1Bc0RhdGFPd25lcldoZW5Db3B5aW5n
KQoreworICAgIGF1dG8gc3dpenpsZXIgPSBDbGFzc01ldGhvZFN3aXp6bGVyIHsKKyAgICAgICAg
VUlQYXN0ZWJvYXJkLmNsYXNzLAorICAgICAgICBAc2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFPd25l
cjpibG9jazopLAorICAgICAgICBbVGVzdFVJUGFzdGVib2FyZCBtZXRob2RGb3JTZWxlY3RvcjpA
c2VsZWN0b3IoX3BlcmZvcm1Bc0RhdGFPd25lcjpibG9jazopXQorICAgIH07CisKKyAgICBhdXRv
IHdlYlZpZXcgPSBzZXRVcFdlYlZpZXdGb3JQYXN0ZWJvYXJkVGVzdHMoQCJzaW1wbGUiKTsKKyAg
ICBbd2ViVmlldyBfc2V0RGF0YU93bmVyRm9yQ29weTpfVUlEYXRhT3duZXJTaGFyZWRdOworICAg
IFt3ZWJWaWV3IF9zZXREYXRhT3duZXJGb3JQYXN0ZTpfVUlEYXRhT3duZXJFbnRlcnByaXNlXTsK
KyAgICBbd2ViVmlldyBzZWxlY3RBbGw6bmlsXTsKKyAgICBbd2ViVmlldyBjb3B5Om5pbF07Cisg
ICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgRVhQRUNU
X0VRKGdMYXN0S25vd25EYXRhT3duZXIsIF9VSURhdGFPd25lclNoYXJlZCk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKFVJUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZC5zdHJpbmcsICJTaW1wbGUg
SFRNTCBmaWxlLiIpOworfQorCitURVNUKFVJUGFzdGVib2FyZFRlc3RzLCBQZXJmb3JtQXNEYXRh
T3duZXJXaGVuUGFzdGluZykKK3sKKyAgICBhdXRvIHN3aXp6bGVyID0gQ2xhc3NNZXRob2RTd2l6
emxlciB7CisgICAgICAgIFVJUGFzdGVib2FyZC5jbGFzcywKKyAgICAgICAgQHNlbGVjdG9yKF9w
ZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KSwKKyAgICAgICAgW1Rlc3RVSVBhc3RlYm9hcmQgbWV0
aG9kRm9yU2VsZWN0b3I6QHNlbGVjdG9yKF9wZXJmb3JtQXNEYXRhT3duZXI6YmxvY2s6KV0KKyAg
ICB9OworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBXZWJWaWV3Rm9yUGFzdGVib2FyZFRlc3Rz
KEAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSIpOworICAgIFt3ZWJWaWV3IF9zZXREYXRhT3du
ZXJGb3JDb3B5Ol9VSURhdGFPd25lclNoYXJlZF07CisgICAgW3dlYlZpZXcgX3NldERhdGFPd25l
ckZvclBhc3RlOl9VSURhdGFPd25lckVudGVycHJpc2VdOworCisgICAgVUlQYXN0ZWJvYXJkLmdl
bmVyYWxQYXN0ZWJvYXJkLnN0cmluZyA9IEAiRm9vIGJhciI7CisgICAgW3dlYlZpZXcgcGFzdGU6
bmlsXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAg
ICBFWFBFQ1RfRVEoZ0xhc3RLbm93bkRhdGFPd25lciwgX1VJRGF0YU93bmVyRW50ZXJwcmlzZSk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKFt3ZWJWaWV3IGNvbnRlbnRzQXNTdHJpbmddLCAiRm9vIGJh
clxuIik7Cit9CisKKyNlbmRpZiAvLyBIQVZFKFBBU1RFQk9BUkRfREFUQV9PV05FUikKKwogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3LmggYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAppbmRleCBjMWRjMDhjZmE0Y2Yw
NjEzMzUyNDU3YmYxMWE4ZWUzMDYxMDdhZThhLi41ZWYzZjhlNGZhNmIwYzcxZmJkMWI1NDExOTZm
NjkwMDJhZmRkZDA5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RX
S1dlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcu
aApAQCAtNDgsNiArNDgsNyBAQAogQGVuZAogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoVGVzdFdl
YktpdEFQSSkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmNvbnRl
bnRzQXNTdHJpbmc7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8TlNT
dHJpbmcgKj4gKnRhZ3NJbkJvZHk7CiAtICh2b2lkKWxvYWRUZXN0UGFnZU5hbWVkOihOU1N0cmlu
ZyAqKXBhZ2VOYW1lOwogLSAodm9pZClzeW5jaHJvbm91c2x5R29CYWNrOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCmluZGV4IDhkOTY3MTYzYjQ2ZGE3OTE5OTM0
ZTY0OTA2NDAzY2QyMzFiMmU2MGMuLmU1NzI5ODIyNGExYjZiNWQ3ZDNjMjhjNTQ5ZmY4Y2U4YjY1
MjIzOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmll
dy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KQEAg
LTEzMCw2ICsxMzAsMTggQEAgLSAoQk9PTClfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFu
ZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50OihOU1N0cmluZwogICAgIHJldHVybiBzdWNj
ZXNzOwogfQogCistIChOU1N0cmluZyAqKWNvbnRlbnRzQXNTdHJpbmcKK3sKKyAgICBfX2Jsb2Nr
IGJvb2wgZG9uZSA9IGZhbHNlOworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1
bHQ7CisgICAgW3NlbGYgX2dldENvbnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6
XihOU1N0cmluZyAqY29udGVudHMsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHJlc3VsdCA9
IGNvbnRlbnRzOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsK
K30KKwogLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXRhZ3NJbkJvZHkKIHsKICAgICByZXR1cm4g
W3NlbGYgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFycmF5LmZyb20oZG9jdW1lbnQu
Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKS5tYXAoZSA9PiBlLnRhZ05hbWUpIl07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>