<?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>202159</bug_id>
          
          <creation_ts>2019-09-24 12:45:50 -0700</creation_ts>
          <short_desc>Add ANGLE backend for iOS device</short_desc>
          <delta_ts>2019-11-09 11:59:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          
          <blocked>198948</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573757</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-09-24 12:45:50 -0700</bug_when>
    <thetext>Compile ANGLE backend for iOS device</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573758</commentid>
    <comment_count>1</comment_count>
      <attachid>379471</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-09-24 12:46:52 -0700</bug_when>
    <thetext>Created attachment 379471
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586115</commentid>
    <comment_count>2</comment_count>
      <attachid>382513</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-10-31 15:52:43 -0700</bug_when>
    <thetext>Created attachment 382513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588430</commentid>
    <comment_count>3</comment_count>
      <attachid>383077</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-07 15:05:51 -0800</bug_when>
    <thetext>Created attachment 383077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588431</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-07 15:06:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/57000166&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588440</commentid>
    <comment_count>5</comment_count>
      <attachid>383082</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-07 15:17:02 -0800</bug_when>
    <thetext>Created attachment 383082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588442</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-11-07 15:18:15 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See http://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588446</commentid>
    <comment_count>7</comment_count>
      <attachid>383077</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-11-07 15:23:21 -0800</bug_when>
    <thetext>Comment on attachment 383077
Patch

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

Cursory look seems okay. This is the beginning of a big project so it&apos;s difficult to be thorough...

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/ContextEAGL.h:44
&gt; +class ContextEAGL : public ContextGL
&gt; +{
&gt; +  public:
&gt; +    ContextEAGL(const gl::State &amp;state,
&gt; +               gl::ErrorSet *errorSet,
&gt; +               const std::shared_ptr&lt;RendererGL&gt; &amp;renderer);
&gt; +};

Is this a stub for something that will come later? There&apos;s nothing here in this class.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:166
&gt; +    return new IOSurfaceSurfaceEAGL(state, mContext, clientBuffer, attribs);

This seems so leaky :( :( :(

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:205
&gt; +    config.nativeVisualID   = 0;
&gt; +    config.nativeVisualType = 0;
&gt; +    config.nativeRenderable = EGL_TRUE;

I&apos;d appreciate a link for where these numbers came from

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:309
&gt; +#pragma clang diagnostic push
&gt; +#pragma clang diagnostic ignored &quot;-Wunused-variable&quot;

This file is iOS-specific. Can&apos;t we just fix the problem instead of ignoring warnings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588464</commentid>
    <comment_count>8</comment_count>
      <attachid>383077</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-07 15:50:09 -0800</bug_when>
    <thetext>Comment on attachment 383077
Patch

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

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/ContextEAGL.h:44
&gt;&gt; +};
&gt; 
&gt; Is this a stub for something that will come later? There&apos;s nothing here in this class.

Yeah. I once had a FIXME in here saying that ContextEAGL and ContextCGL could go away.

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:166
&gt;&gt; +    return new IOSurfaceSurfaceEAGL(state, mContext, clientBuffer, attribs);
&gt; 
&gt; This seems so leaky :( :( :(

It does!

We release it from the calling side though.

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:205
&gt;&gt; +    config.nativeRenderable = EGL_TRUE;
&gt; 
&gt; I&apos;d appreciate a link for where these numbers came from

I don&apos;t think these matter for this implementation. If they are the default values, I should just remove these lines.

The values below are pretty obvious, I hope.

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:309
&gt;&gt; +#pragma clang diagnostic ignored &quot;-Wunused-variable&quot;
&gt; 
&gt; This file is iOS-specific. Can&apos;t we just fix the problem instead of ignoring warnings?

The problem is the iOS Simulator doesn&apos;t have texImageIOSurface, and ANGLE doesn&apos;t have something like the UNUSED_PARAM macro (as far as I can tell).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588483</commentid>
    <comment_count>9</comment_count>
      <attachid>383077</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2019-11-07 16:30:26 -0800</bug_when>
    <thetext>Comment on attachment 383077
Patch

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

&gt;&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:309
&gt;&gt;&gt; +#pragma clang diagnostic ignored &quot;-Wunused-variable&quot;
&gt;&gt; 
&gt;&gt; This file is iOS-specific. Can&apos;t we just fix the problem instead of ignoring warnings?
&gt; 
&gt; The problem is the iOS Simulator doesn&apos;t have texImageIOSurface, and ANGLE doesn&apos;t have something like the UNUSED_PARAM macro (as far as I can tell).

There&apos;s a macro ANGLE_UNUSED_VARIABLE in angle/src/common/debug.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588723</commentid>
    <comment_count>10</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-08 11:01:33 -0800</bug_when>
    <thetext>Committed r252245: &lt;https://trac.webkit.org/changeset/252245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589028</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-09 11:59:29 -0800</bug_when>
    <thetext>Committed r252250: &lt;https://trac.webkit.org/changeset/252250&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379471</attachid>
            <date>2019-09-24 12:46:52 -0700</date>
            <delta_ts>2019-10-31 15:52:39 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-202159-20190924124652.patch</filename>
            <type>text/plain</type>
            <size>25586</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVkODA3MzRjMTQxMmMxOWVkYTQzNTZm
ZDQxNDE4NWNlNGQxMmY1NGIuLmM2MWVlNzA2ZTIyNjIzZTM4ZGFkMWI2YzQ1MDA2ZjdjMTU3ODZm
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMDktMjQgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIENvbXBpbGUgQU5HTEUgYmFja2VuZCBmb3IgaU9TIGRldmlj
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTU5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm0uaDoKKwogMjAxOS0wOS0yMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIGNsYW5nLXRpZHk6IEZpeCB1bm5lY2Vzc2FyeSBjb3B5L3JlZiBjaHVy
biBvZiBmb3IgbG9vcCB2YXJpYWJsZXMgaW4gV1RGL0phdmFTY3JpcHRDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjc4ZTRkZmZkNDMzYzA1NDhiOTFmNWNlMDA5YmMxY2Y2OGY3OTAwOS4uOGNhYzVmNzdkYzlj
MjMzYmUyMzUxZDAwMzc3MmU5MmYyMzljYzFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBA
CisyMDE5LTA5LTI0ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBD
b21waWxlIEFOR0xFIGJhY2tlbmQgZm9yIGlPUyBkZXZpY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE1OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgaW5p
dFdpdGhHcmFwaGljc0NvbnRleHQzRDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRFR0xE
aXNwbGF5OmNvbmZpZzpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFj
ZUJhY2tpbmdTdG9yZVdpdGhTaXplOnVzaW5nQWxwaGE6XSk6CisgICAgICAgICgtW1dlYkdMTGF5
ZXIgc2V0RUdMRGlzcGxheTphbmRDb25maWc6XSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW06CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlQ2FjaGVDVjo6dGV4dHVyZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0
aW5nLmg6CisKIDIwMTktMDktMjIgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBjbGFuZy10aWR5OiBGaXggdW5uZWNlc3NhcnkgY29weS9yZWYgY2h1cm4gb2Yg
Zm9yIGxvb3AgdmFyaWFibGVzIGluIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDU1ZGEyMzZmOGNj
MGY2Y2YzOGJmZmQ0ZTg5YzIwMThkMTBmY2I1ZmUuLjkyNTZlNWQ1NGY4MmZlMTcwNjhjZGY3YjQ1
ZTJkNDZkMmU5YjY5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTExMSw4ICsxMTExLDggQEAKICNkZWZp
bmUgVVNFX0FOR0xFIDAKICNlbHNlCiAjZGVmaW5lIFVTRV9PUEVOR0wgMAotI2RlZmluZSBVU0Vf
T1BFTkdMX0VTIDEKLSNkZWZpbmUgVVNFX0FOR0xFIDAKKyNkZWZpbmUgVVNFX09QRU5HTF9FUyAw
CisjZGVmaW5lIFVTRV9BTkdMRSAxCiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkKICNpZm5k
ZWYgR0xfU0lMRU5DRV9ERVBSRUNBVElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAyMjRlMzRkODMy
N2FkYjg1NWI5NDcxM2VkZjNjNjBhODU4Nzg1ZjcyLi5jZDU2MzdmMGEwNzNmNzg5MTAxZGJkOTIy
ZjA4ZmE2OThiYWRkMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMjA0Miw3ICsyMDQyLDEwIEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lz
ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWdu
ZWQgcHJpbWl0aXZlQ291bnQpCiB7Ci0jaWYgIVVTRShBTkdMRSkKKyNpZiBVU0UoQU5HTEUpCisg
ICAgVU5VU0VEX1BBUkFNKGVsZW1lbnRDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2
ZUNvdW50KTsKKyNlbHNlCiAgICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Nv
cmVWaWRlb1NvZnRMaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVW
aWRlb1NvZnRMaW5rLmNwcAppbmRleCBhNjRhMGE5MjM4ODFkYzhhMTY2ZTJjNDUwM2Y3Mjc1ZmJk
NzQyMDM4Li40ZjYwM2JkZmJlM2VjMDg5OTUzNjJkODVhMDliZWZkZGMwOWYwNTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3Bw
CkBAIC03MiwxMCArNzIsOCBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3Jl
LCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVDcmVhdGVUZQogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4dHVyZUNh
Y2hlRmx1c2gsIHZvaWQsIChDVk9wZW5HTEVTVGV4dHVyZUNhY2hlUmVmIHRleHR1cmVDYWNoZSwg
Q1ZPcHRpb25GbGFncyBvcHRpb25zKSwgKHRleHR1cmVDYWNoZSwgb3B0aW9ucykpCiBTT0ZUX0xJ
TktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0
dXJlR2V0VGFyZ2V0LCBHTGVudW0sIChDVk9wZW5HTEVTVGV4dHVyZVJlZiBpbWFnZSksIChpbWFn
ZSkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENW
T3BlbkdMRVNUZXh0dXJlR2V0TmFtZSwgR0x1aW50LCAoQ1ZPcGVuR0xFU1RleHR1cmVSZWYgaW1h
Z2UpLCAoaW1hZ2UpKQotU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29y
ZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRU
eXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVy
UmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9y
bWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCi1TT0ZUX0xJ
TktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJD
cmVhdGVXaXRoQnl0ZXMsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIHZvaWQqIGRh
dGEsIHNpemVfdCBieXRlc1BlclJvdywgdm9pZCAoKnJlbGVhc2VDYWxsYmFjaykodm9pZCosIGNv
bnN0IHZvaWQqKSwgdm9pZCogcmVsZWFzZVBvaW50ZXIsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1
ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9j
YXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBkYXRhLCBieXRlc1BlclJvdywg
cmVsZWFzZUNhbGxiYWNrLCByZWxlYXNlUG9pbnRlciwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBw
aXhlbEJ1ZmZlck91dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBD
b3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlR2V0Q2xlYW5UZXhDb29yZHMsIHZvaWQsIChDVk9w
ZW5HTEVTVGV4dHVyZVJlZiBpbWFnZSwgR0xmbG9hdCBsb3dlckxlZnRbMl0sIEdMZmxvYXQgbG93
ZXJSaWdodFsyXSwgR0xmbG9hdCB1cHBlckxlZnRbMl0sIEdMZmxvYXQgdXBwZXJSaWdodFsyXSks
IChpbWFnZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1cHBlckxlZnQsIHVwcGVyUmlnaHQpKQot
I2Vsc2UKKyNlbGlmIFVTRShPUEVOR0wpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShX
ZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlLCBDVlJldHVybiwg
KENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZEaWN0aW9uYXJ5UmVmIGNhY2hlQXR0cmlidXRl
cywgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0LCBDR0xQaXhlbEZvcm1hdE9iaiBjZ2xQaXhlbEZv
cm1hdCwgQ0ZEaWN0aW9uYXJ5UmVmIHRleHR1cmVBdHRyaWJ1dGVzLCBDVk9wZW5HTFRleHR1cmVD
YWNoZVJlZiogY2FjaGVPdXQpLCAoYWxsb2NhdG9yLCBjYWNoZUF0dHJpYnV0ZXMsIGNnbENvbnRl
eHQsIGNnbFBpeGVsRm9ybWF0LCB0ZXh0dXJlQXR0cmlidXRlcywgY2FjaGVPdXQpKQogU09GVF9M
SU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1
cmVDYWNoZUNyZWF0ZVRleHR1cmVGcm9tSW1hZ2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYg
YWxsb2NhdG9yLCBDVk9wZW5HTFRleHR1cmVDYWNoZVJlZiB0ZXh0dXJlQ2FjaGUsIENWSW1hZ2VC
dWZmZXJSZWYgc291cmNlSW1hZ2UsIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBDVk9wZW5H
TFRleHR1cmVSZWYqIHRleHR1cmVPdXQpLCAoYWxsb2NhdG9yLCB0ZXh0dXJlQ2FjaGUsIHNvdXJj
ZUltYWdlLCBhdHRyaWJ1dGVzLCB0ZXh0dXJlT3V0KSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1Jf
U09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVGbHVzaCwgdm9p
ZCwgKENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmIHRleHR1cmVDYWNoZSwgQ1ZPcHRpb25GbGFncyBv
cHRpb25zKSwgKHRleHR1cmVDYWNoZSwgb3B0aW9ucykpCkBAIC05MSw2ICs4OSw4IEBAIFNPRlRf
TElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZm
ZXJFeHRlbmRlZFBpeGVsc0JvCiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3Jl
LCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSwgQ0ZTdHJp
bmdSZWYpCiAjZW5kaWYKIAorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwg
Q29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVm
IGFsbG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3Jt
YXRUeXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVm
ZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVs
Rm9ybWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCitTT0ZU
X0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZm
ZXJDcmVhdGVXaXRoQnl0ZXMsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBz
aXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIHZvaWQq
IGRhdGEsIHNpemVfdCBieXRlc1BlclJvdywgdm9pZCAoKnJlbGVhc2VDYWxsYmFjaykodm9pZCos
IGNvbnN0IHZvaWQqKSwgdm9pZCogcmVsZWFzZVBvaW50ZXIsIENGRGljdGlvbmFyeVJlZiBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFs
bG9jYXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBkYXRhLCBieXRlc1BlclJv
dywgcmVsZWFzZUNhbGxiYWNrLCByZWxlYXNlUG9pbnRlciwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVz
LCBwaXhlbEJ1ZmZlck91dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3Jl
LCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwg
KENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlv
bmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1
ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4
ZWxCdWZmZXJPdXQpKQogCiAjZW5kaWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggNmQwYmY0
Zjg1YjRlYWQ5ZTc5NjYxZTQxYTk2MjA3OGM2MDA2OTU0NS4uY2Y1Zjg5YWUxMzQxZWE4ODA2ZDI1
NjE4OGU2ODZkM2RlMjllZDA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvQ29yZVZpZGVvU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCkBAIC05Myw2ICs5MywxMCBAQCBTT0ZUX0xJTktfQ09O
U1RBTlRfTUFZX0ZBSUxfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVkltYWdlQnVm
ZmVyWUNiQ3JNYQogI2RlZmluZSBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1AzX0Q2NSBnZXRf
Q29yZVZpZGVvX2tDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfUDNfRDY1KCkKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTF9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwLCBDRlN0cmluZ1JlZikKICNkZWZpbmUga0NWSW1h
Z2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwIGdldF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZm
ZXJZQ2JDck1hdHJpeF9JVFVfUl8yMDIwKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVS
KFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJDR0JpdG1hcENvbnRleHRDb21wYXRp
YmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga0NWUGl4ZWxCdWZmZXJDR0JpdG1hcENv
bnRleHRDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJDR0JpdG1h
cENvbnRleHRDb21wYXRpYmlsaXR5S2V5KCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVS
KFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtl
eSwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxp
dHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5
KCkKIAogI2lmIFVTRShPUEVOR0xfRVMpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihX
ZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVDcmVhdGUsIENWUmV0dXJu
LCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25hcnlSZWYgY2FjaGVBdHRyaWJ1
dGVzLCBDVkVBR0xDb250ZXh0IGVhZ2xDb250ZXh0LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0
dHJpYnV0ZXMsIENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVSZWYqIGNhY2hlT3V0KSwgKGFsbG9jYXRv
ciwgY2FjaGVBdHRyaWJ1dGVzLCBlYWdsQ29udGV4dCwgdGV4dHVyZUF0dHJpYnV0ZXMsIGNhY2hl
T3V0KSkKQEAgLTEwNSwyMCArMTA5LDEyIEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVS
KFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQsIEdMCiAjZGVm
aW5lIENWT3BlbkdMRVNUZXh0dXJlR2V0VGFyZ2V0IHNvZnRMaW5rX0NvcmVWaWRlb19DVk9wZW5H
TEVTVGV4dHVyZUdldFRhcmdldAogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUsIEdMdWludCwgKENWT3BlbkdM
RVNUZXh0dXJlUmVmIGltYWdlKSwgKGltYWdlKSkKICNkZWZpbmUgQ1ZPcGVuR0xFU1RleHR1cmVH
ZXROYW1lIHNvZnRMaW5rX0NvcmVWaWRlb19DVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUKLVNPRlRf
TElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZl
ckNyZWF0ZSwgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0
aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSwgQ0ZEaWN0aW9uYXJ5UmVm
IHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJPdXQp
LCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIHBpeGVsQnVmZmVy
QXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQotI2RlZmluZSBDVlBpeGVsQnVmZmVyQ3JlYXRl
IHNvZnRMaW5rX0NvcmVWaWRlb19DVlBpeGVsQnVmZmVyQ3JlYXRlCi1TT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRo
Qnl0ZXMsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgs
IHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIHZvaWQqIGRhdGEsIHNpemVf
dCBieXRlc1BlclJvdywgdm9pZCAoKnJlbGVhc2VDYWxsYmFjaykodm9pZCosIGNvbnN0IHZvaWQq
KSwgdm9pZCogcmVsZWFzZVBvaW50ZXIsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBkYXRhLCBieXRlc1BlclJvdywgcmVsZWFzZUNh
bGxiYWNrLCByZWxlYXNlUG9pbnRlciwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZl
ck91dCkpCi0jZGVmaW5lIENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoQnl0ZXMgc29mdExpbmtfQ29y
ZVZpZGVvX0NWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoQnl0ZXMKIFNPRlRfTElOS19GVU5DVElPTl9G
T1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRl
eENvb3Jkcywgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJlUmVmIGltYWdlLCBHTGZsb2F0IGxvd2Vy
TGVmdFsyXSwgR0xmbG9hdCBsb3dlclJpZ2h0WzJdLCBHTGZsb2F0IHVwcGVyTGVmdFsyXSwgR0xm
bG9hdCB1cHBlclJpZ2h0WzJdKSwgKGltYWdlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVy
TGVmdCwgdXBwZXJSaWdodCkpCiAjZGVmaW5lIENWT3BlbkdMRVNUZXh0dXJlR2V0Q2xlYW5UZXhD
b29yZHMgc29mdExpbmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNUZXh0dXJlR2V0Q2xlYW5UZXhDb29y
ZHMKIAotU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBr
Q1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVm
KQotI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXkg
Z2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlL
ZXkoKQotU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBr
Q1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKLSNkZWZp
bmUga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tD
VlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXkoKQogU09GVF9MSU5LX0NPTlNUQU5U
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9w
ZW5HTEVTRkJPQ29tcGF0aWJpbGl0eUtleSwgQ0ZTdHJpbmdSZWYpCiAjZGVmaW5lIGtDVlBpeGVs
QnVmZmVySU9TdXJmYWNlT3BlbkdMRVNGQk9Db21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9f
a0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xFU0ZCT0NvbXBhdGliaWxpdHlLZXkoKQotI2Vs
c2UKKyNlbGlmIFVTRShPUEVOR0wpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJD
b3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlLCBDVlJldHVybiwgKENG
QWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZEaWN0aW9uYXJ5UmVmIGNhY2hlQXR0cmlidXRlcywg
Q0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0LCBDR0xQaXhlbEZvcm1hdE9iaiBjZ2xQaXhlbEZvcm1h
dCwgQ0ZEaWN0aW9uYXJ5UmVmIHRleHR1cmVBdHRyaWJ1dGVzLCBDVk9wZW5HTFRleHR1cmVDYWNo
ZVJlZiogY2FjaGVPdXQpLCAoYWxsb2NhdG9yLCBjYWNoZUF0dHJpYnV0ZXMsIGNnbENvbnRleHQs
IGNnbFBpeGVsRm9ybWF0LCB0ZXh0dXJlQXR0cmlidXRlcywgY2FjaGVPdXQpKQogI2RlZmluZSBD
Vk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZPcGVuR0xUZXh0
dXJlQ2FjaGVDcmVhdGUKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGVUZXh0dXJlRnJvbUltYWdlLCBDVlJl
dHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVSZWYg
dGV4dHVyZUNhY2hlLCBDVkltYWdlQnVmZmVyUmVmIHNvdXJjZUltYWdlLCBDRkRpY3Rpb25hcnlS
ZWYgYXR0cmlidXRlcywgQ1ZPcGVuR0xUZXh0dXJlUmVmKiB0ZXh0dXJlT3V0KSwgKGFsbG9jYXRv
ciwgdGV4dHVyZUNhY2hlLCBzb3VyY2VJbWFnZSwgYXR0cmlidXRlcywgdGV4dHVyZU91dCkpCkBA
IC0xNDUsNiArMTQxLDEwIEBAIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUs
IENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsCiAjZGVmaW5lIGtDVlBp
eGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSgpCiAjZW5kaWYKIAorU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlLCBDVlJl
dHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVp
Z2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3Is
IHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBw
aXhlbEJ1ZmZlck91dCkpCisjZGVmaW5lIENWUGl4ZWxCdWZmZXJDcmVhdGUgc29mdExpbmtfQ29y
ZVZpZGVvX0NWUGl4ZWxCdWZmZXJDcmVhdGUKK1NPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVS
KFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1
cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdo
dCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93
LCB2b2lkICgqcmVsZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxl
YXNlUG9pbnRlciwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhl
bEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBw
aXhlbEZvcm1hdFR5cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVh
c2VQb2ludGVyLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKKyNkZWZp
bmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhl
bEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcwogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSwgQ1ZSZXR1
cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBDRkRp
Y3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVyUmVmICogcGl4
ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCBzdXJmYWNlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMs
IHBpeGVsQnVmZmVyT3V0KSkKICNkZWZpbmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZh
Y2Ugc29mdExpbmtfQ29yZVZpZGVvX0NWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCmluZGV4IDYzN2JjNzRjN2JhM2I5NmI5NjJjMDkzYWNkZjIyMDNhYWI5NTRiNWMuLmQ0
Mzg4ODk3YTdiZjI3YmM1ZWE5MmQ4Nzk3ODdmMGY3MzA1Yzk0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMTE5
OCw3ICsxMTk4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQ0dMQ29udGV4dCgpOwogI2Vu
ZGlmCiAKLSNpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQU5HTEUpCiAg
ICAgdm9pZCBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKTsKICAgICB2b2lk
IHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHQzRENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQppbmRleCBlYzk4MDUxNDU1YjcwZDA4NWU3
Y2ZlNmUzNWJjMTNiMmE5MjNmNzgxLi44ZDE1YzFjODgzNjIxYzlkN2JjMGRhMTY2M2RlMmU4MDk3
NTVmNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KQEAgLTM4Miw3ICszODIs
NyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogICAgICAgICBbbV93ZWJHTExheWVyIHNldE5h
bWU6QCJXZWJHTCBMYXllciJdOwogI2VuZGlmCiAjaWYgVVNFKEFOR0xFKQotICAgICAgICBbbV93
ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGFuZENvbmZpZzpjb25maWddOwor
ICAgICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGNvbmZpZzpj
b25maWddOwogI2VuZGlmCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKaW5k
ZXggMWQzYjZkNWFjOGE4MWE4YzIxZjI3NGNhYTY0ODNhM2RlMTRiZTVkZC4uMDc2ZmUyZGRjMGRj
NDdkNTYxYjkwYzE0NDM3MDdhYTRjNjA5NzAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaApAQCAtNDAsMjQgKzQwLDIyIEBA
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiBAaW50ZXJmYWNlIFdlYkdMTGF5
ZXIgOiBDQUxheWVyCiAjZWxpZiBVU0UoT1BFTkdMX0VTKQogQGludGVyZmFjZSBXZWJHTExheWVy
IDogQ0FFQUdMTGF5ZXIKLSNlbGlmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKQorI2VsaWYg
VVNFKEFOR0xFKQogQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FMYXllcgotI2VsaWYgVVNFKEFO
R0xFKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQotQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FF
QUdMTGF5ZXIKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0KICNlbmRpZgogewog
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBfY29udGV4dDsKICAgICBmbG9hdCBfZGV2
aWNlUGl4ZWxSYXRpbzsKLSNpZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9S
TShNQUMpKQorI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfY29udGVudHNCdWZmZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX2RyYXdpbmdCdWZmZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX3NwYXJlQnVmZmVyOwogICAgIFdlYkNvcmU6OkludFNp
emUgX2J1ZmZlclNpemU7CiAgICAgQk9PTCBfdXNpbmdBbHBoYTsKICNlbmRpZgotI2lmIFVTRShB
TkdMRSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShBTkdMRSkKICAgICB2b2lkKiBfZWdsRGlz
cGxheTsKICAgICB2b2lkKiBfZWdsQ29uZmlnOwogICAgIHZvaWQqIF9jb250ZW50c1BidWZmZXI7
CkBAIC03MywxMyArNzEsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
IAogLSAoQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9y
U3BhY2VSZWYpY29sb3JTcGFjZTsKIAotI2lmIFVTRShPUEVOR0wpIHx8IChVU0UoQU5HTEUpICYm
IFBMQVRGT1JNKE1BQykpCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQogLSAodm9pZClh
bGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNp
emUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhOwogLSAodm9pZCliaW5kRnJhbWVidWZmZXJU
b05leHRBdmFpbGFibGVTdXJmYWNlOwogI2VuZGlmCiAKLSNpZiAoVVNFKEFOR0xFKSAmJiBQTEFU
Rk9STShNQUMpKQotLSAodm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKillZ2xEaXNwbGF5IGFuZENv
bmZpZzoodm9pZCopZWdsQ29uZmlnOworI2lmIFVTRShBTkdMRSkKKy0gKHZvaWQpc2V0RUdMRGlz
cGxheToodm9pZCopZWdsRGlzcGxheSBjb25maWc6KHZvaWQqKWVnbENvbmZpZzsKIC0gKHZvaWQp
ZGVhbGxvYzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQppbmRleCA3ZGVjOWVjNTZhYmU5MmEyODViM2EzMTE0
YWFlNDliYjZkYzI3YzM0Li43MDQ5MGVkZTNlNmI2ODcxZTM3OTk5NThmZDVmNjQ1ZTljYmQ5OTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJH
TExheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIubW0KQEAgLTY2LDcgKzY2LDcgQEAKICAgICBfY29udGV4dCA9IGNvbnRleHQ7CiAg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBfZGV2aWNlUGl4ZWxSYXRpbyA9IGNvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkuZGV2aWNlUGl4ZWxSYXRpbzsKLSNpZiBVU0UoT1BFTkdM
KSB8fCBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpCiAgICAgc2VsZi5jb250ZW50c09wYXF1ZSA9ICFjb250ZXh0LT5nZXRDb250ZXh0QXR0
cmlidXRlcygpLmFscGhhOwogICAgIHNlbGYudHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRElkZW50
aXR5OwogICAgIHNlbGYuY29udGVudHNTY2FsZSA9IF9kZXZpY2VQaXhlbFJhdGlvOwpAQCAtNzYs
NyArNzYsNyBAQAogICAgIHJldHVybiBzZWxmOwogfQogCi0jaWYgVVNFKE9QRU5HTCkgfHwgKFVT
RShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKSkKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUp
CiAvLyBXaGVuIHVzaW5nIGFuIElPU3VyZmFjZSBhcyBsYXllciBjb250ZW50cywgd2UgbmVlZCB0
byBmbGlwIHRoZQogLy8gbGF5ZXIgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgSU9TdXJm
YWNlIHByb3ZpZGVzIGNvbnRlbnQKIC8vIGluIFktdXAuIFRoaXMgbWVhbnMgdGhhdCBhbnkgaW5j
b21pbmcgdHJhbnNmb3JtICh1bmxpa2VseSwgc2luY2UKQEAgLTkyLDcgKzkyLDcgQEAKIHsKICAg
ICBbc3VwZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UocC54LCAxLjAgLSBwLnkpXTsKIH0K
LSNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQor
I2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKIAogI2lmIFVTRShPUEVOR0wpCiBz
dGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBz
aXplICovKQpAQCAtMTgxLDggKzE4MSw4IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwg
Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgIGxheWVyLT5vd25l
cigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkobGF5ZXIpOwogfQogCi0jaWYgKFVT
RShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKSkKLS0gKHZvaWQpc2V0RUdMRGlzcGxheToodm9pZCop
ZGlzcGxheSBhbmRDb25maWc6KHZvaWQqKWNvbmZpZworI2lmIFVTRShBTkdMRSkKKy0gKHZvaWQp
c2V0RUdMRGlzcGxheToodm9pZCopZGlzcGxheSBjb25maWc6KHZvaWQqKWNvbmZpZwogewogICAg
IF9lZ2xEaXNwbGF5ID0gZGlzcGxheTsKICAgICBfZWdsQ29uZmlnID0gY29uZmlnOwpAQCAtMTk3
LDcgKzE5Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0
YSwgc2l6ZV90IC8qIHNpemUgKi8pCiB9CiAjZW5kaWYKIAotI2lmIFVTRShPUEVOR0wpIHx8IChV
U0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xF
KQogLSAodm9pZClhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3Jl
OjpJbnRTaXplKXNpemUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhCiB7CiAgICAgX2J1ZmZl
clNpemUgPSBzaXplOwpAQCAtMjE0LDcgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZv
aWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgX2RyYXdpbmdC
dWZmZXItPm1pZ3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAgX3NwYXJlQnVmZmVy
LT5taWdyYXRlQ29sb3JTcGFjZVRvUHJvcGVydGllcygpOwogCi0jaWYgVVNFKEFOR0xFKSAmJiBQ
TEFURk9STShNQUMpCisjaWYgVVNFKEFOR0xFKQogICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0
cmlidXRlc1tdID0gewogICAgICAgICBFR0xfV0lEVEgsIHNpemUud2lkdGgoKSwKICAgICAgICAg
RUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwKQEAgLTI3Miw3ICsyNzIsNyBAQCBzdGF0aWMgdm9p
ZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQog
ICAgIF9sYXRjaGVkUGJ1ZmZlciA9IF9kcmF3aW5nUGJ1ZmZlcjsKICNlbmRpZgogfQotI2VuZGlm
IC8vIFVTRShPUEVOR0wpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjZW5kaWYg
Ly8gVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KaW5kZXggOWYx
ZjY2YjNiZDU5ZjU5YjFhZDNjYjcwNWM4NTY1NDQyMjdlYzM5OC4uMDE5ZDIzOTUxN2Q4MmJjMmVi
ZjNkYjY1NjZjM2ZhZDNhNTgwZmRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTYxLDYgKzYxLDE2IEBAIFRl
eHR1cmVDYWNoZUNWOjpUZXh0dXJlQ2FjaGVDVihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCwg
UmV0YWluUHRyPFRleHR1cmVDYWNoCiAKIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVDVjo6VGV4dHVy
ZVR5cGU+IFRleHR1cmVDYWNoZUNWOjp0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJSZWYg
aW1hZ2UsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKIHsKKyNpZiBVU0Uo
QU5HTEUpCisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMgaW50ZWdyYXRp
bmcgdmlhIEFOR0xFLgorICAgIFVOVVNFRF9QQVJBTShpbWFnZSk7CisgICAgVU5VU0VEX1BBUkFN
KG91dHB1dFRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFS
QU0oaW50ZXJuYWxGb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNF
RF9QQVJBTSh0eXBlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCiAgICAgVGV4dHVyZVR5
cGUgYmFyZVZpZGVvVGV4dHVyZSA9IG51bGxwdHI7CiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICBz
aXplX3Qgd2lkdGggPSBDVlBpeGVsQnVmZmVyR2V0V2lkdGgoaW1hZ2UpOwpAQCAtNzUsMTUgKzg1
LDYgQEAgUmV0YWluUHRyPFRleHR1cmVDYWNoZUNWOjpUZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hl
Q1Y6OnRleHR1cmVGcm9tSW1hZ2UoQ1ZQaXhlbEIKICAgICBVTlVTRURfUEFSQU0odHlwZSk7CiAg
ICAgaWYgKGtDVlJldHVyblN1Y2Nlc3MgIT0gQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGVUZXh0
dXJlRnJvbUltYWdlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY2FjaGUuZ2V0KCksIGltYWdlLCBu
dWxscHRyLCAmYmFyZVZpZGVvVGV4dHVyZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotI2Vs
aWYgVVNFKEFOR0xFKQotICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzIGlu
dGVncmF0aW5nIHZpYSBBTkdMRS4KLSAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNF
RF9QQVJBTShvdXRwdXRUYXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGludGVybmFsRm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAg
ICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKICAgICBS
ZXRhaW5QdHI8VGV4dHVyZVR5cGU+IHZpZGVvVGV4dHVyZSA9IGFkb3B0Q0YoYmFyZVZpZGVvVGV4
dHVyZSk7CiAKQEAgLTkxLDE2ICs5MiwxNyBAQCBSZXRhaW5QdHI8VGV4dHVyZUNhY2hlQ1Y6OlRl
eHR1cmVUeXBlPiBUZXh0dXJlQ2FjaGVDVjo6dGV4dHVyZUZyb21JbWFnZShDVlBpeGVsQgogICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt3ZWFrVGhpc10gewog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwog
ICAgICAgICBpZiAoYXV0byBjYWNoZSA9IHdlYWtUaGlzLT5tX2NhY2hlLmdldCgpKQogI2lmIFVT
RShPUEVOR0xfRVMpCiAgICAgICAgICAgICBDVk9wZW5HTEVTVGV4dHVyZUNhY2hlRmx1c2goY2Fj
aGUsIDApOwotI2Vsc2UKKyNlbGlmIFVTRShPUEVOR0wpCiAgICAgICAgICAgICBDVk9wZW5HTFRl
eHR1cmVDYWNoZUZsdXNoKGNhY2hlLCAwKTsKICNlbmRpZgogICAgIH0pOwogCiAgICAgcmV0dXJu
IHZpZGVvVGV4dHVyZTsKKyNlbmRpZgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKaW5k
ZXggNzVhZDQ4NzcwNGZmN2I0OGU1MzYxZTVjNTNmOGJhNDE4YWRiMjIzYi4uMWY2ZDExYzQ1M2Uz
M2I0ZmVmMjgxOTRmOWE4ODJhYTU3M2Q4YTc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcApA
QCAtODc0LDIwICs4NzQsMzYgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFRleHR1cmVUeXBlIGlucHV0VmkKICAgICBHTGZsb2F0
IGxvd2VyUmlnaHRbMl0gPSB7IDAsIDAgfTsKICAgICBHTGZsb2F0IHVwcGVyUmlnaHRbMl0gPSB7
IDAsIDAgfTsKICAgICBHTGZsb2F0IHVwcGVyTGVmdFsyXSA9IHsgMCwgMCB9OworICAgIFBsYXRm
b3JtM0RPYmplY3QgdmlkZW9UZXh0dXJlTmFtZTsKKyAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVU
YXJnZXQ7CisKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIFBsYXRmb3JtM0RPYmplY3QgdmlkZW9U
ZXh0dXJlTmFtZSA9IENWT3BlbkdMRVNUZXh0dXJlR2V0TmFtZShpbnB1dFZpZGVvVGV4dHVyZSk7
Ci0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gQ1ZPcGVuR0xFU1RleHR1cmVHZXRU
YXJnZXQoaW5wdXRWaWRlb1RleHR1cmUpOworICAgIHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5H
TEVTVGV4dHVyZUdldE5hbWUoaW5wdXRWaWRlb1RleHR1cmUpOworICAgIHZpZGVvVGV4dHVyZVRh
cmdldCA9IENWT3BlbkdMRVNUZXh0dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsKICAg
ICBDVk9wZW5HTEVTVGV4dHVyZUdldENsZWFuVGV4Q29vcmRzKGlucHV0VmlkZW9UZXh0dXJlLCBs
b3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVyUmlnaHQsIHVwcGVyTGVmdCk7CiAjZWxpZiBVU0Uo
T1BFTkdMKQotICAgIFBsYXRmb3JtM0RPYmplY3QgdmlkZW9UZXh0dXJlTmFtZSA9IENWT3BlbkdM
VGV4dHVyZUdldE5hbWUoaW5wdXRWaWRlb1RleHR1cmUpOwotICAgIEdDM0RlbnVtIHZpZGVvVGV4
dHVyZVRhcmdldCA9IENWT3BlbkdMVGV4dHVyZUdldFRhcmdldChpbnB1dFZpZGVvVGV4dHVyZSk7
CisgICAgdmlkZW9UZXh0dXJlTmFtZSA9IENWT3BlbkdMVGV4dHVyZUdldE5hbWUoaW5wdXRWaWRl
b1RleHR1cmUpOworICAgIHZpZGVvVGV4dHVyZVRhcmdldCA9IENWT3BlbkdMVGV4dHVyZUdldFRh
cmdldChpbnB1dFZpZGVvVGV4dHVyZSk7CiAgICAgQ1ZPcGVuR0xUZXh0dXJlR2V0Q2xlYW5UZXhD
b29yZHMoaW5wdXRWaWRlb1RleHR1cmUsIGxvd2VyTGVmdCwgbG93ZXJSaWdodCwgdXBwZXJSaWdo
dCwgdXBwZXJMZWZ0KTsKICNlbGlmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZp
ZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTFRleHR1cmVHZXROYW1lKGlucHV0VmlkZW9UZXh0dXJl
KTsKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1cmVHZXRU
YXJnZXQoaW5wdXRWaWRlb1RleHR1cmUpOwotICAgIENWT3BlbkdMVGV4dHVyZUdldENsZWFuVGV4
Q29vcmRzKGlucHV0VmlkZW9UZXh0dXJlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVyUmln
aHQsIHVwcGVyTGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKGxvd2VyTGVmdCk7CisgICAgVU5VU0VE
X1BBUkFNKGxvd2VyUmlnaHQpOworICAgIFVOVVNFRF9QQVJBTSh1cHBlckxlZnQpOworICAgIFVO
VVNFRF9QQVJBTSh1cHBlclJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVO
VVNFRF9QQVJBTShoZWlnaHQpOworICAgIFVOVVNFRF9QQVJBTShvdXRwdXRUZXh0dXJlKTsKKyAg
ICBVTlVTRURfUEFSQU0ob3V0cHV0VGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwor
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1h
dCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBs
eUFscGhhKTsKKyAgICBVTlVTRURfUEFSQU0oZmxpcFkpOworICAgIFVOVVNFRF9QQVJBTShzd2Fw
Q29sb3JDaGFubmVscyk7CiAgICAgLy8gRklYTUU6IGRldGVybWluZSBob3cgdG8gYWNjZXNzIHJl
Y3Rhbmd1bGFyIHRleHR1cmVzIHZpYSBBTkdMRS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKICAgICBp
ZiAobG93ZXJMZWZ0WzFdIDwgdXBwZXJSaWdodFsxXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nLmNwcAppbmRleCAyZmZhNmI3NzY3MzczY2I3NzhiMGE1MDRmNTM5NWYwZTg0ZWNjNzZl
Li5iY2Q3MjQ2OGUwNWM3MjRiMzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
bXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShH
UkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCiAj
aW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogCiAjaWYgVVNFKExJQkVQT1hZKQpA
QCAtMzYsNyArMzYsNyBAQAogCiAjaWYgVVNFKE9QRU5HTF9FUykKICNpbmNsdWRlIDxPcGVuR0xF
Uy9FUzIvZ2wuaD4KLSNlbHNlCisjZWxpZiBVU0UoT1BFTkdMKQogI2luY2x1ZGUgPE9wZW5HTC9n
bC5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCmluZGV4IGNiNTE2
OTViNzFkYjc1Mjc2YWIxNDM4NjNjZWFiN2M3YjdjMTY3ZGUuLjNiODU0MzEyOTZjMzgxYWQ0YjVk
MTRhZWVlMTYyYzk4MmU1MDVlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaApA
QCAtMjQsMTEgKzI0LDEyIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZ19oCi0jZGVmaW5lIFRlbXBvcmFyeU9wZW5HTFNldHRpbmdfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKIAorI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCisKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382513</attachid>
            <date>2019-10-31 15:52:43 -0700</date>
            <delta_ts>2019-11-07 15:05:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202159-20191101095241.patch</filename>
            <type>text/plain</type>
            <size>333311</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU2ODgwMjJjYWJlZWVi
NDdhZWQ3NjkyZjFhYTI2ODI4NjNjZTYwZS4uMjA0YTg3N2Q1NDkxZDVjMDI2YjNmOThhNzRhNWYz
NzU5NTNkNzQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE5LTEwLTMxICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBDb21waWxlIEFOR0xFIGJhY2tl
bmQgZm9yIGlPUyBkZXZpY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjE1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgaW5pdFdpdGhHcmFwaGljc0NvbnRl
eHQzRDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRFR0xEaXNwbGF5OmNvbmZpZzpdKToK
KyAgICAgICAgKC1bV2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhT
aXplOnVzaW5nQWxwaGE6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxheTph
bmRDb25maWc6XSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4
dHVyZUNhY2hlQ1YubW06CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQ2FjaGVDVjo6dGV4dHVy
ZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJl
Q29waWVyQ1YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNv
cHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmg6CisKIDIwMTktMTAt
MjggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IGVudGVya2V5aGludCBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDE0YTcwOTU2MDAxY2Ji
OTk3MmI2ZTYwN2JkNzA3MTU2YmRiOWMwNWEuLmY3NTQwNzY3MjFiMDE1ZTVkNDU5ZWNmYTcwZDVm
ZDZkZDEzZGQ2NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0yMDU5LDcgKzIwNTksMTAgQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdD
M0RzaXplaSBjb3VudCwgR0MzRGUKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBw
cmltaXRpdmVDb3VudCkKIHsKLSNpZiAhVVNFKEFOR0xFKQorI2lmIFVTRShBTkdMRSkKKyAgICBV
TlVTRURfUEFSQU0oZWxlbWVudENvdW50KTsKKyAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlQ291
bnQpOworI2Vsc2UKICAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMjEyNyw5ICsyMTMwLDYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LAogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZWxlbWVudENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWl0aXZlQ291bnQp
OwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcC5vcmlnIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAub3Jp
ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNGE3MDk1NjAwMWNiYjk5NzJiNmU2MDdiZDcwNzE1NmJkYjljMDVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAub3JpZwpAQCAtMCwwICsxLDY1ODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaWYgRU5BQkxFKFdF
QkdMKQorCisjaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUg
IkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNs
dWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJKU0V4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisj
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhh
bGZGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNs
dWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUg
IldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5o
IgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAi
V2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5o
IgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMU2hh
ZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVNZXNzYWdlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENh
bGxTdGFjay5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5W
QVMpCisjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSk7CisKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0
dGVtcHRzIHsgMV9zIH07Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0g
MjU2Oworc3RhdGljIGNvbnN0IFNlY29uZHMgY2hlY2tDb250ZXh0TG9zc0hhbmRsaW5nRGVsYXkg
eyAzX3MgfTsKKworbmFtZXNwYWNlIHsKKyAgICAKKyAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAgICB7
CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycworICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKKyAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKKyAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCisgICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXN1bHQoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBhcnNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQor
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworCisgICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWR2YW5jZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KKyAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKKyAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKKworICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KKyAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKKworICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKKyAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAorICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAorCisgICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCisgICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAorCisgICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAorICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICAgICAgfTsKKworICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CisgICAgfTsKKworICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
eworICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKKyAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KKyAgICAgICAgICAgIGVtaXQoYyk7CisKKyAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQorICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7CisgICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAgICAg
ICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Cisg
ICAgICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
eworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcworICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOworICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAorICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKKyAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQorICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgZW1pdCgn
LycpOworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKKy8vIFJl
dHVybnMgZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0IHN0YXkgdGhlIHNhbWUuCitzdGF0aWMgYm9vbCBjbGlwMkQoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICBHQzNEc2l6
ZWkgc291cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCisgICAgR0MzRGludCogY2xp
cHBlZFgsIEdDM0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwgR0MzRHNp
emVpKmNsaXBwZWRIZWlnaHQpCit7CisgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYm
IGNsaXBwZWRXaWR0aCAmJiBjbGlwcGVkSGVpZ2h0KTsKKworICAgIEdDM0RpbnQgbGVmdCA9IHN0
ZDo6bWF4KHgsIDApOworICAgIEdDM0RpbnQgdG9wID0gc3RkOjptYXgoeSwgMCk7CisgICAgR0Mz
RGludCByaWdodCA9IDA7CisgICAgR0MzRGludCBib3R0b20gPSAwOworCisgICAgQ2hlY2tlZDxH
QzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZElucHV0UmlnaHQgPSBDaGVja2VkPEdDM0Rp
bnQ+KHgpICsgQ2hlY2tlZDxHQzNEc2l6ZWk+KHdpZHRoKTsKKyAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkSW5wdXRCb3R0b20gPSBDaGVja2VkPEdDM0RpbnQ+KHkp
ICsgQ2hlY2tlZDxHQzNEc2l6ZWk+KGhlaWdodCk7CisgICAgaWYgKCFjaGVja2VkSW5wdXRSaWdo
dC5oYXNPdmVyZmxvd2VkKCkgJiYgIWNoZWNrZWRJbnB1dEJvdHRvbS5oYXNPdmVyZmxvd2VkKCkp
IHsKKyAgICAgICAgcmlnaHQgPSBzdGQ6Om1pbihjaGVja2VkSW5wdXRSaWdodC51bnNhZmVHZXQo
KSwgc291cmNlV2lkdGgpOworICAgICAgICBib3R0b20gPSBzdGQ6Om1pbihjaGVja2VkSW5wdXRC
b3R0b20udW5zYWZlR2V0KCksIHNvdXJjZUhlaWdodCk7CisgICAgfQorCisgICAgaWYgKGxlZnQg
Pj0gcmlnaHQgfHwgdG9wID49IGJvdHRvbSkgeworICAgICAgICAqY2xpcHBlZFggPSAwOworICAg
ICAgICAqY2xpcHBlZFkgPSAwOworICAgICAgICAqY2xpcHBlZFdpZHRoID0gMDsKKyAgICAgICAg
KmNsaXBwZWRIZWlnaHQgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAq
Y2xpcHBlZFggPSBsZWZ0OworICAgICpjbGlwcGVkWSA9IHRvcDsKKyAgICAqY2xpcHBlZFdpZHRo
ID0gcmlnaHQgLSBsZWZ0OworICAgICpjbGlwcGVkSGVpZ2h0ID0gYm90dG9tIC0gdG9wOworCisg
ICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdp
ZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Cit9CisKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQz
RDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNiKSA6IG1fY29udGV4dChjYikgeyB9CisgICAgdmly
dHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKCkgPSBkZWZhdWx0OworCisg
ICAgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3ZlcnJpZGUgeyBtX2NvbnRleHQtPmZvcmNlTG9zdENv
bnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpSZWFsTG9zdENvbnRleHQpOyB9Citwcml2YXRl
OgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK2NsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIDogbV9jb250
ZXh0KGNiKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjaygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgb25FcnJvck1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+cHJpbnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7CisgICAg
fQorcHJpdmF0ZToKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRleHQ7Cit9
OworCitjbGFzcyBJbnNwZWN0b3JTY29wZWRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0IHsKK3B1Ymxp
YzoKKyAgICBJbnNwZWN0b3JTY29wZWRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0KFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQsIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3Byb2dyYW0ocHJvZ3JhbSkKKyAgICB7
CisgICAgICAgIHNob3dIaWdodGxpZ2h0KCk7CisgICAgfQorCisgICAgfkluc3BlY3RvclNjb3Bl
ZFNoYWRlclByb2dyYW1IaWdobGlnaHQoKQorICAgIHsKKyAgICAgICAgaGlkZUhpZ2hsaWdodCgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNob3dIaWdodGxpZ2h0KCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcm9ncmFtIHx8IExJS0VMWSghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojppc1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKG1fY29udGV4dCwgKm1fcHJvZ3JhbSkpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChoYXNCdWZmZXJCaW5kaW5nKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HKSkgeworICAgICAgICAgICAgaWYgKCFoYXNC
dWZmZXJCaW5kaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElORykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFy
YW1ldGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFy
YW1ldGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICAgICAgICAg
IGlmIChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworI2Vu
ZGlmCisgICAgICAgIH0KKworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfQ09MT1IsIG1fc2F2ZWRCbGVuZC5jb2xvcik7CisgICAgICAgIHNhdmVCbGVuZFZh
bHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0IsIG1fc2F2ZWRCbGVuZC5l
cXVhdGlvblJHQik7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORF9FUVVBVElPTl9BTFBIQSwgbV9zYXZlZEJsZW5kLmVxdWF0aW9uQWxwaGEpOworICAgICAg
ICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX1JHQiwgbV9zYXZl
ZEJsZW5kLnNyY1JHQik7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9TUkNfQUxQSEEsIG1fc2F2ZWRCbGVuZC5zcmNBbHBoYSk7CisgICAgICAgIHNhdmVC
bGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfUkdCLCBtX3NhdmVkQmxlbmQu
ZHN0UkdCKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X0RTVF9BTFBIQSwgbV9zYXZlZEJsZW5kLmRzdEFscGhhKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFs
dWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5ELCBtX3NhdmVkQmxlbmQuZW5hYmxlZCk7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCByZWQgPSAxMTEuMCAvIDI1NS4wOworICAgICAg
ICBzdGF0aWMgY29uc3QgR0MzRGZsb2F0IGdyZWVuID0gMTY4LjAgLyAyNTUuMDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IEdDM0RmbG9hdCBibHVlID0gMjIwLjAgLyAyNTUuMDsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IEdDM0RmbG9hdCBhbHBoYSA9IDIuMCAvIDMuMDsKKworICAgICAgICBtX2NvbnRl
eHQuZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC5i
bGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgbV9jb250ZXh0LmJs
ZW5kRXF1YXRpb24oR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREKTsKKyAgICAgICAgbV9jb250
ZXh0LmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IsIEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKworICAgICAgICBtX2RpZEFwcGx5ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2RpZEFwcGx5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9z
YXZlZEJsZW5kLmVuYWJsZWQpCisgICAgICAgICAgICBtX2NvbnRleHQuZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOworCisgICAgICAgIGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJyYXk+
JiBjb2xvciA9IG1fc2F2ZWRCbGVuZC5jb2xvcjsKKyAgICAgICAgbV9jb250ZXh0LmJsZW5kQ29s
b3IoY29sb3ItPml0ZW0oMCksIGNvbG9yLT5pdGVtKDEpLCBjb2xvci0+aXRlbSgyKSwgY29sb3It
Pml0ZW0oMykpOworICAgICAgICBtX2NvbnRleHQuYmxlbmRFcXVhdGlvblNlcGFyYXRlKG1fc2F2
ZWRCbGVuZC5lcXVhdGlvblJHQiwgbV9zYXZlZEJsZW5kLmVxdWF0aW9uQWxwaGEpOworICAgICAg
ICBtX2NvbnRleHQuYmxlbmRGdW5jU2VwYXJhdGUobV9zYXZlZEJsZW5kLnNyY1JHQiwgbV9zYXZl
ZEJsZW5kLmRzdFJHQiwgbV9zYXZlZEJsZW5kLnNyY0FscGhhLCBtX3NhdmVkQmxlbmQuZHN0QWxw
aGEpOworCisgICAgICAgIG1fc2F2ZWRCbGVuZC5jb2xvciA9IG51bGxwdHI7CisKKyAgICAgICAg
bV9kaWRBcHBseSA9IGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgc2F2ZUJsZW5kVmFsdWUoR0MzRGVudW0gYXR0YWNobWVudCwgVCYgZGVzdGluYXRp
b24pCisgICAgeworICAgICAgICBXZWJHTEFueSBwYXJhbSA9IG1fY29udGV4dC5nZXRQYXJhbWV0
ZXIoYXR0YWNobWVudCk7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KHBh
cmFtKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gV1RGOjpnZXQ8VD4ocGFyYW0pOworICAg
IH0KKworICAgIGJvb2wgaGFzQnVmZmVyQmluZGluZyhHQzNEZW51bSBwbmFtZSkKKyAgICB7Cisg
ICAgICAgIFdlYkdMQW55IGJpbmRpbmcgPSBtX2NvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPFdl
YkdMRnJhbWVidWZmZXI+PihiaW5kaW5nKSAmJiBXVEY6OmdldDxSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4+KGJpbmRpbmcpOworICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPj4oYmluZGluZykgJiYgV1RGOjpnZXQ8
UmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPj4oYmluZGluZyk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVudChH
QzNEZW51bSBhdHRhY2htZW50KQorICAgIHsKKyAgICAgICAgV2ViR0xBbnkgYXR0YWNobWVudFBh
cmFtZXRlciA9IG1fY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CisgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTx1bnNpZ25lZD4oYXR0YWNobWVudFBhcmFtZXRlcikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChXVEY6OmdldDx1bnNpZ25lZD4oYXR0
YWNobWVudFBhcmFtZXRlcikgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBSZWZQdHI8RmxvYXQz
MkFycmF5PiBjb2xvcjsKKyAgICAgICAgdW5zaWduZWQgZXF1YXRpb25SR0IgeyAwIH07CisgICAg
ICAgIHVuc2lnbmVkIGVxdWF0aW9uQWxwaGEgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIHNyY1JH
QiB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgc3JjQWxwaGEgeyAwIH07CisgICAgICAgIHVuc2ln
bmVkIGRzdFJHQiB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgZHN0QWxwaGEgeyAwIH07CisgICAg
ICAgIGJvb2wgZW5hYmxlZCB7IGZhbHNlIH07CisgICAgfSBtX3NhdmVkQmxlbmQ7CisKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBtX2NvbnRleHQ7CisgICAgV2ViR0xQcm9ncmFtKiBt
X3Byb2dyYW0geyBudWxscHRyIH07CisgICAgYm9vbCBtX2RpZEFwcGx5IHsgZmFsc2UgfTsKK307
CisKK3N0YXRpYyBib29sIGlzSGlnaFBlcmZvcm1hbmNlQ29udGV4dChjb25zdCBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+JiBjb250ZXh0KQoreworICAgIHJldHVybiBjb250ZXh0LT5wb3dlclBy
ZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24oKSA9PSBXZWJHTFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBl
cmZvcm1hbmNlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiB0eXBlKQor
eworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgaWYgKHR5cGUgPT0gIndlYmdsMiIgJiYgIVJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViR0wyRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworI2Vu
ZGlmCisKKyAgICBib29sIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBI
b3N0V2luZG93KiBob3N0V2luZG93ID0gbnVsbHB0cjsKKworICAgIGF1dG8qIGNhbnZhc0VsZW1l
bnQgPSBpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzKSA/ICZkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4oY2FudmFzKSA6IG51bGxwdHI7CisKKyAgICBpZiAoY2FudmFzRWxlbWVudCkgewor
ICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXNFbGVtZW50LT5kb2N1bWVudCgpOwor
ICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICAgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFRo
ZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBvZiBhIG5ldyBXZWJHTCBj
b250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisgICAgICAgIC8vIHBhcnRpY3Vs
YXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1lcyB2aWEgdGhl
IEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVy
KCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkp
IHsKKyAgICAgICAgICAgIGNhbnZhc0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50
LAorICAgICAgICAgICAgICAgIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxh
YmxlOjpZZXMsICJXZWIgcGFnZSB3YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29u
dGV4dC4iKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CisgICAg
ICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVudC5wYWdlKCk7CisgICAgICAgIGJvb2wgZm9yY2lu
Z1BlbmRpbmdQb2xpY3kgPSBmcmFtZS0+c2V0dGluZ3MoKS5pc0ZvcmNlUGVuZGluZ1dlYkdMUG9s
aWN5KCk7CisKKyAgICAgICAgaWYgKGZvcmNpbmdQZW5kaW5nUG9saWN5IHx8IChwYWdlICYmICF0
b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKSkgeworICAgICAgICAgICAgV2ViR0xMb2Fk
UG9saWN5IHBvbGljeSA9IGZvcmNpbmdQZW5kaW5nUG9saWN5ID8gV2ViR0xQZW5kaW5nQ3JlYXRp
b24gOiBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVS
TCh0b3BEb2N1bWVudC51cmwoKSk7CisKKyAgICAgICAgICAgIGlmIChwb2xpY3kgPT0gV2ViR0xC
bG9ja0NyZWF0aW9uKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBm
b3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5o
b3N0KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwb2xpY3kgPT0gV2ViR0xQZW5kaW5nQ3Jl
YXRpb24pIHsKKyAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJXZWJHTCBwb2xpY3kgaXMgcGVu
ZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7CisgICAgICAgICAgICAgICAg
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VXZWJHTFVzZXNMb3dQb3dl
cigpKSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2UgPT0gR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkKKyAgICAgICAg
ICAgICAgICBMT0coV2ViR0wsICJPdmVycmlkaW5nIHBvd2VyUHJlZmVyZW5jZSBmcm9tIGhpZ2gt
cGVyZm9ybWFuY2UgdG8gbG93LXBvd2VyLiIpOworICAgICAgICAgICAgYXR0cmlidXRlcy5wb3dl
clByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFnZSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMu
ZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICAgICAg
aG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAg
fQorCisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB0cnVlOworICAgIGF0dHJpYnV0ZXMu
c2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKworICAgIGF0dHJpYnV0ZXMuaW5pdGlhbFBvd2VyUHJl
ZmVyZW5jZSA9IGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNlOworCisKKyNpZiBFTkFCTEUoV0VC
R0wyKQorICAgIGlmICh0eXBlID09ICJ3ZWJnbDIiKQorICAgICAgICBhdHRyaWJ1dGVzLmlzV2Vi
R0wyID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgaWYgKGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
IHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEgV2ViR0wgY29udGV4dCB0aGF0IGxvb2tz
IHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kgcmVzb2x1dGlvbiBpZiB1c2VkLiIpOwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gcmVuZGVy
aW5nQ29udGV4dCA9IG51bGxwdHI7CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICAgICAgaWYgKHR5
cGUgPT0gIndlYmdsMiIpCisgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0ID0gV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKGNhbnZhcywgYXR0cmlidXRlcyk7CisgICAgICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKGNhbnZhcywgYXR0cmlidXRlcyk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsK
KyAgICB9CisKKyAgICBhdXRvIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0
dHJpYnV0ZXMsIGhvc3RXaW5kb3cpOworICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgaWYgKGNhbnZhc0VsZW1lbnQpIHsKKyAgICAg
ICAgICAgIGNhbnZhc0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LAorICAgICAg
ICAgICAgICAgIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMs
ICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byYgZXh0ZW5zaW9ucyA9IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfRVhU
X2RlYnVnX21hcmtlciJfcykpCisgICAgICAgIGV4dGVuc2lvbnMucHVzaEdyb3VwTWFya2VyRVhU
KCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiX3MpOworCisjaWYgRU5BQkxFKFdFQkdMMikgJiYgUExB
VEZPUk0oTUFDKSAmJiAhVVNFKEFOR0xFKQorICAgIC8vIGdsVGV4U3RvcmFnZSgpIHdhcyBvbmx5
IGFkZGVkIHRvIENvcmUgaW4gT3BlbkdMIDQuMi4KKyAgICAvLyBIb3dldmVyLCBhY2NvcmRpbmcg
dG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL29wZW5nbC9jYXBhYmlsaXRpZXMvIGFsbCBB
cHBsZSBHUFVzIHN1cHBvcnQgdGhpcyBleHRlbnNpb24uCisgICAgaWYgKGF0dHJpYnV0ZXMuaXNX
ZWJHTDIgJiYgIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FSQl90ZXh0dXJlX3N0b3JhZ2UiKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0OworI2lmIEVOQUJMRShX
RUJHTDIpCisgICAgaWYgKHR5cGUgPT0gIndlYmdsMiIpCisgICAgICAgIHJlbmRlcmluZ0NvbnRl
eHQgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoY2FudmFzLCBjb250ZXh0LnJlbGVh
c2VOb25OdWxsKCksIGF0dHJpYnV0ZXMpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICByZW5k
ZXJpbmdDb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoY2FudmFzLCBjb250
ZXh0LnJlbGVhc2VOb25OdWxsKCksIGF0dHJpYnV0ZXMpOworICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOworCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9CisK
K1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoQ2Fu
dmFzQmFzZSYgY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAg
OiBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQorICAgICwgbV9kaXNwYXRj
aENvbnRleHRMb3N0RXZlbnRUaW1lcihjYW52YXMuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAq
dGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVu
dCkKKyAgICAsIG1fZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZEV2ZW50VGltZXIoY2FudmFzLnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
aXNwYXRjaENvbnRleHRDaGFuZ2VkRXZlbnQpCisgICAgLCBtX3Jlc3RvcmVUaW1lcihjYW52YXMu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6Om1heWJlUmVzdG9yZUNvbnRleHQpCisgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykK
KyAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRv
Q29uc29sZSkKKyAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQorICAgICwg
bV9jaGVja0ZvckNvbnRleHRMb3NzSGFuZGxpbmdUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNoZWNrRm9yQ29udGV4dExvc3NIYW5kbGluZykKK3sKKyAgICBtX2Rpc3Bh
dGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN1c3BlbmRJZk5lZWRlZCgpOworICAgIG1fZGlzcGF0
Y2hDb250ZXh0Q2hhbmdlZEV2ZW50VGltZXIuc3VzcGVuZElmTmVlZGVkKCk7CisgICAgbV9yZXN0
b3JlVGltZXIuc3VzcGVuZElmTmVlZGVkKCk7CisKKyAgICByZWdpc3RlcldpdGhXZWJHTFN0YXRl
VHJhY2tlcigpOworICAgIG1fY2hlY2tGb3JDb250ZXh0TG9zc0hhbmRsaW5nVGltZXIuc3RhcnRP
bmVTaG90KGNoZWNrQ29udGV4dExvc3NIYW5kbGluZ0RlbGF5KTsKK30KKworV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiBjYW52
YXMsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0LCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2Fu
dmFzKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCisgICAgLCBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyKGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICp0
aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50
KQorICAgICwgbV9kaXNwYXRjaENvbnRleHRDaGFuZ2VkRXZlbnRUaW1lcihjYW52YXMuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCAqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRp
c3BhdGNoQ29udGV4dENoYW5nZWRFdmVudCkKKyAgICAsIG1fcmVzdG9yZVRpbWVyKGNhbnZhcy5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksICp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6bWF5YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQor
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25z
b2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2NoZWNrRm9y
Q29udGV4dExvc3NIYW5kbGluZ1RpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y2hlY2tGb3JDb250ZXh0TG9zc0hhbmRsaW5nKQoreworICAgIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIuc3VzcGVuZElmTmVlZGVkKCk7CisgICAgbV9kaXNwYXRjaENvbnRleHRD
aGFuZ2VkRXZlbnRUaW1lci5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICBtX3Jlc3RvcmVUaW1lci5z
dXNwZW5kSWZOZWVkZWQoKTsKKworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0R3Jv
dXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KCp0aGlzKTsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPmFkZENsaWVudCgqdGhpcyk7CisKKyAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3
cG9ydERpbXMpOworCisgICAgc2V0dXBGbGFncygpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0
KCk7CisgICAgcmVnaXN0ZXJXaXRoV2ViR0xTdGF0ZVRyYWNrZXIoKTsKKyAgICBtX2NoZWNrRm9y
Q29udGV4dExvc3NIYW5kbGluZ1RpbWVyLnN0YXJ0T25lU2hvdChjaGVja0NvbnRleHRMb3NzSGFu
ZGxpbmdEZWxheSk7CisKKyAgICBhZGRBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXJJZk5lY2Vz
c2FyeSgpOworfQorCitXZWJHTENhbnZhcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjYW52
YXMoKQoreworICAgIGF1dG8mIGJhc2UgPSBjYW52YXNCYXNlKCk7CisjaWYgRU5BQkxFKE9GRlND
UkVFTl9DQU5WQVMpCisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhcz4oYmFzZSkpCisgICAgICAg
IHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzPihiYXNlKTsKKyNlbmRpZgorICAgIHJl
dHVybiAmZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGJhc2UpOworfQorCisjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVMpCitPZmZzY3JlZW5DYW52YXMqIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6Om9mZnNjcmVlbkNhbnZhcygpCit7CisgICAgYXV0byYgYmFzZSA9IGNhbnZhc0Jhc2Uo
KTsKKyAgICBpZiAoIWlzPE9mZnNjcmVlbkNhbnZhcz4oYmFzZSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzPihiYXNlKTsKK30K
KyNlbmRpZgorCisvLyBXZSBjaGVjayBmb3IgY29udGV4dCBsb3NzIGhhbmRsaW5nIGFmdGVyIGEg
ZmV3IHNlY29uZHMgdG8gZ2l2ZSB0aGUgSlMgYSBjaGFuY2UgdG8gcmVnaXN0ZXIgdGhlIGV2ZW50
IGxpc3RlbmVycworLy8gYW5kIHRvIGRpc2NhcmQgdGVtcG9yYXJ5IEdMIGNvbnRleHRzIChlLmcu
IGZlYXR1cmUgZGV0ZWN0aW9uKS4KK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hl
Y2tGb3JDb250ZXh0TG9zc0hhbmRsaW5nKCkKK3sKKyAgICBhdXRvIGNhbnZhcyA9IGh0bWxDYW52
YXMoKTsKKyAgICBpZiAoIWNhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjYW52
YXMtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSBjYW52
YXMtPmRvY3VtZW50KCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBoYW5kbGVzQ29udGV4dExvc3MgPSBjYW52YXMtPmhhc0V2ZW50TGlzdGVuZXJz
KGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQpICYmIGNhbnZhcy0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQpOworICAgIHBh
Z2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2UoRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpwYWdlSGFuZGxlc1dlYkdMQ29udGV4dExvc3NLZXkoKSwgaGFuZGxl
c0NvbnRleHRMb3NzID8gRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp5ZXNLZXkoKSA6IERpYWdub3N0
aWNMb2dnaW5nS2V5czo6bm9LZXkoKSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVnaXN0ZXJXaXRoV2ViR0xTdGF0ZVRyYWNrZXIoKQor
eworICAgIGF1dG8gY2FudmFzID0gaHRtbENhbnZhcygpOworICAgIGlmICghY2FudmFzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gY2FudmFzLT5kb2N1bWVudCgpLnBhZ2Uo
KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHRyYWNrZXIg
PSBwYWdlLT53ZWJHTFN0YXRlVHJhY2tlcigpOworICAgIGlmICghdHJhY2tlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90cmFja2VyVG9rZW4gPSB0cmFja2VyLT50b2tlbihtX2F0dHJpYnV0
ZXMuaW5pdGlhbFBvd2VyUHJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0
TG9zdCk7CisgICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOworICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOworICAgIG1fcGFja0FsaWdu
bWVudCA9IDQ7CisgICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrRmxpcFkg
PSBmYWxzZTsKKyAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTDsKKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRyOworICAgIG1fY3Vy
cmVudFByb2dyYW0gPSBudWxscHRyOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gbnVsbHB0
cjsKKyAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOworICAgIG1fcmVuZGVy
YnVmZmVyQmluZGluZyA9IG51bGxwdHI7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVlOworICAgIG1f
c3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsK
KyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY1Jl
ZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNN
YXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZG
OworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9yc1RvQ29uc29s
ZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisgICAgbV9jbGVh
ckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNv
bG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jbGVhckRl
cHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBt
X2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwor
CisgICAgR0MzRGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4
dHVyZVVuaXRzLmNsZWFyKCk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IG51bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHM7ICsraSkKKyAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJl
VW5pdHMuYWRkKGkpOworCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJ
QlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0
ZXhBdHRyaWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21h
eFRleHR1cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29t
cHV0ZUxldmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAg
bV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVN
YXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0
dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9T
SVpFLCAmbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMg
ZnJvbSBFWFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdC
dWZmZXJzID0gMDsKKyAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOworCisgICAgbV9iYWNr
RHJhd0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNX
ZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9y
dGVkID0gZmFsc2U7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKKworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisKKyAgICBJbnRTaXplIGNhbnZhc1Np
emUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXNT
aXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOworICAgIG1fY29udGV4dC0+dmlld3Bv
cnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICBt
X2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhl
aWdodCgpKTsKKworICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhtYWtlVW5p
cXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaz4odGhpcykpOworICAgIG1fY29u
dGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobWFrZVVuaXF1ZTxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaz4odGhpcykpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnNldHVwRmxhZ3MoKQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOwor
CisgICAgYXV0byBjYW52YXMgPSBodG1sQ2FudmFzKCk7CisgICAgaWYgKGNhbnZhcykgeworICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGNhbnZhcy0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAg
ICAgICBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJH
TEVycm9yc1RvQ29uc29sZUVuYWJsZWQoKTsKKyAgICB9CisKKyAgICBtX2lzR0xFUzJDb21wbGlh
bnQgPSBtX2NvbnRleHQtPmlzR0xFUzJDb21wbGlhbnQoKTsKKyAgICBpZiAobV9pc0dMRVMyQ29t
cGxpYW50KSB7CisgICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCkuaXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5pc0Vu
YWJsZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuaXNF
bmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNE
ZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5pc0VuYWJs
ZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KKyAgICBtX2lzUm9idXN0
bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmlzRW5hYmxlZCgi
R0xfRVhUX3JvYnVzdG5lc3MiKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjphZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYg
KCFtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBt
X2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXJJZk5l
Y2Vzc2FyeSgpCit7CisgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB2aXNpYmlsaXR5
IGNoYW5nZXMgZm9yIGNvbnRleHRzCisgICAgLy8gdGhhdCBhcmUgdXNpbmcgdGhlIGhpZ2gtcGVy
Zm9ybWFuY2UgR1BVLgorICAgIGlmICghaXNIaWdoUGVyZm9ybWFuY2VDb250ZXh0KG1fY29udGV4
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNhbnZhcyA9IGh0bWxDYW52YXMoKTsK
KyAgICBpZiAoIWNhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFnZSA9IGNh
bnZhcy0+ZG9jdW1lbnQoKS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBwYWdlLT5hZGRBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIoKnRoaXMpOworCisg
ICAgLy8gV2Ugd29uJ3QgZ2V0IGEgc3RhdGUgY2hhbmdlIHJpZ2h0IGF3YXksIHNvCisgICAgLy8g
bWFrZSBzdXJlIHRoZSBjb250ZXh0IGtub3dzIGlmIGl0IHZpc2libGUgb3Igbm90LgorICAgIGlm
IChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dFZpc2liaWxpdHkocGFn
ZS0+aXNWaXNpYmxlKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJl
bW92ZUFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlcigpCit7CisgICAgYXV0byogY2FudmFzID0g
aHRtbENhbnZhcygpOworICAgIGlmIChjYW52YXMpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBjYW52YXMtPmRvY3VtZW50KCkucGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+cmVtb3ZlQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyKCp0aGlzKTsKKyAgICB9Cit9CisKK1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6On5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCkKK3sKKyAgICAvLyBS
ZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBs
YXN0IHJlZmVyZW5jZQorICAgIC8vIHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3Qg
Y29udGV4dCBpcyByZW1vdmVkIGZyb20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3VuZEFy
cmF5QnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51
bGxwdHI7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKKyAgICBtX3Zl
cnRleEF0dHJpYjBCdWZmZXIgPSBudWxscHRyOworICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxs
cHRyOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICBtX3JlYWRGcmFt
ZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IG51
bGxwdHI7CisKKyAgICBmb3IgKGF1dG8mIHRleHR1cmVVbml0IDogbV90ZXh0dXJlVW5pdHMpIHsK
KyAgICAgICAgdGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7CisgICAgICAg
IHRleHR1cmVVbml0LnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFw
ID0gbnVsbHB0cjsKKworICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Cisg
ICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0KCp0
aGlzKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhXZWJHTFByb2dy
YW06Omluc3RhbmNlc011dGV4KCkpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogV2ViR0xQ
cm9ncmFtOjppbnN0YW5jZXMobG9jaykpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9
PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIGFueSBXZWJHTFByb2dy
YW0gZnJvbSB0aGUgaW5zdGFuY2VzIGxpc3QsIGFzIHRoZXkgbWF5IHN0aWxsIGV4aXN0LgorICAg
ICAgICAgICAgICAgIC8vIE9ubHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGlvbiB3aXRoIGEgV2ViR0wg
Y29udGV4dC4KKyAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IG51bGxwdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBY3Rpdml0eVN0
YXRlQ2hhbmdlT2JzZXJ2ZXIoKTsKKworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgICAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIG1fY29udGV4dC0+c2V0RXJyb3JNZXNz
YWdlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIG1fY29udGV4dCA9IG51bGxwdHI7CisgICAg
fQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdl
ZCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgbV9sYXllckNsZWFy
ZWQgPSBmYWxzZTsKKworICAgIGF1dG8qIGNhbnZhcyA9IGh0bWxDYW52YXMoKTsKKyAgICBpZiAo
IWNhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBj
YW52YXMtPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94
ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBodG1sQ2FudmFzKCktPmNsZWFyQ29w
aWVkSW1hZ2UoKTsKKyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNQaXhl
bHNDaGFuZ2VkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGly
dHkpIHsKKyAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAg
ICAgY2FudmFzLT5kaWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2Fu
dmFzU2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6bWFya0NvbnRleHRDaGFuZ2VkQW5kTm90aWZ5Q2FudmFzT2JzZXJ2ZXIoKQor
eworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIGlmICghaXNBY2NlbGVyYXRlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYW52YXMgPSBodG1sQ2FudmFzKCk7CisgICAg
aWYgKCFjYW52YXMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCogcmVuZGVyQm94
ID0gY2FudmFzLT5yZW5kZXJCb3goKTsKKyAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICBjYW52YXMtPm5vdGlmeU9ic2Vy
dmVyc0NhbnZhc0NoYW5nZWQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52
YXNTaXplKCkpKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcklm
Q29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY29udGV4dC0+
bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKKyAgICAgICAgfHwgbV9wcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3IpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0
QXR0cmlidXRlcygpOworICAgIEFTU0VSVChjb250ZXh0QXR0cmlidXRlcyk7CisKKyAgICAvLyBE
ZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBh
c2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCisgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAm
JiAhbV9zY2lzc29yRW5hYmxlZDsKKworICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAm
IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgbV9jb250ZXh0
LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9yWzFd
IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8gbV9j
bGVhckNvbG9yWzJdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JN
YXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1
ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cy0+ZGVwdGgpIHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8
fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5k
ZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNp
bCkgeworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNsZWFyTWFzayB8
PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICBtX2NvbnRl
eHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAweEZGRkZG
RkZGKTsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDAp
OworICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKworICAgIHJlc3RvcmVTdGF0ZUFm
dGVyQ2xlYXIoKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2Jq
ZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgbV9sYXllckNsZWFy
ZWQgPSB0cnVlOworCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCit7CisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0s
IG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9y
WzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JN
YXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2Ns
ZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsK
KyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05ULCBtX3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFz
ayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvKiBjYW52YXMgPSBodG1sQ2FudmFzKCk7CisgICAgaWYgKCFjYW52YXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjYW52YXMtPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKKyAg
ICAgICAgY2FudmFzLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKworICAgIC8vIFVudGlsIHRo
ZSBjYW52YXMgaXMgd3JpdHRlbiB0byBieSB0aGUgYXBwbGljYXRpb24sIHRoZSBjbGVhciB0aGF0
CisgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2FzIGNvbXBvc2l0ZWQgc2hvdWxkIGJlIGlnbm9y
ZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgaWYgKG1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVk
KCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoY2FudmFzLT5idWZmZXIoKSk7
CisKKyAgICAgICAgY2FudmFzLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOworICAgIH0gZWxzZQor
ICAgICAgICBjYW52YXMtPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7CisKKyAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVh
cmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjYW52YXMtPmNsZWFyQ29waWVkSW1hZ2UoKTsK
KyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAgICBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcy0+YnVmZmVyKCkpOworfQorCitSZWZQdHI8
SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICByZXR1
cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworfQorCitX
ZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbGFnIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleHR1cmVFeHRlbnNpb25GbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9h
dExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxl
ZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBGQk8g
dXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4U2l6ZSA9IHN0
ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7CisgICAgR0Mz
RGludCBtYXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsK
KyAgICBHQzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnRE
aW1zWzFdKTsKKyAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVp
Z2h0ID0gY2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOworCisgICAgaWYgKG1fbmVlZHNVcGRh
dGUpIHsKKyAgICAgICAgbm90aWZ5Q2FudmFzQ29udGVudENoYW5nZWQoKTsKKyAgICAgICAgbV9u
ZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFy
ayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZm
ZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdo
YXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdo
dCk7CisKKyAgICBhdXRvJiB0ZXh0dXJlVW5pdCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nLmdl
dCgpKSk7CisgICAgaWYgKHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcgJiYgdGV4dHVyZVVu
aXQudGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKHRleHR1cmVFeHRlbnNp
b25GbGFncygpKSkKKyAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMuYWRkKG1fYWN0
aXZlVGV4dHVyZVVuaXQpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5k
aW5nLmdldCgpKSk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKK30KKworaW50IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5o
ZWlnaHQoKTsKK30KKwordW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUlu
Qnl0ZXMoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6CisgICAgICAgIHJldHVybiBzaXpl
b2YoR0MzRGludCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEZmxvYXQpOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRz
LnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRl
eHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7CisgICAgbV9jb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0
dGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXByb2dyYW0t
PmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIg
YXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVj
dE9yWmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uQXR0YWNoZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImJpbmRB
dHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxp
ZGF0ZUxvY2F0aW9uTGVuZ3RoKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5h
bWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgInJlc2VydmVkIHByZWZpeCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJiaW5kQXR0cmliTG9jYXRpb24iLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFtZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBXZWJHTE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQoreworICAgIGRlbGV0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUo
Y29udGV4dEdyb3VwKCksICp0aGlzKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmpl
Y3Qgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBib29s
IGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1
ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAg
ICAgYnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0
KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZl
ciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAg
ICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1
ZmZlcihidWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
KyNpZiBFTkFCTEUoV0VCR0wyKQorICAgICAgICBpZiAoaXNXZWJHTDIoKSkgeworICAgICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBtX2JvdW5kQ29weVJlYWRCdWZmZXIgPSBidWZmZXI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JV
RkZFUjoKKyAgICAgICAgICAgICAgICBtX2JvdW5kQ29weVdyaXRlQnVmZmVyID0gYnVmZmVyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgbV9ib3VuZFBpeGVsUGFja0J1
ZmZlciA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAg
bV9ib3VuZFBpeGVsVW5wYWNrQnVmZmVyID0gYnVmZmVyOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIg
PSBidWZmZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBtX2JvdW5kVW5p
Zm9ybUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT5iaW5k
QnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisg
ICAgICAgIGJ1ZmZlci0+c2V0VGFyZ2V0KHRhcmdldCwgaXNXZWJHTDIoKSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyKQoreworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0
ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9
IDA7CisKKyAgICBib29sIGlzV2ViR0wyRHJhd0ZyYW1lYnVmZmVyVGFyZ2V0ID0gZmFsc2U7Cisj
aWYgRU5BQkxFKFdFQkdMMikKKyAgICBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCA9IGlz
V2ViR0wyKCkgJiYgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0ZSQU1FQlVGRkVS
OworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiB8fCBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZl
clRhcmdldCkgeworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CisgICAgfQorI2lmIEVOQUJMRShXRUJHTDIpCisgICAgaWYgKGlz
V2ViR0wyKCkgJiYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIgfHwg
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSkgeworICAgICAg
ICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CisgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVi
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikp
OworICAgIGlmIChidWZmZXIpCisgICAgICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgp
OworICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlckJ1ZmZlcikKK3sKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09i
amVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcmVuZGVyQnVmZmVy
ID0gMDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7Cisg
ICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKHJlbmRl
ckJ1ZmZlcikpOworICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAgIHJlbmRlckJ1ZmZlci0+
c2V0SGFzRXZlckJlZW5Cb3VuZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQor
eworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5k
VGV4dHVyZSIsIHRleHR1cmUsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRl
bGV0ZWQpCisgICAgICAgIHRleHR1cmUgPSBudWxscHRyOworICAgIGlmICh0ZXh0dXJlICYmIHRl
eHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdldFRhcmdldCgpICE9IHRhcmdldCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0
aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgR0MzRGludCBtYXhM
ZXZlbCA9IDA7CisgICAgYXV0byYgdGV4dHVyZVVuaXQgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XTsKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEKSB7CisgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJl
OworICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworICAgICAgICBpZiAodGV4
dHVyZSAmJiB0ZXh0dXJlLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUodGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkpKQorICAgICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMuYWRkKG1fYWN0
aXZlVGV4dHVyZVVuaXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3VucmVuZGVyYWJs
ZVRleHR1cmVVbml0cy5yZW1vdmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7CisgICAgfSBlbHNlIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKKyAgICAg
ICAgdGV4dHVyZVVuaXQudGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAg
bWF4TGV2ZWwgPSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisgICAgICAgIGlmICh0ZXh0dXJl
ICYmIHRleHR1cmUtPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSh0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3Mo
KSkpCisgICAgICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5hZGQobV9hY3RpdmVU
ZXh0dXJlVW5pdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4
dHVyZVVuaXRzLnJlbW92ZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
YmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUp
KTsKKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwg
bWF4TGV2ZWwpOworCisgICAgLy8gTm90ZTogcHJldmlvdXNseSB3ZSB1c2VkIHRvIGF1dG9tYXRp
Y2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8vIHJlcGVhdCBtb2RlIHRvIENMQU1Q
X1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNhdXNlIE9wZW5HTAorICAgIC8vIEVT
IDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVnIGluIHRoZSBzcGVjaWZpY2F0aW9u
KSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0aW9uIGhhcyBubyBjb250cm9sIG92
ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNpb24uIEhvd2V2ZXIsIGl0IGFwcGVh
cnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24gYWxsCisgICAgLy8gcGxhdGZvcm1z
IGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEgSGFzaE1hcCBmcm9tIHRleHR1cmUg
SUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2ZSBub3QgaGFkIGFueSBjb21wbGFp
bnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiByZW1vdmVkLgorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZs
b2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJs
ZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Ymxl
bmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhh
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRF
cXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRp
b24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKwor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFj
dG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZh
Y3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9y
LCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3Jj
QWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8vIE5vdGU6IEFscGhhIGRvZXMgbm90
IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4KKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNy
Y1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRGdW5j
U2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
aW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOwor
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Cisg
ICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVy
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVm
ZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBPcHRpb25hbDxC
dWZmZXJEYXRhU291cmNlPiYmIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJEYXRhIiwgIm51bGwgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1l
dGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CisgICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEuZ2V0KCkpKSB7CisgICAgICAg
ICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEt
PmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7CisgICAgICAgIGlmIChtX2NvbnRl
eHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgICAgICAvLyBU
aGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgICAgICBidWZmZXItPmRp
c2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICAgICAgfQorICAgIH0sIGRhdGEudmFsdWUoKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIE9wdGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+
JiYgZGF0YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAg
IFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29j
aWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS5n
ZXQoKSkpIHsKKyAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJh
bmdlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2NvbnRl
eHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgICAgICBtX2NvbnRleHQt
PmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmRhdGEoKSk7CisgICAgICAgIGlmIChtX2NvbnRleHQt
Pm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgICAgICAvLyBUaGUg
YnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgICAgICBidWZmZXItPmRp
c2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICAgICAgfQorICAgIH0sIGRhdGEudmFsdWUoKSk7
Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpIHsKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAgICAgICBpZiAoaXNXZWJHTDEoKSB8fCAodGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikpIHsKKyNlbmRpZgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKwor
ICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVi
dWZmZXJCaW5kaW5nOworCisgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZlciB8fCAhdGFyZ2V0RnJh
bWVidWZmZXItPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFOworICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKKyAgICBHQzNEZW51bSByZXN1bHQgPSB0YXJnZXRGcmFtZWJ1ZmZlci0+
Y2hlY2tTdGF0dXMoJnJlYXNvbik7CisgICAgaWYgKHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9ICJXZWJHTDog
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1czoiICsgU3RyaW5nKHJlYXNvbik7CisgICAgICAgIHByaW50
VG9Db25zb2xlKE1lc3NhZ2VMZXZlbDo6V2FybmluZywgc3RyKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKHRhcmdldCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjbGVhckNvbG9yKEdDM0RmbG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZs
b2F0IGIsIEdDM0RmbG9hdCBhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc3RkOjppc25hbihyKSkKKyAgICAgICAgciA9IDA7
CisgICAgaWYgKHN0ZDo6aXNuYW4oZykpCisgICAgICAgIGcgPSAwOworICAgIGlmIChzdGQ6Omlz
bmFuKGIpKQorICAgICAgICBiID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihhKSkKKyAgICAgICAg
YSA9IDE7CisgICAgbV9jbGVhckNvbG9yWzBdID0gcjsKKyAgICBtX2NsZWFyQ29sb3JbMV0gPSBn
OworICAgIG1fY2xlYXJDb2xvclsyXSA9IGI7CisgICAgbV9jbGVhckNvbG9yWzNdID0gYTsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVwdGgpCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJE
ZXB0aCA9IGRlcHRoOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jbGVhclN0ZW5jaWwgPSBzOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiBy
ZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBo
YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb2xvck1hc2tbMF0gPSByZWQ7CisgICAgbV9jb2xvck1hc2tbMV0gPSBncmVlbjsK
KyAgICBtX2NvbG9yTWFza1syXSA9IGJsdWU7CisgICAgbV9jb2xvck1hc2tbM10gPSBhbHBoYTsK
KyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRl
ciogc2hhZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImNvbXBpbGVTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG9iamVjdE9yWmVybyhzaGFkZXIpKTsKKyAg
ICBHQzNEaW50IHZhbHVlOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJv
KHNoYWRlciksIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKKyAg
ICBzaGFkZXItPnNldFZhbGlkKHZhbHVlKTsKKworICAgIGF1dG8qIGNhbnZhcyA9IGh0bWxDYW52
YXMoKTsKKworICAgIGlmIChjYW52YXMgJiYgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSAm
JiAhdmFsdWUpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiBzdGFj
a1RyYWNlID0gSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlNFeGVjU3RhdGU6OmN1
cnJlbnRTdGF0ZSgpKTsKKworICAgICAgICBmb3IgKGF1dG8mIGVycm9yIDogZ2V0U2hhZGVySW5m
b0xvZyhzaGFkZXIpLnNwbGl0KCdcbicpKQorICAgICAgICAgICAgY2FudmFzLT5kb2N1bWVudCgp
LmFkZENvbnNvbGVNZXNzYWdlKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4o
TWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCAiV2ViR0w6ICIgKyBlcnJvciwgc3RhY2tUcmFjZS5jb3B5UmVmKCkpKTsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJy
YXlCdWZmZXJWaWV3JiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNv
bXByZXNzZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoYm9yZGVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdl
MkQiLCAiYm9yZGVyIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF2
YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRh
cmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRU
ZXhJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXBy
ZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQs
IGxldmVsLCAiY29tcHJlc3NlZFRleEltYWdlMkQiKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0
LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwKKyAgICAgICAgYm9yZGVyLCBkYXRhLmJ5dGVMZW5ndGgoKSwgZGF0YS5iYXNl
QWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgY29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rpb24g
ZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZv
ciB0aGlzIGxldmVsLgorICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlC
dWZmZXJWaWV3JiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRl
eFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90
IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0ZXguZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBncmFwaGljc0NvbnRl
eHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEuYnl0ZUxlbmd0aCgpLCBkYXRhLmJh
c2VBZGRyZXNzKCkpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQoreworICAg
IHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJ
TDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVY
ODoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9ubHkgcmVu
ZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47Cisg
ICAgYXV0byB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAh
dmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAg
ICByZXR1cm47CisgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwg
Y2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
IDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
ImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHhvZmZz
ZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhl
aWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1Yklt
YWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1h
dCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRlcm5hbEZvcm1hdCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
aW50ZXJuYWxGb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9y
bWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVhc29uID0g
ImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZy
ZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworCisg
ICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKKyAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdl
dEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZj
bGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAg
ICAgICAgR0MzRGVudW0gZm9ybWF0OworICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAgICBp
ZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZv
cm1hdCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBmb3JtYXQsIHR5cGUp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiY29weVRleFN1YkltYWdlMkQiLCAiVGV4dHVyZSBoYXMgdW5rbm93biBpbnRl
cm5hbCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOworICAgICAgICBpZiAod2lkdGggJiYgaGVp
Z2h0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplOworICAgICAgICAgICAgR0MzRGVudW0g
ZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
d2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
ImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPihzaXpl
KTsKKyAgICAgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdl
MkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICAgICAg
fQorICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKKyAg
ICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQg
KyBjbGlwcGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAtIHksIGNsaXBwZWRYLCBjbGlwcGVk
WSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYnVmZmVy
ID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSgqdGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KGJ1ZmZl
ci5nZXQoKSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBhdXRvIGJ1ZmZlciA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSgqdGhpcyk7CisgICAg
YWRkQ29udGV4dE9iamVjdChidWZmZXIuZ2V0KCkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisK
K1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGF1dG8gdGV4dHVyZSA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKCp0
aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3QodGV4dHVyZS5nZXQoKSk7CisgICAgcmV0dXJuIHRl
eHR1cmU7Cit9CisKK1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcHJvZ3JhbSA9IFdlYkdMUHJvZ3Jh
bTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3QocHJvZ3JhbS5nZXQoKSk7CisK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYkdMUHJvZ3JhbSgqdGhp
cywgcHJvZ3JhbS5nZXQoKSk7CisKKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKworUmVmUHRyPFdl
YkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGF1dG8gYnVmZmVyID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0
ZSgqdGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KGJ1ZmZlci5nZXQoKSk7CisgICAgcmV0dXJu
IGJ1ZmZlcjsKK30KKworUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRl
ciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gc2hh
ZGVyID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSgqdGhpcywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2Jq
ZWN0KHNoYWRlci5nZXQoKSk7CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PmN1bGxGYWNlKG1vZGUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRl
bGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
b2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0
ZSIsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChvYmplY3QtPmlzRGVsZXRlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCisgICAgICAgIC8vIFdl
IG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIC8v
IHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2JqZWN0LT5kZWxldGVP
YmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZm
ZXIpCit7CisgICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJp
bmRCdWZmZXIoKmJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAg
aWYgKCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm47CisjaWYgRU5B
QkxFKFdFQkdMMikKKyAgICBpZiAoaXNXZWJHTDIoKSAmJiBmcmFtZWJ1ZmZlciA9PSBtX3JlYWRG
cmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nID0g
bnVsbHB0cjsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIsIDApOworICAgIH0KKyNlbmRpZgorICAgIGlmIChmcmFt
ZWJ1ZmZlciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZyA9IG51bGxwdHI7CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICAgICAgaWYgKGlzV2Vi
R0wyKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RFJBV19GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKHByb2dy
YW0pCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lXZWJHTFBy
b2dyYW0oKnByb2dyYW0pOworCisgICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8vIFdl
IGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0
aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRl
cmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0KHJlbmRlcmJ1
ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVuZGVy
YnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVyKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVTaGFkZXIoV2ViR0xT
aGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4
dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdW5zaWduZWQgY3VycmVudCA9IDA7CisgICAgZm9yIChhdXRvJiB0ZXh0dXJlVW5p
dCA6IG1fdGV4dHVyZVVuaXRzKSB7CisgICAgICAgIGlmICh0ZXh0dXJlID09IHRleHR1cmVVbml0
LnRleHR1cmUyREJpbmRpbmcpIHsKKyAgICAgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmUyREJp
bmRpbmcgPSBudWxscHRyOworICAgICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMu
cmVtb3ZlKGN1cnJlbnQpOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlID09IHRleHR1
cmVVbml0LnRleHR1cmVDdWJlTWFwQmluZGluZykgeworICAgICAgICAgICAgdGV4dHVyZVVuaXQu
dGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fdW5yZW5kZXJh
YmxlVGV4dHVyZVVuaXRzLnJlbW92ZShjdXJyZW50KTsKKyAgICAgICAgfQorICAgICAgICArK2N1
cnJlbnQ7CisgICAgfQorICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0
ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXB0aEZ1bmMo
R0MzRGVudW0gZnVuYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZGVwdGhNYXNrID0gZmxhZzsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFnKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6
TmVhciwgR0MzRGZsb2F0IHpGYXIpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh6TmVhciA+IHpGYXIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVw
dGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNo
YWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNE
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUoR0MzRGVu
dW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
Q2FwYWJpbGl0eSgiZGlzYWJsZSIsIGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2Fw
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9zdGVuY2ls
RW5hYmxlZCA9IGZhbHNlOworICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKQorICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jb250ZXh0LT5k
aXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhW
ZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91
dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2U6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0YXRlLmVuYWJs
ZWQgPSBmYWxzZTsKKworICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQor
ICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVOUE9UVGV4dHVyZUxldmVs
KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBsZXZlbCwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBs
ZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChvZmZzZXQgPCAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5U
KSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJl
IGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNl
dCAlIDQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTWFrZSB1b2Zm
c2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gNDsKKworICAgICAgICBH
QzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKKyAg
ICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5
LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisg
ICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89
IDI7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKSAvIDI7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNl
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgaWYgKG9mZnNldCA+
IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQorewor
ICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKKyAgICB1bnNpZ25lZCBtYXhJ
bmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZm
ZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwor
CisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gYnVmZmVyID0gZWxlbWVudEFycmF5
QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdD
M0R1aW50PihidWZmZXIsIG9mZnNldCwgY291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgbWF4SW5kZXggPSBn
ZXRNYXhJbmRleDxHQzNEdXNob3J0PihidWZmZXIsIG9mZnNldCwgY291bnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAg
ICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1Ynl0ZT4oYnVmZmVyLCBvZmZzZXQsIGNvdW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gVGhlbiBzZXQgdGhlIG1heGl1bXVt
IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgorICAg
IGF1dG8gY2hlY2tlZE51bUVsZW1lbnRzUmVxdWlyZWQgPSBjaGVja2VkQWRkQW5kTXVsdGlwbHk8
dW5zaWduZWQ+KG1heEluZGV4LCAxLCAxKTsKKyAgICBpZiAoIWNoZWNrZWROdW1FbGVtZW50c1Jl
cXVpcmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9
IGNoZWNrZWROdW1FbGVtZW50c1JlcXVpcmVkLnZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1
dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQpCit7Cisj
aWYgIVVTRShBTkdMRSkKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
ZWxlbWVudENvdW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIExvb2sgaW4gZWFj
aCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4KKyAgICBi
b29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAgIGJvb2wgc2F3RW5hYmxlZEF0
dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBtX2N1cnJl
bnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CisgICAgICAgIGludCBsb2Mg
PSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKKyAgICAgICAg
aWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhBdHRyaWJz
KSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OlZlcnRl
eEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUobG9jKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgc2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8g
QXZvaWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCisgICAg
ICAgICAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0
aGUgZGF0YSBmb3IgdGhlCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBi
ZXlvbmQgaXQuCisgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nh
c3Q8aW50PihzdGF0ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQp
OworICAgICAgICAgICAgICAgIGlmIChieXRlc1JlbWFpbmluZyA8PSAwKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVu
dHMgPSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQor
ICAgICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBz
dGF0ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluc3RhbmNlc1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUu
ZGl2aXNvcikgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzYXdOb25JbnN0YW5jZWRB
dHRyaWIgJiYgc2F3RW5hYmxlZEF0dHJpYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCB1c2luZ1NpbXVsYXRlZEFycmF5QnVmZmVyID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2lu
Z1ZlcnRleEF0dHJpYjAoKTsKKworICAgIC8vIEd1YXJkIGFnYWluc3QgYWNjZXNzIGludG8gbm9u
LWV4aXN0ZW50IGJ1ZmZlcnMuCisgICAgaWYgKGVsZW1lbnRDb3VudCAmJiAhc2F3RW5hYmxlZEF0
dHJpYiAmJiAhdXNpbmdTaW11bGF0ZWRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGVsZW1lbnRDb3VudCAmJiBzYXdFbmFibGVkQXR0cmliKSB7CisgICAgICAg
IGlmICghbV9ib3VuZEFycmF5QnVmZmVyICYmICFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7CisgICAgICAgICAgICBpZiAodXNpbmdTaW11bGF0ZWRB
cnJheUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhdGUuZW5hYmxlZCAmJiBzdGF0ZS5pc0JvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIgfHwgc3RhdGUuYnVmZmVyQmluZGluZy0+Z2V0VGFyZ2V0KCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICEhc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnRDb3VudCk7
CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZUNvdW50KTsKKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
V2ViR0xPYmplY3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0
KQoreworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksICp0
aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8g
dGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3
QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlv
bk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJmaXJz
dCBvciBjb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPCAwKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZS4KKyAgICBD
aGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gQ2hlY2tlZDxHQzNE
aW50LCBSZWNvcmRPdmVyZmxvdz4oZmlyc3QpICsgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVy
Zmxvdz4oY291bnQpOworICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgaWYgKGNoZWNrZWRTdW0uaGFz
T3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2VkKCkgfHwg
IXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhjaGVja2VkU3VtLnVuc2FmZUdldCgpLCBjaGVja2Vk
UHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2ltdWxhdGVkVmVydGV4QXR0cmliMChjaGVj
a2VkU3VtLnVuc2FmZUdldCgpIC0gMSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0
IHRvIGFjY2VzcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVsYXRlZCB2ZXJ0ZXhBdHRy
aWIwIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
IHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVt
ZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1l
bnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291bnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5n
cyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBpZiAo
bV9vZXNFbGVtZW50SW5kZXhVaW50IHx8IGlzV2ViR0wyKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoY291bnQgPCAwIHx8IG9mZnNldCA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3Vu
dCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCBy
ZW5kZXJpbmcgc3RhdGUuCisgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQs
IHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAicmVxdWVzdCBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlf
QlVGRkVSIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFjb3VudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKKyAgICBp
ZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQu
aGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nl
c3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1F
bGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICBpZiAoIXZhbGlkYXRlSW5k
ZXhBcnJheVByZWNpc2UoY2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91
bmRzIGFycmF5cyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCF2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0c2lkZSB0aGUg
Ym91bmRzIG9mIHRoZSBzaW11bGF0ZWQgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVhc29u
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0FycmF5
cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICYmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aXNXZWJHTFByb2dyYW1EaXNhYmxlZCgqdGhpcywgKm1fY3VycmVudFByb2dyYW0pKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRl
eEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOworICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4
QXR0cmliMFN0YXR1cykgeworICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxh
dGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgInVuYWJs
ZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMFN0YXR1cy52YWx1ZSgpOworICAgIH0KKyAgICBib29sIHVzZXNGYWxsYmFja1Rl
eHR1cmUgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIHVz
ZXNGYWxsYmFja1RleHR1cmUgPSBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMi
LCB0cnVlKTsKKworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yU2NvcGVkU2hhZGVyUHJvZ3JhbUhp
Z2hsaWdodCBzY29wZWRIaWdobGlnaHQoKnRoaXMsIG1fY3VycmVudFByb2dyYW0uZ2V0KCkpOwor
CisgICAgICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAg
IH0KKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0
ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7
CisgICAgaWYgKHVzZXNGYWxsYmFja1RleHR1cmUpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcygiZHJhd0FycmF5cyIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWRBbmRO
b3RpZnlDYW52YXNPYnNlcnZlcigpOworfQorCisjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdF
QkdMMikKK3N0YXRpYyBHQzNEdWludCBnZXRSZXN0YXJ0SW5kZXgoR0MzRGVudW0gdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFOgorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHQzNEdWJ5dGU+Ojpt
YXgoKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0MzRHVzaG9ydD46Om1heCgpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8R0MzRHVpbnQ+OjptYXgoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50
cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9u
ZyBvZmZzZXQpCit7CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFs
aWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZz
ZXQsIG51bUVsZW1lbnRzLCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY3VycmVu
dFByb2dyYW0gJiYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1dlYkdMUHJvZ3JhbURpc2Fi
bGVkKCp0aGlzLCAqbV9jdXJyZW50UHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNs
ZWFySWZDb21wb3NpdGVkKCk7CisKKyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAoIW51bUVs
ZW1lbnRzKQorICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOworICAgICAg
ICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cyA9IHNpbXVsYXRlVmVydGV4QXR0cmli
MChudW1FbGVtZW50cyk7CisgICAgICAgIGlmICghc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVz
KSB7CisgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBzaW11bGF0ZSB0aGUgYXR0cmli
dXRlIGJ1ZmZlci4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJ1bmFibGUgdG8gc2ltdWxh
dGUgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBT
dGF0dXMudmFsdWUoKTsKKyAgICB9CisKKyAgICBib29sIHVzZXNGYWxsYmFja1RleHR1cmUgPSBm
YWxzZTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIHVzZXNGYWxsYmFj
a1RleHR1cmUgPSBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRydWUp
OworCisjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKKyAgICBpZiAoaXNXZWJHTDIo
KSkKKyAgICAgICAgbV9jb250ZXh0LT5wcmltaXRpdmVSZXN0YXJ0SW5kZXgoZ2V0UmVzdGFydElu
ZGV4KHR5cGUpKTsKKyNlbmRpZgorCisgICAgeworICAgICAgICBJbnNwZWN0b3JTY29wZWRTaGFk
ZXJQcm9ncmFtSGlnaGxpZ2h0IHNjb3BlZEhpZ2hsaWdodCgqdGhpcywgbV9jdXJyZW50UHJvZ3Jh
bS5nZXQoKSk7CisKKyAgICAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOworICAgIH0KKworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAg
IHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKHVz
ZXNGYWxsYmFja1RleHR1cmUpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZEFuZE5vdGlmeUNhbnZh
c09ic2VydmVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxl
KEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZUNhcGFiaWxpdHkoImVuYWJsZSIsIGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9z
dGVuY2lsRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpCisgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgIG1fY29udGV4
dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKyAgICBzdGF0ZS5lbmFi
bGVkID0gdHJ1ZTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZpbmlzaCgpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Zmx1c2goKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsIHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVy
YnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3Jv
dXAoKSwgKnRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1
ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcg
OiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0
IGZyYW1lYnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CisgICAgLy8gaW1wbGVtZW50
YXRpb25zIHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAorICAg
IC8vIEZCTy4KKyAgICBpZiAoIXRhcmdldEZyYW1lYnVmZmVyIHx8ICF0YXJnZXRGcmFtZWJ1ZmZl
ci0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJh
bWVidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlck9iamVjdCA9IG9iamVjdE9yWmVybyhidWZmZXIpOworICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0
YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0
YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBy
ZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0
LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgfQor
ICAgIHRhcmdldEZyYW1lYnVmZmVyLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50LCBidWZmZXIpOworICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGxldmVsICYmIGlzV2ViR0wxKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJs
ZXZlbCBub3QgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXh0dXJlICYm
ICF0ZXh0dXJlLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlz
IGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdGFyZ2V0RnJh
bWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVS
KSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworCisg
ICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsg
YWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5
IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghdGFyZ2V0RnJh
bWVidWZmZXIgfHwgIXRhcmdldEZyYW1lYnVmZmVyLT5vYmplY3QoKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFt
ZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9y
WmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIH0KKyAgICB0YXJn
ZXRGcmFtZWJ1ZmZlci0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyb250RmFjZShHQzNEZW51bSBt
b2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
dGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZh
bHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4LT5jYW5H
ZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5v
dCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdl
YkdMIDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVN
aXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1
cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhJbnRlcm5hbEZvcm1hdCgiZ2VuZXJhdGVNaXBtYXAiLCB0ZXgtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgMCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBnZW5lcmF0ZU1pcG1hcCB3
b24ndCB3b3JrIHByb3Blcmx5IGlmIG1pbkZpbHRlciBpcyBub3QgTkVBUkVTVF9NSVBNQVBfTElO
RUFSCisgICAgLy8gb24gTWFjLiAgUmVtb3ZlIHRoZSBoYWNrIG9uY2UgdGhpcyBkcml2ZXIgYnVn
IGlzIGZpeGVkLgorI2lmIE9TKERBUldJTikKKyAgICBib29sIG5lZWRUb1Jlc2V0TWluRmlsdGVy
ID0gZmFsc2U7CisgICAgaWYgKHRleC0+Z2V0TWluRmlsdGVyKCkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikgeworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKTsKKyAgICAgICAgbmVlZFRvUmVz
ZXRNaW5GaWx0ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIG1fY29udGV4dC0+Z2VuZXJh
dGVNaXBtYXAodGFyZ2V0KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKG5lZWRUb1Jlc2V0TWlu
RmlsdGVyKQorICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCB0ZXgtPmdldE1pbkZpbHRlcigpKTsKKyNl
bmRpZgorICAgIHRleC0+Z2VuZXJhdGVNaXBtYXBMZXZlbEluZm8oKTsKK30KKworUmVmUHRyPFdl
YkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmli
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlQXR0
cmliIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFjdGl2ZUluZm8g
aW5mbzsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlQXR0cmliKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgaW5kZXgsIGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgYXR0cmlidXRlICVkOiAlcyIsIGluZGV4LCBpbmZv
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVh
dGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK1JlZlB0cjxXZWJHTEFj
dGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVVbmlmb3Jt
IiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIEFjdGl2ZUluZm8gaW5m
bzsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJv
Z3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZvLm5h
bWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBdIik7
CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIHVuaWZvcm0gJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJHTEFjdGl2ZUlu
Zm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworT3B0aW9u
YWw8VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFj
aGVkU2hhZGVycyIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZXNbXSA9IHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVO
VF9TSEFERVIKKyAgICB9OworICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJP
YmplY3RzOworICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRl
cihzaGFkZXJUeXBlKTsKKyAgICAgICAgaWYgKHNoYWRlcikKKyAgICAgICAgICAgIHNoYWRlck9i
amVjdHMuYXBwZW5kKHNoYWRlcik7CisgICAgfQorICAgIHJldHVybiBzaGFkZXJPYmplY3RzOwor
fQorCitHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJp
YkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5h
bWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOworfQorCitXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKKyAgICBp
ZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgdmFsaWQg
PSB0cnVlOworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgaWYgKGlzV2ViR0wyKCkpIHsKKyAgICAg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09Q
WV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklU
RV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVG
RkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVS
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAg
ICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlm
ICghdmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpC
VUZGRVJfVVNBR0UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEdDM0RpbnQg
dmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKKyAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZF
Ul9TSVpFKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPih2YWx1ZSk7Cit9CisKK09wdGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgLy8gQWxzbywgd2UgbmVlZCB0byBlbmZvcmNlIHJlcXVlc3RlZCB2YWx1ZXMgb2Yg
ImZhbHNlIiBmb3IgZGVwdGgKKyAgICAvLyBhbmQgc3RlbmNpbCwgcmVnYXJkbGVzcyBvZiB0aGUg
cHJvcGVydGllcyBvZiB0aGUgdW5kZXJseWluZworICAgIC8vIEdyYXBoaWNzQ29udGV4dDNELgor
CisgICAgYXV0byBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygp
OworICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICBhdHRyaWJ1dGVzLmRlcHRo
ID0gZmFsc2U7CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmli
dXRlcy5zdGVuY2lsID0gZmFsc2U7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Cit9CisKK0dDM0Rl
bnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobV9p
c1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7Cit9CisKK1dl
YkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1l
dGVyIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR0MzRGludCB2
YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFTEVURV9TVEFUVVM6CisgICAgICAgIHJldHVybiBwcm9ncmFtLT5pc0RlbGV0ZWQoKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih2YWx1ZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBwcm9ncmFtLT5n
ZXRMaW5rU3RhdHVzKCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hB
REVSUzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKKyNpZiBVU0UoQU5HTEUpCisgICAgICAgIG1fY29udGV4
dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Cisj
ZWxzZQorICAgICAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChv
YmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworI2VuZGlmIC8vIFVTRShBTkdM
RSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJv
Z3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9n
IiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZW5zdXJl
Tm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFt
KSkpOworfQorCitXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1f
cmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5h
bEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgICAgICYm
ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIWlz
RGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAg
ICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9XSURUSDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5nZXRXaWR0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICB2YWx1ZSA9IG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAg
ICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgICAgICB2YWx1
ZSA9IDI0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDg7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgbV9jb250ZXh0LT5nZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVDoKKyAgICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
fQorCitXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0
ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFy
YW1ldGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgR0MzRGludCB2
YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFTEVURV9TVEFUVVM6CisgICAgICAgIHJldHVybiBzaGFkZXItPmlzRGVsZXRlZCgpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgorICAgICAgICBtX2Nv
bnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJp
dihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRT
aGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIs
IHNoYWRlcikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZW5zdXJlTm90
TnVsbChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsK
K30KKworUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwg
R0MzRGVudW0gcHJlY2lzaW9uVHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBl
Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHByZWNpc2lv
blR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkhJR0hfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkhJR0hfSU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgR0MzRGludCByYW5nZVsyXSA9IHsw
LCAwfTsKKyAgICBHQzNEaW50IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVj
aXNpb24pOworICAgIHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJh
bmdlWzBdLCByYW5nZVsxXSwgcHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZW5zdXJlTm90TnVsbChzaGFkZXItPmdldFNvdXJjZSgpKTsKK30KKworV2ViR0xBbnkg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dp
dGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YWx1ZSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitXZWJHTEFueSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbikKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRV
bmlmb3JtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdW5p
Zm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZv
ciB0aGlzIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIEdD
M0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7CisKKyAgICBHQzNE
ZW51bSBiYXNlVHlwZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoICh1bmlmb3Jt
TG9jYXRpb24tPnR5cGUoKSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0
aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xf
VkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAg
ICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Qk9PTF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09M
OworICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSA0OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5n
dGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAg
ICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gOTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUNDoKKyAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE2
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJE
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0
eXBlCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsxNl0gPSB7MH07
CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgMTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZVswXTsKKyAgICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6
dHJ5Q3JlYXRlKHZhbHVlLCBsZW5ndGgpOworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlQ6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICAgICAgaWYg
KG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCkuZ2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0
aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRp
b24sIHZhbHVlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlWzBdOworICAgICAgICByZXR1cm4gSW50MzJBcnJheTo6dHJ5Q3JlYXRlKHZhbHVlLCBs
ZW5ndGgpOworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAg
ICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VY
VFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdldG5V
bmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihH
QzNEaW50KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAg
ICAgIGlmIChsZW5ndGggPiAxKSB7CisgICAgICAgICAgICBWZWN0b3I8Ym9vbD4gdmVjdG9yKGxl
bmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKysp
CisgICAgICAgICAgICAgICAgdmVjdG9yW2pdID0gdmFsdWVbal07CisgICAgICAgICAgICByZXR1
cm4gdmVjdG9yOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih2
YWx1ZVswXSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nIGlu
IG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMgYWJvdmUKKyAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5r
bm93biBlcnJvciIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8V2ViR0xVbmlm
b3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm1Mb2NhdGlv
bihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlm
b3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9y
bUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpc1By
ZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXBy
b2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAi
cHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZv
cm1zID0gMDsKKyNpZiBVU0UoQU5HTEUpCisgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAm
YWN0aXZlVW5pZm9ybXMpOworI2Vsc2UKKyAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3Rp
dmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpB
Q1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisjZW5kaWYKKyAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7CisgICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCisgICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7CisgICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KKyAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IG1ha2VTdHJpbmcoaW5mby5uYW1lLCAnWycsIGluZGV4LCAnXScpOwor
CisgICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFt
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShw
cm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4
QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZShpbmRleCk7CisKKyAgICBpZiAoKGlzV2ViR0wyKCkgfHwgbV9hbmdsZUluc3RhbmNl
ZEFycmF5cykgJiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfRElWSVNPUl9BTkdMRSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRpdmlzb3I7CisKKyAgICBz
d2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJ
Ql9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCghaXNHTEVTMkNvbXBsaWFudCgp
ICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0
YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQorICAgICAgICAg
ICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJC
aW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3RhdGUuYnVmZmVyQmluZGluZzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgIHJldHVybiBzdGF0ZS5lbmFibGVk
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFM
SVpFRDoKKyAgICAgICAgcmV0dXJuIHN0YXRlLm5vcm1hbGl6ZWQ7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gc3Rh
dGUuc2l6ZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1NUUklERToKKyAgICAgICAgcmV0dXJuIHN0YXRlLm9yaWdpbmFsU3RyaWRlOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgcmV0
dXJuIHN0YXRlLnR5cGU7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJU
RVhfQVRUUklCOgorICAgICAgICByZXR1cm4gRmxvYXQzMkFycmF5Ojp0cnlDcmVhdGUobV92ZXJ0
ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0
ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmV4dGVuc2lvbklzRW5hYmxlZChj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisjZGVmaW5lIENIRUNLX0VYVEVOU0lPTih2YXJpYWJsZSwg
bmFtZUxpdGVyYWwpIFwKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBuYW1l
TGl0ZXJhbCkpIFwKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlICE9IG51bGxwdHI7CisKKyAgICBD
SEVDS19FWFRFTlNJT04obV9leHRGcmFnRGVwdGgsICJFWFRfZnJhZ19kZXB0aCIpOworICAgIENI
RUNLX0VYVEVOU0lPTihtX2V4dEJsZW5kTWluTWF4LCAiRVhUX2JsZW5kX21pbm1heCIpOworICAg
IENIRUNLX0VYVEVOU0lPTihtX2V4dHNSR0IsICJFWFRfc1JHQiIpOworICAgIENIRUNLX0VYVEVO
U0lPTihtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYywgIkVYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyIpOworICAgIENIRUNLX0VYVEVOU0lPTihtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYywgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICBD
SEVDS19FWFRFTlNJT04obV9leHRTaGFkZXJUZXh0dXJlTE9ELCAiRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpOworICAgIENIRUNLX0VYVEVOU0lPTihtX29lc1RleHR1cmVGbG9hdCwgIk9FU190ZXh0
dXJlX2Zsb2F0Iik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
LCAiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1fb2Vz
VGV4dHVyZUhhbGZGbG9hdCwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICBDSEVDS19F
WFRFTlNJT04obV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLCAiT0VTX3RleHR1cmVfaGFsZl9m
bG9hdF9saW5lYXIiKTsKKyAgICBDSEVDS19FWFRFTlNJT04obV9vZXNTdGFuZGFyZERlcml2YXRp
dmVzLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1f
b2VzVmVydGV4QXJyYXlPYmplY3QsICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIENI
RUNLX0VYVEVOU0lPTihtX29lc0VsZW1lbnRJbmRleFVpbnQsICJPRVNfZWxlbWVudF9pbmRleF91
aW50Iik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xMb3NlQ29udGV4dCwgIldFQkdMX2xv
c2VfY29udGV4dCIpOworICAgIENIRUNLX0VYVEVOU0lPTihtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8sICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1f
d2ViZ2xEZWJ1Z1NoYWRlcnMsICJXRUJHTF9kZWJ1Z19zaGFkZXJzIik7CisgICAgQ0hFQ0tfRVhU
RU5TSU9OKG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQywgIldFQktJVF9XRUJHTF9jb21wcmVz
c2VkX3RleHR1cmVfYXRjIik7CisgICAgQ0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDLCAiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpOwor
ICAgIENIRUNLX0VYVEVOU0lPTihtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLCAiV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKKyAgICBDSEVDS19FWFRFTlNJT04obV93ZWJnbERl
cHRoVGV4dHVyZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKKyAgICBDSEVDS19FWFRFTlNJT04o
bV93ZWJnbERyYXdCdWZmZXJzLCAiV0VCR0xfZHJhd19idWZmZXJzIik7CisgICAgQ0hFQ0tfRVhU
RU5TSU9OKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMsICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoIWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRleHRMb3N0OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgeworICAgICAg
ICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0
aGUgcG9saWN5LiIpOworICAgICAgICBhdXRvKiBjYW52YXMgPSBodG1sQ2FudmFzKCk7CisgICAg
ICAgIGlmIChjYW52YXMpIHsKKyAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZh
cy0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAgICAgICAgICAgUGFnZSogcGFnZSA9IGRv
Y3VtZW50LnBhZ2UoKTsKKyAgICAgICAgICAgIGlmIChwYWdlICYmICFkb2N1bWVudC51cmwoKS5p
c0xvY2FsRmlsZSgpKQorICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigp
LmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51cmwoKSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueXRoaW5nIHdpdGggdGhl
IHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAgICAgICAgLy8gY29tcGxldGUg
aW1wbGVtZW50YXRpb24gbWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwgZXRj
IGFuZCBwcm9jZWVkCisgICAgICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTIy
CisgICAgICAgIH0KKyAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb247Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Qp
CisgICAgICAgIHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOworICAgIHJldHVybiBtX2NvbnRleHQt
PmlzRW5hYmxlZChjYXApOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAg
IGlmICghZnJhbWVidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghZnJhbWVidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFw
cm9ncmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOworfQor
CitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1JlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2Jq
ZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1No
YWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sK
KyAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5v
YmplY3QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bGluZVdpZHRo
KEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5saW5lV2lkdGgod2lkdGgpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKK3sKKyAgICBpZiAoIWxpbmtQcm9ncmFtV2l0aG91dEludmFsaWRhdGluZ0F0dHJp
YkxvY2F0aW9ucyhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvZ3JhbS0+aW5j
cmVhc2VMaW5rQ291bnQoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjps
aW5rUHJvZ3JhbVdpdGhvdXRJbnZhbGlkYXRpbmdBdHRyaWJMb2NhdGlvbnMoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gdmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+
Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAg
IFJlZlB0cjxXZWJHTFNoYWRlcj4gZnJhZ21lbnRTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hl
ZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBpZiAoIXZl
cnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVy
IHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpKSB7CisgICAgICAgIHByb2dyYW0tPnNldExp
bmtTdGF0dXMoZmFsc2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWYgIVVT
RShBTkdMRSkKKyAgICBpZiAoIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVy
byh2ZXJ0ZXhTaGFkZXIuZ2V0KCkpLCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIuZ2V0KCkp
KQorICAgICAgICB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhvYmplY3RPclpl
cm8odmVydGV4U2hhZGVyLmdldCgpKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyLmdldCgp
KSkpIHsKKyAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0o
b2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCBwYXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJ
UExZX0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBwYXJh
bTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NP
TE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNz
Q29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0g
c3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBp
eGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05W
RVJTSU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgaWYgKHBh
cmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKKyAg
ICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQp
CisgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBl
bHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICAgICAg
ICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVs
U3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4
ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnBvbHlnb25P
ZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK2VudW0gY2xhc3MgSW50ZXJuYWxGb3JtYXRUaGVt
ZSB7CisgICAgTm9uZSwKKyAgICBOb3JtYWxpemVkRml4ZWRQb2ludCwKKyAgICBQYWNrZWQsCisg
ICAgU2lnbmVkTm9ybWFsaXplZEZpeGVkUG9pbnQsCisgICAgRmxvYXRpbmdQb2ludCwKKyAgICBT
aWduZWRJbnRlZ2VyLAorICAgIFVuc2lnbmVkSW50ZWdlcgorfTsKKworc3RhdGljIEludGVybmFs
Rm9ybWF0VGhlbWUgaW50ZXJuYWxGb3JtYXRUaGVtZShHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1JHQl9BTFBIQToKKyAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0
VGhlbWU6Ok5vcm1hbGl6ZWRGaXhlZFBvaW50OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjlfRTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCMTBfQTJVSToKKyAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6OlBh
Y2tlZDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOF9TTk9STToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKKyAg
ICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6OlNpZ25lZE5vcm1hbGl6ZWRGaXhlZFBv
aW50OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0IxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTMyRjoKKyAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6OkZsb2F0aW5n
UG9pbnQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEx
Nkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKKyAgICAgICAgcmV0dXJu
IEludGVybmFsRm9ybWF0VGhlbWU6OlNpZ25lZEludGVnZXI7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKKyAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0
VGhlbWU6OlVuc2lnbmVkSW50ZWdlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gSW50
ZXJuYWxGb3JtYXRUaGVtZTo6Tm9uZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyT2ZD
b21wb25lbnRzRm9yRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRURfSU5URUdFUjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdF
UjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgorICAgICAgICByZXR1cm4g
MzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgaW50IG51bWJlck9mQ29tcG9u
ZW50c0ZvckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQoreworICAgIHN3
aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhfU05PUk06
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIx
NlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukcx
NlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMySToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICByZXR1cm4gMjsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTFGX0cxMUZfQjEwRjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgorICAgICAg
ICByZXR1cm4gMzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNS
R0JfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgorICAgICAgICByZXR1cm4g
NDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyYgcGl4ZWxzKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBEdWUgdG8gV2ViR0wncyBz
YW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bworICAgIC8vIHRh
aW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzQmFz
ZSgpLm9yaWdpbkNsZWFuKCkpOworCisgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSAwOwor
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBjb25zdCBjaGFyKiByZWFz
b24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZyZWFzb24pKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogcmVhZEJ1ZmZlcigpIHNob3VsZCBh
ZmZlY3QgdGhpcworICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0
dHJpYnV0ZXMuYWxwaGEpCisgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBODsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODsKKyAgICB9CisKKyAgICBpZiAoIWludGVybmFsRm9y
bWF0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkluY29ycmVjdCBpbnRlcm5hbCBmb3JtYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1dlYkdMMSgpKSB7CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICAgICAgaWYgKCFtX29lc1Rl
eHR1cmVGbG9hdCAmJiAhbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAgICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQ
aXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8ICh0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQgbm90
IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURXxGTE9BVCIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRUaGVtZSBpbnRlcm5h
bEZvcm1hdFRoZW1lID0gV2ViQ29yZTo6aW50ZXJuYWxGb3JtYXRUaGVtZShpbnRlcm5hbEZvcm1h
dCk7CisgICAgaW50IGludGVybmFsRm9ybWF0Q29tcG9uZW50Q291bnQgPSBudW1iZXJPZkNvbXBv
bmVudHNGb3JJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCk7CisgICAgaWYgKGludGVybmFs
Rm9ybWF0VGhlbWUgPT0gSW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9uZSB8fCAhaW50ZXJuYWxGb3Jt
YXRDb21wb25lbnRDb3VudCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJJbmNvcnJlY3QgaW50ZXJuYWwg
Zm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNkZWZpbmUgQ0hFQ0tfQ09NUE9O
RU5UX0NPVU5UIFwKKyAgICBpZiAobnVtYmVyT2ZDb21wb25lbnRzRm9yRm9ybWF0KGZvcm1hdCkg
PCBpbnRlcm5hbEZvcm1hdENvbXBvbmVudENvdW50KSB7IFwKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiTm90
IGVub3VnaCBjb21wb25lbnRzIGluIGZvcm1hdCIpOyBcCisgICAgICAgIHJldHVybjsgXAorICAg
IH0KKworI2RlZmluZSBJTlRFUk5BTF9GT1JNQVRfQ0hFQ0sodHlwZU1hY3JvLCBwaXhlbFR5cGVN
YWNybykgXAorICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlTWFjcm8gfHwg
cGl4ZWxzLmdldFR5cGUoKSAhPSBKU0M6OnBpeGVsVHlwZU1hY3JvKSB7IFwKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhl
bHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAorICAgICAgICBy
ZXR1cm47IFwKKyAgICB9IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RUQgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRyAmJiBmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpIHsg
XAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBcCisgICAgICAgIHJldHVybjsg
XAorICAgIH0gXAorICAgIENIRUNLX0NPTVBPTkVOVF9DT1VOVAorCisjZGVmaW5lIElOVEVSTkFM
X0ZPUk1BVF9JTlRFR0VSX0NIRUNLKHR5cGVNYWNybywgcGl4ZWxUeXBlTWFjcm8pIFwKKyAgICBp
ZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6dHlwZU1hY3JvIHx8IHBpeGVscy5nZXRUeXBl
KCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5cGUgZG9l
cyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKKyAgICAgICAgcmV0dXJuOyBcCisgICAg
fSBcCisgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgJiYg
Zm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICYmIGZvcm1hdCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBX0lOVEVHRVIpIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBc
CisgICAgICAgIHJldHVybjsgXAorICAgIH0gXAorICAgIENIRUNLX0NPTVBPTkVOVF9DT1VOVAor
CisjZGVmaW5lIENBU0VfUEFDS0VEX0lOVEVSTkFMX0ZPUk1BVF9DSEVDSyhpbnRlcm5hbEZvcm1h
dE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZTBNYWNybywgcGl4ZWxUeXBlME1hY3JvLCB0eXBlMU1h
Y3JvLCBwaXhlbFR5cGUxTWFjcm8pIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmludGVybmFsRm9y
bWF0TWFjcm86IFwKKyAgICBpZiAoISh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlME1h
Y3JvICYmIHBpeGVscy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUwTWFjcm8pIFwKKyAgICAg
ICAgJiYgISh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlMU1hY3JvICYmIHBpeGVscy5n
ZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUxTWFjcm8pKSB7IFwKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAi
dHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAorICAgICAgICByZXR1cm47
IFwKKyAgICB9IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpmb3JtYXRN
YWNybykgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkludmFsaWQgZm9ybWF0Iik7IFwKKyAgICAgICAg
cmV0dXJuOyBcCisgICAgfSBcCisgICAgYnJlYWs7CisKKyAgICBzd2l0Y2ggKGludGVybmFsRm9y
bWF0VGhlbWUpIHsKKyAgICBjYXNlIEludGVybmFsRm9ybWF0VGhlbWU6Ok5vcm1hbGl6ZWRGaXhl
ZFBvaW50OgorICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpIHsK
KyAgICAgICAgICAgIElOVEVSTkFMX0ZPUk1BVF9DSEVDSyhGTE9BVCwgVHlwZUZsb2F0MzIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSU5URVJOQUxfRk9STUFUX0NIRUNLKFVOU0lH
TkVEX0JZVEUsIFR5cGVVaW50OCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnRlcm5hbEZvcm1hdFRoZW1lOjpTaWduZWROb3JtYWxpemVkRml4ZWRQb2ludDoKKyAgICAg
ICAgSU5URVJOQUxfRk9STUFUX0NIRUNLKEJZVEUsIFR5cGVJbnQ4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlcm5hbEZvcm1hdFRoZW1lOjpGbG9hdGluZ1BvaW50OgorICAgICAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0hFQ0soRkxPQVQsIFR5cGVGbG9hdDMyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlcm5hbEZvcm1hdFRoZW1lOjpTaWduZWRJbnRlZ2VyOgorICAgICAgICBJ
TlRFUk5BTF9GT1JNQVRfSU5URUdFUl9DSEVDSyhJTlQsIFR5cGVJbnQzMik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW50ZXJuYWxGb3JtYXRUaGVtZTo6VW5zaWduZWRJbnRlZ2VyOgorICAg
ICAgICBJTlRFUk5BTF9GT1JNQVRfSU5URUdFUl9DSEVDSyhVTlNJR05FRF9JTlQsIFR5cGVVaW50
MzIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVybmFsRm9ybWF0VGhlbWU6OlBhY2tl
ZDoKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICAgICAgQ0FTRV9Q
QUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLKFJHQjU2NSAgICAgICAgLCBSR0IgICAgICAgICAs
IFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAsIFR5cGVVaW50MTYsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICwgVHlwZVVpbnQ4ICApOworICAgICAgICAgICAgQ0FTRV9QQUNLRURfSU5U
RVJOQUxfRk9STUFUX0NIRUNLKFJHQjVfQTEgICAgICAgLCBSR0JBICAgICAgICAsIFVOU0lHTkVE
X1NIT1JUXzVfNV81XzEgICAgICAsIFR5cGVVaW50MTYsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICwgVHlwZVVpbnQ4ICApOworICAgICAgICAgICAgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9S
TUFUX0NIRUNLKFJHQkE0ICAgICAgICAgLCBSR0JBICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzRf
NF80XzQgICAgICAsIFR5cGVVaW50MTYsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICwgVHlw
ZVVpbnQ4ICApOworICAgICAgICAgICAgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNL
KFJHQjlfRTUgICAgICAgLCBSR0IgICAgICAgICAsIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAsIFR5cGVVaW50MzIsIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAgICwgVHlwZVVpbnQzMiAp
OworICAgICAgICAgICAgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLKFJHQjEwX0Ey
ICAgICAgLCBSR0JBICAgICAgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAsIFR5cGVV
aW50MzIsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgVHlwZVVpbnQzMiApOworICAgICAg
ICAgICAgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLKFIxMUZfRzExRl9CMTBGLCBS
R0IgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsIFR5cGVVaW50MzIsIEZM
T0FUICAgICAgICAgICAgICAgICAgICAgICwgVHlwZUZsb2F0MzIpOworICAgICAgICAgICAgQ0FT
RV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLKFJHQjEwX0EyVUkgICAgLCBSR0JBX0lOVEVH
RVIsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAsIFR5cGVVaW50MzIsIFVOU0lHTkVEX0lO
VF8yXzEwXzEwXzEwX1JFViwgVHlwZVVpbnQzMiApOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorI3VuZGVmIENIRUNLX0NPTVBPTkVOVF9DT1VOVAorI3VuZGVm
IElOVEVSTkFMX0ZPUk1BVF9DSEVDSworI3VuZGVmIElOVEVSTkFMX0ZPUk1BVF9JTlRFR0VSX0NI
RUNLCisjdW5kZWYgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLCisKKyAgICAvLyBD
YWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FM
SUdOTUVOVC4KKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOworICAgIHVuc2ln
bmVkIHBhZGRpbmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9y
LCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxzLmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0
ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcg
bm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLmJhc2VBZGRyZXNzKCk7CisKKyAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpCisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLnJlYWRuUGl4ZWxz
RVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgo
KSwgZGF0YSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnJl
bGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNpemUoInNj
aXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+
c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgic2hhZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFN0cmluZyBzdHJpbmdXaXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZyku
cmVzdWx0KCk7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5n
V2l0aG91dENvbW1lbnRzKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNoYWRlci0+c2V0U291cmNl
KHN0cmluZyk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRl
ciksIHN0cmluZ1dpdGhvdXRDb21tZW50cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50
IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmMiLCBmdW5jKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CisgICAgbV9zdGVu
Y2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAg
IG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNp
bEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChmYWNl
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgICAg
IG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0g
cmVmOworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNp
bEZ1bmNNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVm
OworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJh
dGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxNYXNrID0gbWFz
azsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2ls
TWFzayhtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2ls
TWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoZmFj
ZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAgICAg
ICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNr
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAg
ICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxNYXNrU2VwYXJhdGUiLCAi
aW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0Mz
RGVudW0genBhc3MpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE9wU2VwYXJhdGUo
R0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpw
YXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6
cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQuCisgICAgYXV0
byB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVl
KTsKKyAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIFRl
eEltYWdlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQodmFsaWRh
dGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCAidGV4SW1hZ2UyRCIpKTsK
KyAgICBpZiAoIXBpeGVscykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+dGV4SW1hZ2UyRFJl
c291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleElu
dGVybmFsRm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxGb3JtYXQpKTsKKyAgICAgICAgbV9j
b250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRo
aXMgbGV2ZWwuCisgICAgICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHRleC0+c2V0TGV2ZWxJ
bmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJESW1wbChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwg
cHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2Vl
ZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0
YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFP
cCgpOworICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VQaXhlbERhdGEoKTsKKworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlm
ICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFG
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNl
OworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFn
ZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURh
dGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwg
ZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3VucGFja0FsaWdu
bWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwg
Zm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERh
dGEpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFj
a0FsaWdubWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5j
dGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNl
VHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0
YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZSkgeworICAgICAgICBpZiAoZnVu
Y3Rpb25UeXBlID09IFRleEltYWdlICYmIHRleHR1cmUtPmltbXV0YWJsZSgpKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgInRleFN0b3JhZ2UoKSBjYWxsZWQgb24gdGhpcyB0ZXh0dXJlIHBy
ZXZpb3VzbHkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXZhbGlkYXRlTlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgZnVu
Y3Rpb25OYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRm9yIFNv
dXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxk
IGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAgICAg
ICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90Lgor
ICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KGZ1bmN0aW9uTmFt
ZSwgaW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEludGVy
bmFsRm9ybWF0KGZ1bmN0aW9uTmFtZSwgaW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlvbk5hbWUsIHhvZmZz
ZXQsIHlvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBCZWZv
cmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBw
ZW5zIGZpcnN0LgorICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsg
aGVpZ2h0IDwgMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBkaW1lbnNpb25zIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhvZmZzZXQg
KyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIGxldmVsKSAhPSBpbnRlcm5hbEZvcm1hdCB8fCAoaXNXZWJHTDEoKSAmJiB0ZXh0
dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInR5cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVyZSIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEo
InRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzLmdldCgpLCBOdWxsQWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRl
VGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxz
ID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERh
dGE7CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0
YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAg
ICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dW5wYWNrQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxp
Z25tZW50ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdl
LCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNp
b24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlmICghaW1hZ2VFeHRyYWN0b3Iu
ZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VBbHBoYU9wKCk7CisgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOworICAgIAorICAgIGJvb2wgbmVlZENvbnZlcnNpb24g
PSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
ICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
OCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29u
dmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFj
a0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFs
cGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBh
Y2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2Ug
ZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIHRleFN1
YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0
aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEpOworCisgICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHBpeGVscykKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHRleHR1cmUgPSB2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybjsKKworICAgIEdDM0RlbnVtIGludGVybmFs
Rm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAg
aWYgKCFpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0
dXJlIHRhcmdldCBvciBsZXZlbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5nZXQoKSwgTnVsbE5vdEFs
bG93ZWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4
U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhv
ZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdm9pZCogZGF0YSA9
IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Cisg
ICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAo
bV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBtX3VucGFja0FsaWdubWVudCwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBkYXRhLCB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OworCisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisK
KyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdu
bWVudCk7Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBP
cHRpb25hbDxUZXhJbWFnZVNvdXJjZT4mJiBzb3VyY2UpCit7CisgICAgaWYgKCFzb3VyY2UpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgInNvdXJjZSBpcyBudWxsIik7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZdKGNv
bnN0IFJlZlB0cjxJbWFnZUJpdG1hcD4mIGJpdG1hcCkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewor
ICAgICAgICBhdXRvIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICBpZiAoIWludGVybmFs
Rm9ybWF0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCBvciBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNv
dXJjZUltYWdlQml0bWFwLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgYml0bWFwLT53
aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBJbWFnZUJ1ZmZlciogYnVm
ZmVyID0gYml0bWFwLT5idWZmZXIoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworCisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNv
cHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIGlmIChp
bWFnZSkKKyAgICAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+
JiBwaXhlbHMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB0ZXh0dXJlID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhT
dWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
YygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4g
eyB9OworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICBib29sIG5lZWRD
b252ZXJzaW9uID0gdHJ1ZTsKKyAgICAgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMg
YWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VE
YXRhKHBpeGVscy5nZXQoKSwgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIDEpOworCisgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9y
bWF0LCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMt
PmRhdGEoKS0+ZGF0YSgpKTsKKworICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKworICAgICAgICByZXR1cm4geyB9
OworICAgIH0gLCBbJl0oY29uc3QgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+JiBpbWFnZSkgLT4g
RXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0
ID0gdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UuZ2V0KCkp
OworICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0LnJldHVyblZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4g
eyB9OworCisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgICAg
IGlmICghaW1hZ2VGb3JSZW5kZXIpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICAgICAgaW1hZ2VGb3JS
ZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKCppbWFnZUZvclJlbmRlciwgaW1hZ2UtPndpZHRo
KCksIGltYWdlLT5oZWlnaHQoKSwgMSk7CisKKyAgICAgICAgYXV0byB0ZXh0dXJlID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgICAg
IGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKKyAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2
YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNlSFRNTElt
YWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlRm9yUmVuZGVy
LT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGNhbnZh
cykgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9u
UmVzdWx0ID0gdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZh
cy5nZXQoKSk7CisgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwor
ICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQucmV0dXJuVmFsdWUoKSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgICAgIGlmICghdGV4dHVy
ZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAg
ICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFs
aWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIs
IFRleFN1YkltYWdlLCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEo
KTsKKyAgICAgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgICAgIHRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBUZXhJbWFnZVNvdXJj
ZShpbWFnZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKyNpZiBFTkFCTEUoVklERU8pCisgICAgLCBbJl0oY29uc3QgUmVmUHRyPEhU
TUxWaWRlb0VsZW1lbnQ+JiB2aWRlbykgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgdmlkZW8uZ2V0KCkpOworICAgICAgICBpZiAodmFsaWRhdGlvblJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnJldHVyblZh
bHVlKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIGF1dG8gdGV4dHVyZSA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwor
ICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAg
IEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCk7CisgICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVRleEZ1
bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVv
LT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpKTsKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8s
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorI2VuZGlmCisgICAgKTsKKworICAgIHJldHVybiBXVEY6OnZpc2l0KHZp
c2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHR5cGUsIE9wdGlvbmFsPEpTQzo6VHlwZWRBcnJheVR5cGU+IGFycmF5VHlwZSkKK3sK
KyNkZWZpbmUgVFlQRV9WQUxJREFUSU9OX0NBU0UoYXJyYXlUeXBlTWFjcm8pIGlmIChhcnJheVR5
cGUgJiYgYXJyYXlUeXBlLnZhbHVlKCkgIT0gSlNDOjphcnJheVR5cGVNYWNybykgeyBcCisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgIiAjYXJyYXlUeXBlTWFj
cm8pOyBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgfSBcCisgICAgICAg
IGJyZWFrOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKKyAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZVVpbnQ4
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAgICBUWVBFX1ZBTElE
QVRJT05fQ0FTRShUeXBlSW50OCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82
XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAg
ICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBlVWludDE2KTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSE9SVDoKKyAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUludDE2
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFG
X1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9S
RVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBUWVBFX1ZBTElE
QVRJT05fQ0FTRShUeXBlVWludDMyKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6
CisgICAgICAgIFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVJbnQzMik7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgIFRZUEVf
VkFMSURBVElPTl9DQVNFKFR5cGVGbG9hdDMyKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgICAgICBUWVBFX1ZBTElEQVRJT05f
Q0FTRShUeXBlVWludDE2KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyN1bmRlZiBUWVBFX1ZBTElEQVRJ
T05fQ0FTRQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
aW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVy
VmlldyogcGl4ZWxzLCBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFw
aXhlbHMpIHsKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZShmdW5jdGlvbk5hbWUsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleElu
dGVybmFsRm9ybWF0KGZ1bmN0aW9uTmFtZSwgaW50ZXJuYWxGb3JtYXQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCF2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShmdW5jdGlvbk5hbWUs
IHR5cGUsIHBpeGVscyA/IE9wdGlvbmFsPEpTQzo6VHlwZWRBcnJheVR5cGU+KHBpeGVscy0+Z2V0
VHlwZSgpKSA6IFdURjo6bnVsbG9wdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2Nv
bnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdo
dCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIG51bGxwdHIpOworICAg
IGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1l
bnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHBpeGVscy0+
Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLAorICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sK
KyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlw
ZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5n
IEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNl
ZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFs
aWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGludGVybmFsZm9ybWF0LCBm
b3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICh3
aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVp
Z2h0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEdDM0Rp
bnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0g
MSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYg
KGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZSAmJiB3aWR0aCAhPSBoZWlnaHQpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFwIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVj
ayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09IGhlaWdodC4KKyAgICAgICAgLy8g
Rm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hlY2tpbmcgeW9mZnNl
dCArIGhlaWdodCBpcyBpbiByYW5nZS4KKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQg
b2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBp
ZiAoYm9yZGVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9y
bWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSAmJiBp
c1dlYkdMMSgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMg
bm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11
c3QgYmUgMCBmb3IgZGVwdGggZm9ybWF0cyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAgIGlmICgh
bV9leHRzUkdCKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJzUkdCIHRleHR1cmUgZm9ybWF0cyBu
b3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICAgICAgaWYg
KCFpc1dlYkdMMSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgorICAgICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVI6
CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKKyAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0ICYm
IGlzV2ViR0wxKCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVI
YWxmRmxvYXQgJiYgaXNXZWJHTDEoKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSAmJiBpc1dlYkdMMSgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICAgICAg
aWYgKCFpc1dlYkdMMSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBj
b21iaW5hdGlvbiBvZiBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCBhbmQgdHlwZSBpcyBzdXBwb3J0
ZWQuCisjZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZv
cm1hdE1hY3JvLCB0eXBlMCwgdHlwZTEsIHR5cGUyLCB0eXBlMywgdHlwZTQpIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OmludGVybmFsRm9ybWF0TWFjcm86IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpmb3JtYXRNYWNybykgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBmb3JtYXQgZm9yIGludGVybmFsZm9ybWF0Iik7IFwKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyBcCisgICAgfSBcCisgICAgaWYgKHR5cGUgIT0gdHlwZTAgJiYgdHlwZSAhPSB0eXBlMSAm
JiB0eXBlICE9IHR5cGUyICYmIHR5cGUgIT0gdHlwZTMgJiYgdHlwZSAhPSB0eXBlNCkgeyBcCisg
ICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUyB8fCAo
dHlwZTAgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgJiYgdHlwZTEgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgJiYgdHlwZTIgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhB
TEZfRkxPQVQgJiYgdHlwZTMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQpKSB7IFwK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBpbnRlcm5hbGZvcm1h
dCIpOyBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgfSBcCisgICAgfSBc
CisgICAgYnJlYWs7CisgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgeworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQiAgICAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEgICAg
ICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FULCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExVTUlOQU5DRV9BTFBIQSAgICwgTFVNSU5BTkNF
X0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKExVTUlOQU5DRSAgICAgICAgICwgTFVNSU5BTkNFICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKEFMUEhBICAgICAgICAg
ICAgICwgQUxQSEEgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4ICAgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFI4X1NOT1JNICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNkYgICAgICAgICAgICAgICwg
UkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFIzMkYgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4VUkg
ICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4SSAgICAgICAgICAgICAgICwgUkVEX0lO
VEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFIxNlVJICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNkkgICAgICAg
ICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMlVJICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFIzMkkgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOCAgICAgICAgICAgICAg
ICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHOF9TTk9STSAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
MTZGICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFM
Rl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJGICAgICAgICAgICAgICwgUkcg
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHOFVJICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOEkgICAg
ICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZVSSAgICAgICAgICAgICwgUkdfSU5URUdF
UiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHMTZJICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJVSSAgICAgICAg
ICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJJICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQjggICAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFNSR0I4ICAgICAgICAgICAgICwg
UkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQjU2NSAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhf
U05PUk0gICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxMUZfRzExRl9CMTBGICAgICwgUkdCICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JF
ViAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQjlfRTUgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2RiAgICAg
ICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAg
ICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMyRiAgICAgICAgICAgICwgUkdCICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQjhVSSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhJICAgICAgICAgICAg
ICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2VUkgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
QjE2SSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hP
UlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMyVUkgICAgICAgICAgICwgUkdC
X0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQjMySSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4ICAg
ICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFNSR0I4X0FMUEhBOCAgICAgICwgUkdCQSAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHQkE4X1NOT1JNICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjVfQTEgICAgICAg
ICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE0ICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQjEwX0EyICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNkYgICAgICAgICAgICwg
UkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkYgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4
VUkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4SSAgICAgICAgICAgICwgUkdCQV9J
TlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQjEwX0EyVUkgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNlVJICAg
ICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNkkgICAgICAgICAgICwgUkdCQV9JTlRFR0VS
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQkEzMkkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMlVJICAgICAgICAg
ICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVCAgICwgREVQVEhfQ09NUE9ORU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERF
UFRIX0NPTVBPTkVOVDE2ICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDI0ICwgREVQ
VEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDMyRiwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX1NU
RU5DSUwgICAgICwgREVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIMjRfU1RFTkNJTDggICwgREVQVEhfU1RF
TkNJTCAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKERFUFRIMzJGX1NURU5DSUw4ICwgREVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKKyAgICAg
ICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IG11c3QgbWF0Y2giKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzZfNSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUyAmJiB0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNS
R0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsRm9ybWF0KSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgbXVzdCBt
YXRjaCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlm
ICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09F
UyAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJVbmtub3duIGludGVybmFsIGZvcm1hdCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI3VuZGVmIElOVEVSTkFMX0ZPUk1BVF9DQVNF
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgQVNTRVJUKCFpc0NvbnRleHRM
b3N0KCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFn
ZTJEIiwgVGV4U3ViSW1hZ2UsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhT
dWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRh
YmxlVGV4SW50ZXJuYWxGb3JtYXQoInRleFN1YkltYWdlMkQiLCBpbnRlcm5hbEZvcm1hdCkpOwor
ICAgIGF1dG8gdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCh4b2Zmc2V0ICsgd2lkdGgp
ID49IDApOworICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7CisgICAgQVNTRVJU
KHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkpOworICAg
IEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCArIGhlaWdo
dCkpOworICAgIEFTU0VSVF9VTlVTRUQoaW50ZXJuYWxGb3JtYXQsIHRleC0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0gaW50ZXJuYWxGb3JtYXQpOworICAgIG1fY29udGV4dC0+
dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBDb3B5VGV4SW1hZ2UsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsRm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdCgiY29weVRleEltYWdl
MkQiLCBpbnRlcm5hbEZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHRleCA9IHZh
bGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1h
dENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbEZvcm1hdCwgZ2V0Qm91bmRGcmFt
ZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1l
YnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjpp
c05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAg
bm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFy
KiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250
ZXh0M0QoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQi
LCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7CisKKyAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICBHQzNEc2l6ZWkgY2xp
cHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0
KSkgeworICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAgICAg
IGludGVybmFsRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBh
Y2tBbGlnbm1lbnQpOworICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVp
Z2h0ID4gMCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICBj
bGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKwor
ICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9m
IHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKTsKK30KKworc3RhdGljIGJvb2wgaXNSR0JGb3JtYXQoR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQpCit7CisgICAgcmV0dXJuIGludGVybmFsRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjgKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE4OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8
VGV4SW1hZ2VTb3VyY2U+IHNvdXJjZSkKK3sKKyAgICBpZiAoIXNvdXJjZSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAic291cmNlIGlzIG51bGwiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBSZWZQdHI8SW1h
Z2VCaXRtYXA+JiBiaXRtYXApIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
VGV4SW1hZ2UsIFNvdXJjZUltYWdlQml0bWFwLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAs
IDApKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBJbWFnZUJ1ZmZlciogYnVm
ZmVyID0gYml0bWFwLT5idWZmZXIoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworCisgICAgICAgIGF1dG8gdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgICAgICAvLyBJZiBwb3NzaWJs
ZSwgY29weSBmcm9tIHRoZSBiaXRtYXAgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKKyAgICAgICAg
Ly8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkv
VU5TSUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KKyAgICAgICAgLy8gSW1hZ2VCdWZm
ZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5IGZ1bmN0
aW9uYWwuCisgICAgICAgIGlmICh0ZXh0dXJlCisgICAgICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KQorICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkgeworICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIGlmIChpc1JHQkZv
cm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwg
bGV2ZWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBwYXRoLgorICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBpZiAoaW1hZ2UpCisgICAgICAgICAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9LCBbJl0oY29uc3QgUmVmUHRyPEltYWdlRGF0YT4mIHBpeGVscykgLT4gRXhjZXB0aW9uT3I8
dm9pZD4geworICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0
cnVlOworICAgICAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9y
bWF0IFJHQkE4LgorICAgICAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5h
dGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAg
b3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICBpZiAoIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkKKyAgICAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLmdl
dCgpLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgZGF0YSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhl
bHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZl
cnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+JiBpbWFnZSkgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJ
bWFnZTJEIiwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJlbGVhc2VF
eGNlcHRpb24oKTsKKyAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnJldHVyblZhbHVlKCkp
CisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VG
b3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+
cmVuZGVyZXIoKSk7CisgICAgICAgIGlmICghaW1hZ2VGb3JSZW5kZXIpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQor
ICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKCppbWFnZUZv
clJlbmRlciwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7CisKKyAgICAgICAg
aWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgVGV4
SW1hZ2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgY2Fu
dmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAgICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBhdXRvIHZhbGlkYXRp
b25SZXN1bHQgPSB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2FudmFz
LmdldCgpKTsKKyAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Cisg
ICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5yZXR1cm5WYWx1ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBU
ZXhJbWFnZSwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlw
ZSwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIGF1dG8gdGV4dHVy
ZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwor
ICAgICAgICAvLyBJZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVudCBkaXJl
Y3RseSB0byB0aGUgdGV4dHVyZQorICAgICAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJl
YWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTog
cmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0
ZWQgd2hlbgorICAgICAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGlt
cGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KKyAgICAgICAgaWYgKHRleHR1cmUK
KyAgICAgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCisgICAgICAgICAgICAmJiB0eXBlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgICAgICBhdXRvIHRleHR1
cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOworICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkg
fHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgICAgICBJ
bWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0
KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdl
RGF0YSgpOworICAgICAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICAgICAgdGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBUZXhJbWFnZVNvdXJj
ZShpbWFnZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFz
LT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisjaWYgRU5BQkxFKFZJREVPKQorICAgICwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiYgdmlkZW8pIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1h
Z2UyRCIsIHZpZGVvLmdldCgpKTsKKyAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5yZXR1cm5WYWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1
cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUu
CisgICAgICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBT
VyBwYXRoLgorICAgICAgICAvLyBGSVhNRTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVp
cmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdCIG9yIFJHQkEsCisgICAgICAgIC8vIHR5cGUgc2hv
dWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlm
dGVkIGluIHRoZSBmdXR1cmUuCisgICAgICAgIGF1dG8gdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgICAgICBpZiAoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgICAg
ICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpCisgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiAhbGV2ZWwpIHsKKyAgICAgICAgICAg
IGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVy
bmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKG1f
Y29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tG
bGlwWSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlk
ZW9IZWlnaHQoKSwgdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm9y
bWFsIHB1cmUgU1cgcGF0aC4KKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7
CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisjZW5kaWYKKyAgICApOworCisgICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgc291
cmNlLnZhbHVlKCkpOworfQorCitSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UmIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBJbnRTaXplIHNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBp
ZiAoIWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50
KCksIGltYWdlLnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwg
c2l6ZSk7CisgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUlt
YWdlTW9kZSgpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKKworUmVmUHRyPEltYWdlPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50
KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5KQoreworICAgIEludFNp
emUgc2l6ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KDAs
IDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgLy8gRklYTUU6IFR1cm4gdGhp
cyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCisg
ICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0
UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOworfQor
CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtZiwgR0MzRGlu
dCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5k
aW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAg
ICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJP
UkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAg
ICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQg
JiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAg
ICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzRmxvYXQpIHsKKyAg
ICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYpOworICAgICAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1mKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbWkpOworICAgIH0KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0
ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwg
MCwgcGFyYW0sIGZhbHNlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50
IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJm
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24g
bm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0Rm
bG9hdCB6LCBHQzNEZmxvYXQgdykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGYiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWkoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9jYXRp
b24oKSwgeCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJp
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50
IHkpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRp
b24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJM
aXN0JiYgdikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYubGVuZ3RoKCksIHYuZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkxpc3QmJiB2KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi5sZW5ndGgoKSAvIDIsIHYuZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkxpc3QmJiB2KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2Nh
dGlvbiwgdiwgMykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi5sZW5ndGgoKSAvIDMsIHYuZGF0YSgpKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkxpc3QmJiB2KQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4
dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi5sZW5ndGgoKSAvIDQsIHYuZGF0
YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJMaXN0JiYgdikKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGRhdGEgPSB2LmRhdGEoKTsKKyAgICBhdXRvIGxlbmd0aCA9IHYubGVuZ3RoKCk7CisK
KyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8y
RCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUp
IHsKKyAgICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChkYXRhW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgp
KSkgeworICAgICAgICAgICAgICAgIExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwg
dlslZF09JWQuIExvY2F0aW9uIHR5cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwg
aSwgZGF0YVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2Iiwg
ImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCBsZW5ndGgsIGRhdGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBJbnQzMkxpc3QmJiB2KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwg
diwgMikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdi5sZW5ndGgoKSAvIDIsIHYuZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgSW50MzJMaXN0JiYgdikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYubGVuZ3RoKCkgLyAzLCB2LmRhdGEoKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyTGlzdCYmIHYpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250
ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2Lmxlbmd0aCgpIC8gNCwgdi5k
YXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJMaXN0JiYgdikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4
MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYubGVuZ3Ro
KCkgLyA0LCB0cmFuc3Bvc2UsIHYuZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyTGlzdCYmIHYpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFy
YW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2Lmxlbmd0aCgpIC8gOSwgdHJhbnNwb3NlLCB2LmRhdGEoKSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxv
YXQzMkxpc3QmJiB2KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYubGVuZ3RoKCkgLyAxNiwgdHJh
bnNwb3NlLCB2LmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgYm9vbCBkZWxldGVkOwor
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFtLCBkZWxl
dGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBwcm9ncmFt
ID0gMDsKKyAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAg
IGlmIChtX2N1cnJlbnRQcm9ncmFtKQorICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25E
ZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9
IHByb2dyYW07CisgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgICAgIHByb2dyYW0tPm9uQXR0
YWNoZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9n
cmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMWYiLCBpbmRleCwgMSwgdjAsIDAu
MGYsIDAuMGYsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkK
K3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAs
IHYxLCAwLjBmLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEs
IEdDM0RmbG9hdCB2MikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliM2Yi
LCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRleCwgNCwgdjAsIHYxLCB2MiwgdjMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIFdURk1vdmUodiksIDEpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgRmxv
YXQzMkxpc3QmJiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2
IiwgaW5kZXgsIFdURk1vdmUodiksIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiB2KQor
eworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIFdURk1v
dmUodiksIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkxpc3QmJiB2KQoreworICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIFdURk1vdmUodiksIDQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9y
bWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzaXplIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1KSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9p
bnRlciIsICJiYWQgc3RyaWRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG9m
ZnNldCA8IDAgfHwgb2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBvZmZzZXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlciAmJiBvZmZzZXQpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVt
ZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXplLCB0
eXBlIGFuZCBzdHJpZGUKKyAgICBhdXRvIHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7Cisg
ICAgaWYgKCF0eXBlU2l6ZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXpl
KSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZv
ciB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgR0MzRHNpemVpIGJ5dGVzUGVy
RWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKKworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVj
dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBt
X2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250
ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAg
bV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOworCisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250
ZXh0KSB7CisgICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4
dCB3YXMgcmVjZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAg
Ly8gZGVjaWRlIHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJt
aXNzaW9uIHRvIHVzZSBXZWJHTCBhZ2Fpbi4KKyAgICAgICAgYXV0byogY2FudmFzID0gaHRtbENh
bnZhcygpOworICAgICAgICBpZiAoY2FudmFzKSB7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGNhbnZhcy0+ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3NlV2ViR0xDb250ZXh0KG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICAvLyBUaGVy
ZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRp
b24gYW5kCisgICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1Ig
bWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29u
dGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29uYWJseQorICAg
IC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29udGV4
dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAo
bW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9udERpc3BsYXlJ
bkNvbnNvbGU7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRF
WFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOwor
CisgICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250ZXh0IGxvc3Qg
ZXZlbnQgaGFzIGJvdGggYmVlbgorICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBkZWZhdWx0IGJl
aGF2aW9yIHByZXZlbnRlZC4KKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZmFsc2U7CisKKyAgICAv
LyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRv
IGltcGxlbWVudAorICAgIC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4K
KyAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlUmVzdG9yZUNvbnRleHQo
KQoreworICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3Rv
cmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBpZiAobV9jb250ZXh0TG9z
dE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4
dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1f
cmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCitQbGF0Zm9ybUxheWVyKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBt
X2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0JiBvYmplY3Qp
Cit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChvYmplY3QpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9i
amVjdCYgb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QmIG9iamVj
dCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZSgmb2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9i
amVjdCYgb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRPYmplY3RzLmFkZCgmb2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKK3sKKyAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAobV9jb250
ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOworICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdG9wKCkKK3sKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Cisg
ICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQpOworICAgICAgICBk
ZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiAiV2ViR0xSZW5kZXJpbmdDb250ZXh0IjsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCit7CisgICAgbV9pc1N1
c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVz
dW1lKCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sK
KyAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihw
bmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1ZlY3Rvcjxib29sPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0g
cG5hbWUpCit7CisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklU
RU1BU0spIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisgICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7IDAgfTsKKyAgICBtX2NvbnRleHQt
PmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgVmVjdG9yPGJvb2w+IHZlY3Rvcig0KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICB2ZWN0b3JbaV0g
PSB2YWx1ZVtpXTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCitmbG9hdCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBH
QzNEZmxvYXQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFs
dWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldEludFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKwordW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRJbnQ2NFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50NjQgdmFsdWUg
PSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcjY0dihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK1JlZlB0cjxGbG9hdDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sK
KyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYo
cG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRjaCAocG5h
bWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgICAgICBsZW5n
dGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToK
KyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6dHJ5
Q3JlYXRlKHZhbHVlLCBsZW5ndGgpOworfQorCitSZWZQdHI8SW50MzJBcnJheT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElN
UzoKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklF
V1BPUlQ6CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBJbnQzMkFycmF5
Ojp0cnlDcmVhdGUodmFsdWUsIGxlbmd0aCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQoreworICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0ID0gZmFs
c2U7CisgICAgYm9vbCB1c2VzQXRMZWFzdE9uZUJsYWNrVGV4dHVyZSA9IGZhbHNlOworICAgIFdl
YkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHRleHR1cmVFeHRl
bnNpb25GbGFncygpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBub0xvbmdlclVucmVuZGVyYWJs
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGJhZFRleHR1cmUgOiBtX3VucmVuZGVyYWJsZVRleHR1cmVV
bml0cykgeworICAgICAgICBBU1NFUlQoYmFkVGV4dHVyZSA8IG1fdGV4dHVyZVVuaXRzLnNpemUo
KSk7CisgICAgICAgIGF1dG8mIHRleHR1cmVVbml0ID0gbV90ZXh0dXJlVW5pdHNbYmFkVGV4dHVy
ZV07CisgICAgICAgIGJvb2wgbmVlZHNUb1VzZUJsYWNrMkRUZXh0dXJlID0gdGV4dHVyZVVuaXQu
dGV4dHVyZTJEQmluZGluZyAmJiB0ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9V
c2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucyk7CisgICAgICAgIGJvb2wgbmVlZHNUb1VzZUJsYWNr
M0RUZXh0dXJlID0gdGV4dHVyZVVuaXQudGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIHRleHR1cmVV
bml0LnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lv
bnMpOworCisgICAgICAgIGlmICghbmVlZHNUb1VzZUJsYWNrMkRUZXh0dXJlICYmICFuZWVkc1Rv
VXNlQmxhY2szRFRleHR1cmUpIHsKKyAgICAgICAgICAgIG5vTG9uZ2VyVW5yZW5kZXJhYmxlLmFw
cGVuZChiYWRUZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgdXNlc0F0TGVhc3RPbmVCbGFja1RleHR1cmUgPSB0cnVlOworCisgICAgICAgIGlmIChi
YWRUZXh0dXJlICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+YWN0aXZlVGV4dHVyZShiYWRUZXh0dXJlICsgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKKyAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBp
ZiAocmVzZXRBY3RpdmVVbml0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoYmFkVGV4dHVyZSArIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgICAgICAg
ICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8V2Vi
R0xUZXh0dXJlPiB0ZXgyRDsKKyAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4Q3ViZU1h
cDsKKyAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcpIHsKKyAgICAgICAgICAgIHByaW50VG9Db25z
b2xlKE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIldlYkdMOiAiLCBmdW5jdGlvbk5h
bWUsICI6IHRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIsIGJhZFRleHR1cmUsCisgICAg
ICAgICAgICAgICAgIiBpcyBub3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIg
YW5kIGhhdmUgaW5jb21wYXRpYmxlIHRleHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVy
ZSBjb21wbGV0ZScsIgorICAgICAgICAgICAgICAgICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZs
b2F0IHR5cGUgd2l0aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBm
bG9hdC9oYWxmLWZsb2F0IGxpbmVhciBleHRlbnNpb24gZW5hYmxlZC4iKSk7CisgICAgICAgICAg
ICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICB0ZXhDdWJlTWFw
ID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGV4MkQgPSB0ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAg
ICAgICAgdGV4Q3ViZU1hcCA9IHRleHR1cmVVbml0LnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmVlZHNUb1VzZUJsYWNrMkRUZXh0dXJlKQorICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgb2JqZWN0T3JaZXJvKHRleDJELmdldCgpKSk7CisgICAgICAgIGlmIChuZWVkc1RvVXNl
QmxhY2szRFRleHR1cmUpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1hcC5n
ZXQoKSkpOworICAgIH0KKyAgICBpZiAocmVzZXRBY3RpdmVVbml0KQorICAgICAgICBtX2NvbnRl
eHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCArIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHJlbmRlcmFibGUgOiBub0xvbmdlclVu
cmVuZGVyYWJsZSkKKyAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKHJl
bmRlcmFibGUpOworCisgICAgcmV0dXJuIHVzZXNBdExlYXN0T25lQmxhY2tUZXh0dXJlOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0
dXJlczF4MSgpCit7CisgICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07
CisgICAgbV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVy
ZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1
cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1h
cC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1os
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVAsIDApOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4SW50ZXJu
YWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKK3sK
KyAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlG
b3JtYXQodGV4SW50ZXJuYWxGb3JtYXQpOworICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7CisgICAg
cmV0dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKK30KKworR0MzRGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK3sKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9y
bWF0KCk7CisgICAgaWYgKG1fYXR0cmlidXRlcy5hbHBoYSkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwor
fQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldp
ZHRoKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dENvbG9yQnVmZmVyV2lkdGgoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1
cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVySGVpZ2h0KCk7CisgICAgcmV0
dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30K
KworUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCit7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gdGV4dHVyZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
KyAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRl
eHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgIGlmICh1c2VT
aXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKHRleHR1cmVFeHRlbnNpb25GbGFncygpKSkKKyAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0
dXJlVW5pdHMuYWRkKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworCisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVu
Z3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgY29uc3QgdW5zaWduZWQgbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKKyAgICBpZiAo
c3RyaW5nLmxlbmd0aCgpID4gbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNE
aW50IHkpCit7CisgICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJz
aXplIDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RyaW5nKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAo
IXZhbGlkYXRlQ2hhcmFjdGVyKHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJz
dHJpbmcgbm90IEFTQ0lJIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwgMCkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGxl
dmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2hl
Y2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9uJ3QKKyAgICAv
LyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21w
cmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKworc3RydWN0IEJsb2NrUGFy
YW1ldGVycyB7CisgICAgY29uc3QgaW50IHdpZHRoOworICAgIGNvbnN0IGludCBoZWlnaHQ7Cisg
ICAgY29uc3QgaW50IHNpemU7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0
ZUJ5dGVzRm9yQVNUQyhHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIGNvbnN0IEJs
b2NrUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICByZXR1cm4gKCh3aWR0aCArIHBhcmFt
ZXRlcnMud2lkdGggLSAxKSAvIHBhcmFtZXRlcnMud2lkdGgpICogKChoZWlnaHQgKyBwYXJhbWV0
ZXJzLmhlaWdodCAtIDEpIC8gcGFyYW1ldGVycy5oZWlnaHQpICogcGFyYW1ldGVycy5zaXplOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRl
eEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyYgcGl4ZWxzKQor
eworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
d2lkdGggb3IgaGVpZ2h0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgdW5zaWduZWQgYnl0ZXNSZXF1aXJlZCA9IDA7CisKKyAgICAvLyBCbG9jayBwYXJhbWV0ZXJz
IGZvciBBU1RDIGZvcm1hdHMKKyAgICBjb25zdCBpbnQga0FTVENCbG9ja1NpemUgPSAxNjsKKyAg
ICBzdGF0aWMgY29uc3QgQmxvY2tQYXJhbWV0ZXJzIEFTVENQYXJhbWV0ZXJzW10geworICAgICAg
ICBCbG9ja1BhcmFtZXRlcnMgeyA0LCA0LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9j
a1BhcmFtZXRlcnMgeyA1LCA0LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFt
ZXRlcnMgeyA1LCA1LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMg
eyA2LCA1LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyA2LCA2
LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyA4LCA1LCBrQVNU
Q0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyA4LCA2LCBrQVNUQ0Jsb2Nr
U2l6ZSB9LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyA4LCA4LCBrQVNUQ0Jsb2NrU2l6ZSB9
LAorICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyAxMCwgNSwga0FTVENCbG9ja1NpemUgfSwKKyAg
ICAgICAgQmxvY2tQYXJhbWV0ZXJzIHsgMTAsIDYsIGtBU1RDQmxvY2tTaXplIH0sCisgICAgICAg
IEJsb2NrUGFyYW1ldGVycyB7IDEwLCA4LCBrQVNUQ0Jsb2NrU2l6ZSB9LAorICAgICAgICBCbG9j
a1BhcmFtZXRlcnMgeyAxMCwgMTAsIGtBU1RDQmxvY2tTaXplIH0sCisgICAgICAgIEJsb2NrUGFy
YW1ldGVycyB7IDEyLCAxMCwga0FTVENCbG9ja1NpemUgfSwKKyAgICAgICAgQmxvY2tQYXJhbWV0
ZXJzIHsgMTIsIDEyLCBrQVNUQ0Jsb2NrU2l6ZSB9CisgICAgfTsKKyAgICBjb25zdCBHQzNEZW51
bSBBU1RDRW51bVN0YXJ0UkdCQSA9IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
NHg0X0tIUjsKKyAgICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0U1JHQjggPSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjsKKworICAgIHN3aXRj
aCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdpZHRo
ICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICAgICAgaW50IG51bUJs
b2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Cisg
ICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93
biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSAxNjsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lk
dGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7CisgICAgICAgICAgICBpbnQgbnVt
QmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsK
KyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NE
b3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9j
a1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9j
a1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
V2lkdGggPSAxNjsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OworICAg
ICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICog
c3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfNHg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfNXg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X0FTVENfNXg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FT
VENfNng1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
Nng2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg1
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tI
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSOgorICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUjoKKyAgICAgICAg
Ynl0ZXNSZXF1aXJlZCA9IGNhbGN1bGF0ZUJ5dGVzRm9yQVNUQyh3aWR0aCwgaGVpZ2h0LCBBU1RD
UGFyYW1ldGVyc1tmb3JtYXQgLSBBU1RDRW51bVN0YXJ0UkdCQV0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRf
S0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzV4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzEyeDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ18xMngxMl9LSFI6CisgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBjYWxjdWxhdGVC
eXRlc0ZvckFTVEMod2lkdGgsIGhlaWdodCwgQVNUQ1BhcmFtZXRlcnNbZm9ybWF0IC0gQVNUQ0Vu
dW1TdGFydFNSR0I4XSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAocGl4ZWxzLmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBk
aW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IEdDM0RzaXpl
aSBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tIZWlnaHQg
PSA0OworICAgICAgICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9t
YXhUZXh0dXJlU2l6ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgICAgICBjb25zdCBH
QzNEc2l6ZWkgbWF4Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+IGxldmVs
OworICAgICAgICBib29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxl
dmVsICYmIHdpZHRoID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9
IG1heENvbXByZXNzZWREaW1lbnNpb24pOworICAgICAgICBib29sIGhlaWdodFZhbGlkID0gKGxl
dmVsICYmIGhlaWdodCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdo
dCAlIGtCbG9ja0hlaWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOwor
ICAgICAgICBpZiAoIXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9J
TUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFf
SU1HOgorICAgICAgICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9mIDIuCisg
ICAgICAgIGlmICgod2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAx
KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQg
Zm9yIGxldmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzR4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RD
XzV4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4
NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9L
SFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSOgorICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgorICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tI
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182
eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ184eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJf
S0hSOgorICAgICAgICAvLyBObyBoZWlnaHQgYW5kIHdpZHRoIHJlc3RyaWN0aW9ucyBvbiBBU1RD
LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQoreworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zm
c2V0IDwgMCkgeworICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0
OworICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxv
Y2tIZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNl
dCBub3QgbXVsdGlwbGUgb2YgNCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQo
dGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUs
IHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKKyAgICAg
ICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNldCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4
b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdl
dCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0
LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1h
dGNoIGV4aXN0aW5nIGxldmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rp
b25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9G
QU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9k
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSkKK3sKKyAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8
fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1
bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImZyb250IGFuZCBiYWNrIHN0ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQoreworICAgIHN3aXRjaCAoZnVuYykgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxFU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VR
VUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZ
UzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSB8fCAhbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNz
YWdlPiBjb25zb2xlTWVzc2FnZTsKKworICAgIC8vIEVycm9yIG1lc3NhZ2VzIGNhbiBvY2N1ciBk
dXJpbmcgZnVuY3Rpb24gY2FsbHMsIHNvIHNob3cgc3RhY2sgdHJhY2VzIGZvciB0aGVtLgorICAg
IGlmIChsZXZlbCA9PSBNZXNzYWdlTGV2ZWw6OkVycm9yKSB7CisgICAgICAgIFJlZjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0
Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSk7CisgICAgICAgIGNvbnNvbGVN
ZXNzYWdlID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291
cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEZNb3Zl
KHN0YWNrVHJhY2UpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29uc29sZU1lc3NhZ2UgPSBtYWtl
VW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmlu
ZywgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UpOworCisgICAgYXV0byogY2FudmFz
ID0gaHRtbENhbnZhcygpOworICAgIGlmIChjYW52YXMpCisgICAgICAgIGNhbnZhcy0+ZG9jdW1l
bnQoKS5hZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKGNvbnNvbGVNZXNzYWdlKSk7CisKKyAgICAt
LW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkOworICAgIGlmICghbV9udW1HTEVycm9yc1Rv
Q29uc29sZUFsbG93ZWQpCisgICAgICAgIHByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbDo6V2Fy
bmluZywgIldlYkdMOiB0b28gbWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVw
b3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRoaXMgY29udGV4dC4iKTsKK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAo
KChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFw
aGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgJiYgKGRz
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09
IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgY29uc3QgRmxvYXQzMkxpc3QmIHYs
IEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYuZGF0YSgp
LCB2Lmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGNvbnN0IEludDMy
TGlzdCYgdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICByZXR1cm4gdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwg
di5kYXRhKCksIHYubGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9p
ZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAg
cmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2Nh
dGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBGbG9hdDMyTGlzdCYgdiwgR0MzRHNpemVp
IHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFy
YW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYuZGF0YSgpLCB2Lmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgY29uc3Qgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCit7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKHRyYW5zcG9zZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBGQUxTRSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzaXplIDwgcmVxdWlyZWRN
aW5TaXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5TaXplKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBzaXplIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBPcHRpb25hbDxXZWJHTEJ1ZmZlcio+
IGJ1ZmZlcjsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1ZmZlciA9
IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyNpZiBFTkFCTEUoV0VCR0wyKQorICAgICAgICBpZiAoaXNXZWJHTDIoKSkgeworICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZENvcHlS
ZWFkQnVmZmVyLmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICAgICAg
YnVmZmVyID0gbV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVG
RkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRQaXhlbFBhY2tCdWZmZXIuZ2V0
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1f
Ym91bmRQaXhlbFVucGFja0J1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyLmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0g
bV9ib3VuZFVuaWZvcm1CdWZmZXIuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlmICghYnVmZmVyIHx8ICFidWZm
ZXIudmFsdWUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJB
VzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPGJv
b2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQoreworICAg
IGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IFVS
TCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgaWYg
KHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OworICAgIHJldHVybiB0cnVlOworfQorCitFeGNlcHRp
b25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52YXNF
bGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cykKK3sKKyAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibm8gY2FudmFzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNlY3VyaXR5RXJyb3IgfTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURF
TykKKworRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8pCit7CisgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8
fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHZpZGVvIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4o
dmlkZW8pKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OworICAg
IHJldHVybiB0cnVlOworfQorCisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRl
eEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4
QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgewor
ICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWIyZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6
CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmli
VmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1
ZVswXSA9IHYwOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzFdID0gdjE7CisgICAgYXR0cmliVmFs
dWUudmFsdWVbMl0gPSB2MjsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVszXSA9IHYzOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyTGlzdCYmIGxpc3QsIEdD
M0RzaXplaSBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gZGF0YSA9IGxpc3QuZGF0YSgpOwor
ICAgIGlmICghZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgc2l6ZSA9IGxpc3QubGVuZ3RoKCk7CisgICAg
aWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRl
eEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4
QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgewor
ICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgZGF0YSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIyZnYoaW5kZXgsIGRhdGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBkYXRhKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmdihpbmRleCwgZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3Zl
cnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAg
ICBmb3IgKGludCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRy
aWJWYWx1ZS52YWx1ZVtpaV0gPSBkYXRhW2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2U6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyID0gY3JlYXRlQnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0
KCkpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgMCk7CisgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1
ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZ
X0JVRkZFUiwgMCk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsK
KyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVswXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0g
PSAwLjBmOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4wZjsKKyAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IDEuMGY7CisgICAgbV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwgPSBmYWxzZTsKKyAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gZmFs
c2U7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTaW11bGF0
ZWRWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnRleCkKK3sKKyAgICBpZiAoIW1fY3VycmVu
dFByb2dyYW0pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9vbCB1c2luZ1ZlcnRleEF0
dHJpYjAgPSBtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpOworICAgIGlm
ICghdXNpbmdWZXJ0ZXhBdHRyaWIwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8m
IHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgw
KTsKKyAgICBpZiAoc3RhdGUuZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBh
dXRvIGJ1ZmZlclNpemUgPSBjaGVja2VkQWRkQW5kTXVsdGlwbHk8R0MzRHVpbnQ+KG51bVZlcnRl
eCwgMSwgNCk7CisgICAgaWYgKCFidWZmZXJTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBDaGVja2VkPEdDM0RzaXplaXB0ciwgUmVjb3JkT3ZlcmZsb3c+IGJ1ZmZlckRhdGFTaXpl
KGJ1ZmZlclNpemUudmFsdWUoKSk7CisgICAgYnVmZmVyRGF0YVNpemUgKj0gQ2hlY2tlZDxHQzNE
c2l6ZWlwdHI+KHNpemVvZihHQzNEZmxvYXQpKTsKKyAgICByZXR1cm4gIWJ1ZmZlckRhdGFTaXpl
Lmhhc092ZXJmbG93ZWQoKSAmJiBidWZmZXJEYXRhU2l6ZS51bnNhZmVHZXQoKSA+IDA7Cit9CisK
K09wdGlvbmFsPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEdWludCBudW1WZXJ0ZXgpCit7CisgICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFt
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCB1c2luZ1ZlcnRleEF0dHJpYjAgPSBt
X2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpOworICAgIGlmICh1c2luZ1Zl
cnRleEF0dHJpYjApCisgICAgICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOwor
CisgICAgYXV0byYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApOworICAgIGlmIChzdGF0ZS5lbmFibGVkICYmIHVzaW5nVmVydGV4QXR0cmli
MCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdXNpbmdWZXJ0ZXhBdHRyaWIwICYm
ICFtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7CisgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZl
ci0+b2JqZWN0KCkpOworCisgICAgLy8gV2Uga25vdyBidWZmZXJTaXplIGFuZCBidWZmZXJEYXRh
U2l6ZSB3b24ndCBvdmVyZmxvdyBvciBnbyBuZWdhdGl2ZSwgdGhhbmtzIHRvIHZhbGlkYXRlU2lt
dWxhdGVkVmVydGV4QXR0cmliMAorICAgIEdDM0R1aW50IGJ1ZmZlclNpemUgPSAobnVtVmVydGV4
ICsgMSkgKiA0OworICAgIEdDM0RzaXplaXB0ciBidWZmZXJEYXRhU2l6ZSA9IGJ1ZmZlclNpemUg
KiBzaXplb2YoR0MzRGZsb2F0KTsKKworICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4
QXR0cmliMEJ1ZmZlclNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIC8vIFdlIHdlcmUg
dW5hYmxlIHRvIGNyZWF0ZSBhIGJ1ZmZlci4KKyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMFVz
ZWRCZWZvcmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUg
PSAwOworICAgICAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7CisgICAgICAgIG1fZm9yY2VBdHRy
aWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvJiBhdHRyaWJWYWx1ZSA9
IG1fdmVydGV4QXR0cmliVmFsdWVbMF07CisKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwCisg
ICAgICAgICYmIChtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbAorICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzFdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzFdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVsyXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbM10g
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10pKSB7CisKKyAgICAgICAgYXV0byBidWZm
ZXJEYXRhID0gbWFrZVVuaXF1ZUFycmF5PEdDM0RmbG9hdD4oYnVmZmVyU2l6ZSk7CisgICAgICAg
IGZvciAoR0MzRHVpbnQgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKKyAgICAg
ICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAg
ICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAg
ICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwor
ICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNd
OworICAgICAgICB9CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0
cmliVmFsdWUudmFsdWVbMF07CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFd
ID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1
ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUudmFsdWVbM107CisgICAgICAgIG1fZm9yY2VBdHRy
aWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVm
ZmVyRGF0YS5nZXQoKSk7CisgICAgfQorICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRl
cigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZXNB
ZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKK3sKKyAgICBjb25zdCBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZTo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBpZiAoc3RhdGUuYnVmZmVy
QmluZGluZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhz
dGF0ZS5idWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliUG9pbnRlcigwLCBzdGF0ZS5zaXplLCBzdGF0ZS50eXBlLCBzdGF0ZS5ub3JtYWxpemVkLCBz
dGF0ZS5vcmlnaW5hbFN0cmlkZSwgc3RhdGUub2Zmc2V0KTsKKyAgICB9CisgICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVy
byhtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2lzU3VzcGVuZGVkKTsKKyAgICBhdXRvKiBjYW52YXMgPSBodG1sQ2FudmFzKCk7Cisg
ICAgaWYgKCFjYW52YXMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZjxXZWJHTENvbnRleHRF
dmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJn
bGNvbnRleHRsb3N0RXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxh
YmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkpOworICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CisgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cisg
ICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCAmJiBtX3Jlc3RvcmVB
bGxvd2VkKQorICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc1N1c3BlbmRlZCk7CisgICAgQVNTRVJUKG1fY29udGV4
dExvc3QpOworICAgIGlmICghbV9jb250ZXh0TG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1
bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJl
dmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0
b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNv
bnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9y
dC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0
IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHN3aXRjaCAoY29udGV4dExvc3RSZWFz
b24pIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjoKKyAgICAgICAgLy8g
VGhlIEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQorICAg
ICAgICAvLyBzdXBwb3J0IEdMX0FSQl9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQuIEFsdGVybmF0
aXZlbHksIHRoZQorICAgICAgICAvLyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIG1pZ2h0
IGhhdmUgYmVlbiB1c2VkIHRvIGZvcmNlCisgICAgICAgIC8vIGEgbG9zdCBjb250ZXh0LgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRFWFRfUkVTRVRf
QVJCOgorICAgICAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlm
IHRoaXMgY29udGV4dCB3YXMKKyAgICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcgdGhlIGdyYXBo
aWNzIHJlc2V0LgorICAgICAgICBwcmludFRvQ29uc29sZShNZXNzYWdlTGV2ZWw6Oldhcm5pbmcs
ICJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3Mg
Y2FyZCB0byByZXNldDsgbm90IHJlc3RvcmluZyB0aGUgY29udGV4dCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgor
ICAgICAgICAvLyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRf
QVJCOgorICAgICAgICAvLyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0
aGVtIHRoYXQgV2ViR0wKKyAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZl
IGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0bworICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRo
ZW0gd2hldGhlciB0aGV5IHdhbnQgdG8gY29udGludWUgcnVubmluZworICAgICAgICAvLyB0aGUg
Y29udGVudC4gT25seSBpZiB0aGV5IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKKyAgICAgICAg
Ly8gYXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZSBjb250ZXh0LgorICAgICAgICBwcmludFRvQ29u
c29sZShNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRo
ZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8qIGNhbnZhcyA9IGh0bWxDYW52YXMoKTsK
KyAgICBpZiAoIWNhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEZyYW1lPiBm
cmFtZSA9IGNhbnZhcy0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2Vi
R0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8U2Nyb2xsVmlldz4gcm9vdCA9IHZpZXct
PnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93
KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Cisg
ICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFs
TG9zdENvbnRleHQpCisgICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vj
b25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAv
LyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVw
b3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5n
IGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dCA9IGNv
bnRleHQ7CisgICAgYWRkQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVySWZOZWNlc3NhcnkoKTsK
KyAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgc2V0dXBGbGFncygpOworICAgIGluaXRp
YWxpemVOZXdDb250ZXh0KCk7CisgICAgaW5pdGlhbGl6ZVZlcnRleEFycmF5T2JqZWN0cygpOwor
ICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRyZXN0b3JlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywg
RXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCit7CisgICAg
aWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0LT5zaW11bGF0ZUNvbnRleHRDaGFuZ2Vk
KCk7Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbnN1cmVOb3ROdWxs
KGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QKK3sKKyAgICBpZiAodGV4dC5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKwor
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VC
dWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpCisgICAgOiBtX2J1ZmZlcnMoY2FwYWNpdHkpCit7Cit9
CisKK0ltYWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZl
ckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBp
OworICAgIGZvciAoaSA9IDA7IGkgPCBtX2J1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFidWYp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBz
aXplKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7Cisg
ICAgICAgIGJ1Zi0+Y29udGV4dCgpLmNsZWFyUmVjdChGbG9hdFJlY3QoeyB9LCBGbG9hdFNpemUo
c2l6ZSkpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisKKyAgICAvLyBGSVhNRSAoMTQ5
NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxl
cmF0ZWQ/CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIEFTU0VSVChtX2J1ZmZlcnMuc2l6ZSgpID4gMCk7CisgICAg
aSA9IHN0ZDo6bWluKG1fYnVmZmVycy5zaXplKCkgLSAxLCBpKTsKKyAgICBtX2J1ZmZlcnNbaV0g
PSBXVEZNb3ZlKHRlbXApOworCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5n
ZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJldHVybiBidWY7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9G
cm9udChzaXplX3QgaWR4KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBpZHg7IGkgPiAwOyAtLWkp
CisgICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNw
YWNlIHsKKworICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iX3M7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6CisgICAgICAgICAg
ICByZXR1cm4gIklOVkFMSURfVkFMVUUiX3M7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX09QRVJB
VElPTiJfczsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToK
KyAgICAgICAgICAgIHJldHVybiAiT1VUX09GX01FTU9SWSJfczsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAg
ICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIl9zOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgICAgICByZXR1
cm4gIkNPTlRFWFRfTE9TVF9XRUJHTCJfczsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCJXZWJHTCBFUlJPUigiLCBoZXgoZXJyb3IsIDQsIExvd2VyY2Fz
ZSksICcpJyk7CisgICAgICAgIH0KKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIGFub255bW91cwor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN5bnRoZXNpemVHTEVycm9yKEdDM0Rl
bnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlzcGxheSkKK3sKKyAgICBpZiAobV9zeW50
aGVzaXplZEVycm9yc1RvQ29uc29sZSAmJiBkaXNwbGF5ID09IERpc3BsYXlJbkNvbnNvbGUpIHsK
KyAgICAgICAgU3RyaW5nIHN0ciA9ICJXZWJHTDogIiArIEdldEVycm9yU3RyaW5nKGVycm9yKSAr
ICAiOiAiICsgU3RyaW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9u
KTsKKyAgICAgICAgcHJpbnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsOjpFcnJvciwgc3RyKTsKKyAg
ICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXBwbHlTdGVuY2lsVGVzdCgpCit7CisgICAgYm9v
bCBoYXZlU3RlbmNpbEJ1ZmZlciA9IGZhbHNlOworCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQorICAgICAgICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5o
YXNTdGVuY2lsQnVmZmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9
IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzKTsKKyAg
ICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsOworICAgIH0KKyAg
ICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwgbV9zdGVu
Y2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wg
ZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKGNh
cGFiaWxpdHkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcGFiaWxp
dHkpOworfQorCitJbnRTaXplIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsYW1wZWRDYW52
YXNTaXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXNCYXNlKCkud2lkdGgo
KSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAorICAgICAgICBjbGFtcChjYW52YXNCYXNlKCku
aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7Cit9CisKK0dDM0RpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQoreworICAgIGlmICghc3Vw
cG9ydHNEcmF3QnVmZmVycygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fbWF4RHJh
d0J1ZmZlcnMpCisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpN
QVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOworICAgIGlmICghbV9tYXhD
b2xvckF0dGFjaG1lbnRzKQorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lv
bnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7
CisgICAgLy8gV0VCR0xfZHJhd19idWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xPUl9BVFRBQ0hNRU5U
UyA+PSBNQVhfRFJBV19CVUZGRVJTLgorICAgIHJldHVybiBzdGQ6Om1pbihtX21heERyYXdCdWZm
ZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMpOworfQorCitHQzNEaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQoreworICAgIGlmICghc3VwcG9y
dHNEcmF3QnVmZmVycygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fbWF4Q29sb3JB
dHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6
Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAg
IHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQoreworICAgIG1fYmFj
a0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCit7CisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50VGV4dHVy
ZTJEKCkKK3sKKyAgICBhdXRvIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1
cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0
dXJlLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUodGV4dHVyZUV4dGVuc2lvbkZsYWdzKCkpKQorICAg
ICAgICBtX3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5hZGQobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3VwcG9ydHNEcmF3QnVmZmVy
cygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkKSB7
CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0cnVlOwor
ICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKCp0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpCit7CisgICAgaWYgKCFwcmltY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlRHJh
d0FycmF5cygiZHJhd0FycmF5c0luc3RhbmNlZCIsIG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNv
dW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CisgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICAgICAgaWYgKCFz
aW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5h
YmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgorICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKKyAgICB9Cisg
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+ZHJh
d0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisKKyAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAg
ICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICgh
aXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJk
cmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZEFuZE5v
dGlmeUNhbnZhc09ic2VydmVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sK
KyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAg
ICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2Rl
LCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0
cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Cisg
ICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQ
cmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1F
bGVtZW50cyk7CisgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2lt
dWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICAgICAgaWYgKCFzaW11bGF0ZVZl
cnRleEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNp
bXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3Rh
bmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKKyAgICB9CisgICAgaWYgKCFp
c0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRy
YXdFbGVtZW50c0luc3RhbmNlZCIsIHRydWUpOworCisjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxF
KFdFQkdMMikKKyAgICBpZiAoaXNXZWJHTDIoKSkKKyAgICAgICAgbV9jb250ZXh0LT5wcmltaXRp
dmVSZXN0YXJ0SW5kZXgoZ2V0UmVzdGFydEluZGV4KHR5cGUpKTsKKyNlbmRpZgorCisgICAgbV9j
b250ZXh0LT5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19j
YXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIHByaW1jb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHNJ
bnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkQW5kTm90aWZ5Q2FudmFz
T2JzZXJ2ZXIoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
bmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3Ip
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVN1cHBvcnRlZEV4
dGVuc2lvbihBU0NJSUxpdGVyYWwgZXh0ZW5zaW9uTmFtZUxpdGVyYWwpCit7CisgICAgQVNTRVJU
KG1fY29udGV4dCk7CisgICAgYXV0byYgZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpOworICAgIFN0cmluZyBleHRlbnNpb25OYW1lIHsgZXh0ZW5zaW9uTmFtZUxpdGVyYWwg
fTsKKyAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoZXh0ZW5zaW9uTmFtZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoZXh0ZW5zaW9uTmFt
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YWN0aXZpdHlTdGF0ZURpZENoYW5nZShPcHRpb25TZXQ8QWN0aXZpdHlTdGF0ZTo6RmxhZz4g
b2xkQWN0aXZpdHlTdGF0ZSwgT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU6OkZsYWc+IG5ld0FjdGl2
aXR5U3RhdGUpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gY2hhbmdlZCA9IG9sZEFjdGl2aXR5U3RhdGUgXiBuZXdBY3Rpdml0eVN0YXRlOworICAg
IGlmIChjaGFuZ2VkICYgQWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKQorICAgICAgICBtX2NvbnRl
eHQtPnNldENvbnRleHRWaXNpYmlsaXR5KG5ld0FjdGl2aXR5U3RhdGUuY29udGFpbnMoQWN0aXZp
dHlTdGF0ZTo6SXNWaXNpYmxlKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6c2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+c2V0RmFpbE5leHRHUFVTdGF0dXNDaGVj
aygpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpZENvbXBvc2l0ZSgp
Cit7CisgICAgaWYgKFVOTElLRUxZKGNhbGxUcmFjaW5nQWN0aXZlKCkpKQorICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKCp0aGlz
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlJl
YWxMb3N0Q29udGV4dCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVj
eWNsZUNvbnRleHQoKQoreworICAgIHByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbDo6RXJyb3Is
ICJUaGVyZSBhcmUgdG9vIG1hbnkgYWN0aXZlIFdlYkdMIGNvbnRleHRzIG9uIHRoaXMgcGFnZSwg
dGhlIG9sZGVzdCBjb250ZXh0IHdpbGwgYmUgbG9zdC4iKTsKKyAgICAvLyBVc2luZyBTeW50aGV0
aWNMb3N0Q29udGV4dCBtZWFucyB0aGUgZGV2ZWxvcGVyIHdvbid0IGJlIGFibGUgdG8gZm9yY2Ug
dGhlIHJlc3RvcmF0aW9uCisgICAgLy8gb2YgdGhlIGNvbnRleHQgYnkgY2FsbGluZyBwcmV2ZW50
RGVmYXVsdCgpIGluIGEgIndlYmdsY29udGV4dGxvc3QiIGV2ZW50IGhhbmRsZXIuCisgICAgZm9y
Y2VMb3N0Q29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgZGVzdHJveUdyYXBoaWNz
Q29udGV4dDNEKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgaWYgKCFtX2Rpc3BhdGNoQ29u
dGV4dENoYW5nZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZEV2ZW50KCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9pc1N1c3BlbmRlZCk7CisgICAgYXV0byogY2FudmFzID0gaHRt
bENhbnZhcygpOworICAgIGlmICghY2FudmFzKQorICAgICAgICByZXR1cm47CisKKyAgICBjYW52
YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2ViZ2xjb250ZXh0Y2hhbmdlZEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6WWVzLCBlbXB0eVN0cmluZygpKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IGE2NGEwYTkyMzg4
MWRjOGExNjZlMmM0NTAzZjcyNzVmYmQ3NDIwMzguLjRmNjAzYmRmYmUzZWMwODk5NTM2MmQ4NWEw
OWJlZmRkYzA5ZjA1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L0NvcmVWaWRlb1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAKQEAgLTcyLDEwICs3Miw4IEBAIFNPRlRfTElOS19GVU5D
VElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNo
ZUNyZWF0ZVRlCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlk
ZW8sIENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVGbHVzaCwgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJl
Q2FjaGVSZWYgdGV4dHVyZUNhY2hlLCBDVk9wdGlvbkZsYWdzIG9wdGlvbnMpLCAodGV4dHVyZUNh
Y2hlLCBvcHRpb25zKSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQsIEdMZW51bSwgKENWT3BlbkdMRVNU
ZXh0dXJlUmVmIGltYWdlKSwgKGltYWdlKSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNF
KFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXROYW1lLCBHTHVpbnQsIChD
Vk9wZW5HTEVTVGV4dHVyZVJlZiBpbWFnZSksIChpbWFnZSkpCi1TT0ZUX0xJTktfRlVOQ1RJT05f
Rk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0
dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWln
aHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwg
d2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBp
eGVsQnVmZmVyT3V0KSkKLVNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9j
YXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBp
eGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVs
ZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwg
Q0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAq
cGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5
cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBw
aXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5DVElP
Tl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVh
blRleENvb3Jkcywgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJlUmVmIGltYWdlLCBHTGZsb2F0IGxv
d2VyTGVmdFsyXSwgR0xmbG9hdCBsb3dlclJpZ2h0WzJdLCBHTGZsb2F0IHVwcGVyTGVmdFsyXSwg
R0xmbG9hdCB1cHBlclJpZ2h0WzJdKSwgKGltYWdlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVw
cGVyTGVmdCwgdXBwZXJSaWdodCkpCi0jZWxzZQorI2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJl
Q2FjaGVDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rp
b25hcnlSZWYgY2FjaGVBdHRyaWJ1dGVzLCBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBp
eGVsRm9ybWF0T2JqIGNnbFBpeGVsRm9ybWF0LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJp
YnV0ZXMsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmKiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNh
Y2hlQXR0cmlidXRlcywgY2dsQ29udGV4dCwgY2dsUGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1
dGVzLCBjYWNoZU91dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBD
b3JlVmlkZW8sIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlVGV4dHVyZUZyb21JbWFnZSwgQ1ZS
ZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVm
IHRleHR1cmVDYWNoZSwgQ1ZJbWFnZUJ1ZmZlclJlZiBzb3VyY2VJbWFnZSwgQ0ZEaWN0aW9uYXJ5
UmVmIGF0dHJpYnV0ZXMsIENWT3BlbkdMVGV4dHVyZVJlZiogdGV4dHVyZU91dCksIChhbGxvY2F0
b3IsIHRleHR1cmVDYWNoZSwgc291cmNlSW1hZ2UsIGF0dHJpYnV0ZXMsIHRleHR1cmVPdXQpKQog
U09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5H
TFRleHR1cmVDYWNoZUZsdXNoLCB2b2lkLCAoQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVSZWYgdGV4dHVy
ZUNhY2hlLCBDVk9wdGlvbkZsYWdzIG9wdGlvbnMpLCAodGV4dHVyZUNhY2hlLCBvcHRpb25zKSkK
QEAgLTkxLDYgKzg5LDggQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwg
Q29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8KIFNPRlRfTElOS19DT05T
VEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xD
b21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENW
UmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBo
ZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZl
ckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRv
ciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMs
IHBpeGVsQnVmZmVyT3V0KSkKK1NPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUs
IENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBl
IHBpeGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgq
cmVsZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRl
ciwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJl
ZiAqcGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1h
dFR5cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVy
LCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5D
VElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdp
dGhJT1N1cmZhY2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1cmZh
Y2VSZWYgc3VyZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQ
aXhlbEJ1ZmZlclJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwgcGl4
ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCiAKICNlbmRpZiAvLyBIQVZFKENP
UkVfVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3Jl
VmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVv
U29mdExpbmsuaAppbmRleCA2ZDBiZjRmODViNGVhZDllNzk2NjFlNDFhOTYyMDc4YzYwMDY5NTQ1
Li5jZjVmODlhZTEzNDFlYTg4MDZkMjU2MTg4ZTY4NmQzZGUyOWVkMDZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKQEAgLTkzLDYg
KzkzLDEwIEBAIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfSEVBREVSKFdlYkNvcmUs
IENvcmVWaWRlbywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hCiAjZGVmaW5lIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhfUDNfRDY1IGdldF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJp
eF9QM19ENjUoKQogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgQ29yZVZpZGVvLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAsIENGU3Ry
aW5nUmVmKQogI2RlZmluZSBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAgZ2V0
X0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKQorU09GVF9M
SU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZl
ckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBr
Q1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRl
b19rQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXkoKQorU09GVF9M
SU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZl
ckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga0NWUGl4ZWxC
dWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVy
Q0dJbWFnZUNvbXBhdGliaWxpdHlLZXkoKQogCiAjaWYgVVNFKE9QRU5HTF9FUykKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1
cmVDYWNoZUNyZWF0ZSwgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGlj
dGlvbmFyeVJlZiBjYWNoZUF0dHJpYnV0ZXMsIENWRUFHTENvbnRleHQgZWFnbENvbnRleHQsIENG
RGljdGlvbmFyeVJlZiB0ZXh0dXJlQXR0cmlidXRlcywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJl
ZiogY2FjaGVPdXQpLCAoYWxsb2NhdG9yLCBjYWNoZUF0dHJpYnV0ZXMsIGVhZ2xDb250ZXh0LCB0
ZXh0dXJlQXR0cmlidXRlcywgY2FjaGVPdXQpKQpAQCAtMTA1LDIwICsxMDksMTIgQEAgU09GVF9M
SU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4
dHVyZUdldFRhcmdldCwgR0wKICNkZWZpbmUgQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQgc29m
dExpbmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNUZXh0dXJlR2V0VGFyZ2V0CiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlR2V0
TmFtZSwgR0x1aW50LCAoQ1ZPcGVuR0xFU1RleHR1cmVSZWYgaW1hZ2UpLCAoaW1hZ2UpKQogI2Rl
ZmluZSBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUgc29mdExpbmtfQ29yZVZpZGVvX0NWT3BlbkdM
RVNUZXh0dXJlR2V0TmFtZQotU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwg
Q29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVm
IGFsbG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3Jt
YXRUeXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVm
ZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVs
Rm9ybWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCi0jZGVm
aW5lIENWUGl4ZWxCdWZmZXJDcmVhdGUgc29mdExpbmtfQ29yZVZpZGVvX0NWUGl4ZWxCdWZmZXJD
cmVhdGUKLVNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywg
Q1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBh
bGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0
VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVsZWFzZUNhbGxi
YWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZEaWN0aW9u
YXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZm
ZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIGRhdGEs
IGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBwaXhlbEJ1ZmZl
ckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKLSNkZWZpbmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZVdpdGhCeXRlcyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRl
cwogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9w
ZW5HTEVTVGV4dHVyZUdldENsZWFuVGV4Q29vcmRzLCB2b2lkLCAoQ1ZPcGVuR0xFU1RleHR1cmVS
ZWYgaW1hZ2UsIEdMZmxvYXQgbG93ZXJMZWZ0WzJdLCBHTGZsb2F0IGxvd2VyUmlnaHRbMl0sIEdM
ZmxvYXQgdXBwZXJMZWZ0WzJdLCBHTGZsb2F0IHVwcGVyUmlnaHRbMl0pLCAoaW1hZ2UsIGxvd2Vy
TGVmdCwgbG93ZXJSaWdodCwgdXBwZXJMZWZ0LCB1cHBlclJpZ2h0KSkKICNkZWZpbmUgQ1ZPcGVu
R0xFU1RleHR1cmVHZXRDbGVhblRleENvb3JkcyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZPcGVuR0xF
U1RleHR1cmVHZXRDbGVhblRleENvb3JkcwogCi1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURF
UihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyQ0dCaXRtYXBDb250ZXh0Q29tcGF0
aWJpbGl0eUtleSwgQ0ZTdHJpbmdSZWYpCi0jZGVmaW5lIGtDVlBpeGVsQnVmZmVyQ0dCaXRtYXBD
b250ZXh0Q29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyQ0dCaXRt
YXBDb250ZXh0Q29tcGF0aWJpbGl0eUtleSgpCi1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURF
UihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlL
ZXksIENGU3RyaW5nUmVmKQotI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmls
aXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtl
eSgpCiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtD
VlBpeGVsQnVmZmVySU9TdXJmYWNlT3BlbkdMRVNGQk9Db21wYXRpYmlsaXR5S2V5LCBDRlN0cmlu
Z1JlZikKICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xFU0ZCT0NvbXBhdGli
aWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEVTRkJP
Q29tcGF0aWJpbGl0eUtleSgpCi0jZWxzZQorI2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElOS19G
VU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2Fj
aGVDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25h
cnlSZWYgY2FjaGVBdHRyaWJ1dGVzLCBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBpeGVs
Rm9ybWF0T2JqIGNnbFBpeGVsRm9ybWF0LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJpYnV0
ZXMsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmKiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNhY2hl
QXR0cmlidXRlcywgY2dsQ29udGV4dCwgY2dsUGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1dGVz
LCBjYWNoZU91dCkpCiAjZGVmaW5lIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlIHNvZnRMaW5r
X0NvcmVWaWRlb19DVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0
ZVRleHR1cmVGcm9tSW1hZ2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBD
Vk9wZW5HTFRleHR1cmVDYWNoZVJlZiB0ZXh0dXJlQ2FjaGUsIENWSW1hZ2VCdWZmZXJSZWYgc291
cmNlSW1hZ2UsIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBDVk9wZW5HTFRleHR1cmVSZWYq
IHRleHR1cmVPdXQpLCAoYWxsb2NhdG9yLCB0ZXh0dXJlQ2FjaGUsIHNvdXJjZUltYWdlLCBhdHRy
aWJ1dGVzLCB0ZXh0dXJlT3V0KSkKQEAgLTE0NSw2ICsxNDEsMTAgQEAgU09GVF9MSU5LX0NPTlNU
QU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENv
bXBhdGliaWwKICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdl
dF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRp
ZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENW
UGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBz
aXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGlj
dGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVs
QnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBw
aXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKKyNkZWZpbmUgQ1ZQaXhlbEJ1
ZmZlckNyZWF0ZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZQorU09GVF9M
SU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVy
Q3JlYXRlV2l0aEJ5dGVzLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgc2l6
ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlLCB2b2lkKiBk
YXRhLCBzaXplX3QgYnl0ZXNQZXJSb3csIHZvaWQgKCpyZWxlYXNlQ2FsbGJhY2spKHZvaWQqLCBj
b25zdCB2b2lkKiksIHZvaWQqIHJlbGVhc2VQb2ludGVyLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxv
Y2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0VHlwZSwgZGF0YSwgYnl0ZXNQZXJSb3cs
IHJlbGVhc2VDYWxsYmFjaywgcmVsZWFzZVBvaW50ZXIsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywg
cGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzIHNv
ZnRMaW5rX0NvcmVWaWRlb19DVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVh
dGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9T
dXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMs
IENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2Us
IHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQogI2RlZmluZSBDVlBpeGVs
QnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZl
ckNyZWF0ZVdpdGhJT1N1cmZhY2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNjM3YmM3NGM3YmEzYjk2Yjk2MmMw
OTNhY2RmMjIwM2FhYjk1NGI1Yy4uZDQzODg4OTdhN2JmMjdiYzVlYTkyZDg3OTc4N2YwZjczMDVj
OTQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCkBAIC0xMTk4LDcgKzExOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0o
TUFDKQorI2lmIFVTRShBTkdMRSkKICAgICB2b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0
b3JlKEludFNpemUpOwogICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0
b3JlRnJvbUxheWVyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCmlu
ZGV4IGEyZWVhYjQyODU3NTc5Mjc0NjNlMzdiNTk5OWZkYTA5Mzk4ZDFmMjEuLmNiNzFkMWIzNjI4
OTk1Y2Q3M2M5OWVlMjc4ZTBkZmVmNWVhZGE2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RD
b2NvYS5tbQpAQCAtMzkwLDcgKzM5MCw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAgICAg
ICAgIFttX3dlYkdMTGF5ZXIgc2V0TmFtZTpAIldlYkdMIExheWVyIl07CiAjZW5kaWYKICNpZiBV
U0UoQU5HTEUpCi0gICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxheTptX2Rpc3BsYXlP
YmogYW5kQ29uZmlnOmNvbmZpZ107CisgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxh
eTptX2Rpc3BsYXlPYmogY29uZmlnOmNvbmZpZ107CiAjZW5kaWYKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiAKQEAgLTcxMywxNCArNzEzLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQogI2lmIFVTRShBTkdMRSkK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKElu
dFNpemUgc2l6ZSkKIHsKKyNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBMT0coV2ViR0wsICJHcmFw
aGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQgeCAlZC4g
KCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7CiAgICAgW21fd2ViR0xM
YXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUgdXNpbmdBbHBo
YTptX2F0dHJzLmFscGhhXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworI2VuZGlm
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJh
Y2tpbmdTdG9yZUZyb21MYXllcigpCiB7CisjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgTE9HKFdl
YkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdT
dG9yZUZyb21MYXllcigpLiAoJXApIiwgdGhpcyk7CiAgICAgW21fd2ViR0xMYXllciBiaW5kRnJh
bWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXTsKKyNlbmRpZgogfQogI2VuZGlmIC8vIFVT
RShBTkdMRSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbS5vcmlnIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbS5vcmlnCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmEyZWVhYjQyODU3NTc5Mjc0NjNlMzdiNTk5OWZkYTA5Mzk4ZDFmMjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGlj
c0NvbnRleHQzRENvY29hLm1tLm9yaWcKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhVVNFKEFOR0xFKQorI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgorCisjaW1wb3J0ICJDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIgorI2ltcG9ydCAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKKyNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJXZWJHTExheWVyLmgiCisjaW1wb3J0ICJXZWJHTE9i
amVjdC5oIgorI2ltcG9ydCAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2ltcG9ydCA8
Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgor
I2ltcG9ydCA8c3lzZXhpdHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+
CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2lt
cG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+
CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9F
UzIvZ2xleHQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8
cGFsL3NwaS9pb3MvT3BlbkdMRVNTUEkuaD4KKyNlbGlmIFVTRShPUEVOR0wpCisjaW1wb3J0IDxJ
T0tpdC9JT0tpdExpYi5oPgorI2ltcG9ydCA8T3BlbkdML0NHTFJlbmRlcmVycy5oPgorI2ltcG9y
dCA8T3BlbkdML2dsLmg+CisjZWxpZiBVU0UoQU5HTEUpCisjZGVmaW5lIEVHTF9FR0xfUFJPVE9U
WVBFUyAwCisvLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0
IGVudHJ5IHBvaW50cyBmb3Igbm93LgorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0
CisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKK3R5cGVkZWYgdm9pZCog
R0xlZ2xDb250ZXh0OworI2luY2x1ZGUgPEFOR0xFL2VnbC5oPgorI2luY2x1ZGUgPEFOR0xFL2Vn
bGV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgorI2luY2x1ZGUgPEFOR0xF
L2VudHJ5X3BvaW50c19lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18y
XzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRv
Z2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0
X2FuZ2xlLmg+CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVMpIHx8IFVTRShPUEVOR0wpCisj
aW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZWxpZiBVU0UoQU5HTEUpCisjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNEQU5HTEUuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorI2lt
cG9ydCAiU2NyZWVuUHJvcGVydGllcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0YXR1c0NoZWNrVGhyZXNob2xkID0gNTsKKworLy8g
RklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IGVtcHR5IG9uIE1hYywgYnV0IHdpbGwgZ2V0
IHBvcHVsYXRlZCBhcworLy8gdGhlIHJlc3RydWN0dXJpbmcgaW4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTAzIGlzIGRvbmUKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKikgeyB9CisgICAgCisg
ICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpIHsgfQorfTsKKworUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0
cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24g
ZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RX
aW5kb3cuCisgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBp
bmNvbWluZyBjb250ZXh0IGlmIHdlJ3JlIGZ1bGwuCisgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVjeWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpOworICAgIGlm
IChHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5oYXNUb29NYW55Q29u
dGV4dHMoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMs
IGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CisKKyAgICBpZiAoIWNvbnRleHQtPm1fY29udGV4
dE9iaikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0KGNvbnRleHQuZ2V0KCksIGhvc3RXaW5k
b3cpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK1JlZjxHcmFwaGljc0NvbnRleHQzRD4g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHQzRCYgc2hhcmVk
Q29udGV4dCkKK3sKKyAgICBhdXRvIGhvc3RXaW5kb3cgPSBHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKS5ob3N0V2luZG93Rm9yQ29udGV4dCgmc2hhcmVkQ29udGV4dCk7
CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHQzRChzaGFy
ZWRDb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCksIGhvc3RXaW5kb3csIHNoYXJlZENvbnRl
eHQubV9yZW5kZXJTdHlsZSwgJnNoYXJlZENvbnRleHQpKTsKKworICAgIEdyYXBoaWNzQ29udGV4
dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5wdHIoKSwgaG9z
dFdpbmRvdyk7CisKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykg
JiYgVVNFKE9QRU5HTCkgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIGp1c3QgVVNF
KE9QRU5HTCkgLSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCisKK3N0YXRpYyB2b2lkIHNldEdQVUJ5
UmVnaXN0cnlJRChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRPYmosIENHTFBpeGVs
Rm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqLCBJT1JlZ2lzdHJ5R1BVSUQgcHJlZmVycmVkR1BVSUQp
Cit7CisgICAgLy8gV2hlbiB0aGUgV2ViUHJvY2VzcyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0
aGUgV2luZG93U2VydmVyLCB0aGVyZSBpcyBubyB3YXkgZm9yIE9wZW5HTCB0byB0ZWxsIHdoaWNo
IEdQVSBpcyBjb25uZWN0ZWQgdG8gYSBkaXNwbGF5LgorICAgIC8vIE9uIDEwLjEzKywgZmluZCB0
aGUgdmlydHVhbCBzY3JlZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJlZmVycmVkIEdQVSBi
eSBpdHMgcmVnaXN0cnlJRC4KKyAgICAvLyBDR0xTZXRWaXJ0dWFsU2NyZWVuIGNhbiB0aGVuIGJl
IHVzZWQgdG8gdGVsbCBPcGVuR0wgd2hpY2ggR1BVIGl0IHNob3VsZCBiZSB1c2luZy4KKworICAg
IGlmICghY29udGV4dE9iaiB8fCAhcHJlZmVycmVkR1BVSUQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdMaW50IHZpcnR1YWxTY3JlZW5Db3VudCA9IDA7CisgICAgQ0dMRXJyb3IgZXJyb3IgPSBD
R0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCAwLCBrQ0dMUEZBVmlydHVhbFNj
cmVlbkNvdW50LCAmdmlydHVhbFNjcmVlbkNvdW50KTsKKyAgICBBU1NFUlQoZXJyb3IgPT0ga0NH
TE5vRXJyb3IpOworCisgICAgR0xpbnQgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA9IC0xOworCisg
ICAgZm9yIChHTGludCB2aXJ0dWFsU2NyZWVuID0gMDsgdmlydHVhbFNjcmVlbiA8IHZpcnR1YWxT
Y3JlZW5Db3VudDsgKyt2aXJ0dWFsU2NyZWVuKSB7CisgICAgICAgIEdMaW50IGRpc3BsYXlNYXNr
ID0gMDsKKyAgICAgICAgZXJyb3IgPSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0
T2JqLCB2aXJ0dWFsU2NyZWVuLCBrQ0dMUEZBRGlzcGxheU1hc2ssICZkaXNwbGF5TWFzayk7Cisg
ICAgICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7CisKKyAgICAgICAgYXV0byBncHVJ
RCA9IGdwdUlERm9yRGlzcGxheU1hc2soZGlzcGxheU1hc2spOworCisgICAgICAgIGlmIChncHVJ
RCA9PSBwcmVmZXJyZWRHUFVJRCkgeworICAgICAgICAgICAgZXJyb3IgPSBDR0xTZXRWaXJ0dWFs
U2NyZWVuKGNvbnRleHRPYmosIHZpcnR1YWxTY3JlZW4pOworICAgICAgICAgICAgQVNTRVJUKGVy
cm9yID09IGtDR0xOb0Vycm9yKTsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgKCVw
KSBzZXQgdG8gR1BVIHdpdGggSUQ6ICglbGxkKS4iLCBjb250ZXh0T2JqLCBncHVJRCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlyc3RBY2NlbGVyYXRl
ZFNjcmVlbiA8IDApIHsKKyAgICAgICAgICAgIEdMaW50IGlzQWNjZWxlcmF0ZWQgPSAwOworICAg
ICAgICAgICAgZXJyb3IgPSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCB2
aXJ0dWFsU2NyZWVuLCBrQ0dMUEZBQWNjZWxlcmF0ZWQsICZpc0FjY2VsZXJhdGVkKTsKKyAgICAg
ICAgICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7CisgICAgICAgICAgICBpZiAoaXNB
Y2NlbGVyYXRlZCkKKyAgICAgICAgICAgICAgICBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID0gdmly
dHVhbFNjcmVlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vIHJlZ2lzdHJ5SUQgbWF0
Y2ggZm91bmQ7IHNldCB0byBmaXJzdCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB2aXJ0dWFsIHNjcmVl
bi4KKyAgICBpZiAoZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA+PSAwKSB7CisgICAgICAgIGVycm9y
ID0gQ0dMU2V0VmlydHVhbFNjcmVlbihjb250ZXh0T2JqLCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVu
KTsKKyAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsKKyAgICAgICAgTE9HKFdl
YkdMLCAiUmVnaXN0cnlJRCAoJWxsZCkgbm90IG1hdGNoZWQ7IENvbnRleHQgKCVwKSBzZXQgdG8g
dmlydHVhbCBzY3JlZW4gKCVkKS4iLCBwcmVmZXJyZWRHUFVJRCwgY29udGV4dE9iaiwgZmlyc3RB
Y2NlbGVyYXRlZFNjcmVlbik7CisgICAgfQorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAm
JiBVU0UoT1BFTkdMKQorCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUsIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRD
b250ZXh0KQorICAgIDogbV9hdHRycyhhdHRycykKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykpCit7CisjaWYgIVVTRShBTkdMRSkKKyNp
ZiBVU0UoT1BFTkdMX0VTKQorICAgIGlmIChtX2F0dHJzLmlzV2ViR0wyKQorICAgICAgICBtX2Nv
bXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMMl9TUEVD
KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9F
U1NMX09VVFBVVCk7CisjZWxzZQorICAgIGlmIChtX2F0dHJzLmlzV2ViR0wyKQorICAgICAgICBt
X2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF80MTBfQ09SRV9PVVRQVVQsIFNI
X1dFQkdMMl9TUEVDKTsKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQorI2VuZGlmIC8vICFVU0Uo
QU5HTEUpCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93
KTsKKyAgICBFQUdMUmVuZGVyaW5nQVBJIGFwaSA9IG1fYXR0cnMuaXNXZWJHTDIgPyBrRUFHTFJl
bmRlcmluZ0FQSU9wZW5HTEVTMyA6IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMyOworICAgIGlm
ICghc2hhcmVkQ29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBh
bGxvY10gaW5pdFdpdGhBUEk6YXBpXTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dE9iaiA9
IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJOmFwaSBzaGFyZWdyb3VwOnNoYXJlZENv
bnRleHQtPm1fY29udGV4dE9iai5zaGFyZWdyb3VwXTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIGlmIChtX2F0dHJzLmlzV2ViR0wyKQorICAgICAgICA6OmdsRW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CisjZWxpZiBVU0Uo
T1BFTkdMKQorCisjaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQorICAgIG1fcG93ZXJQ
cmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gKGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKSAmJiBh
dHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6
OkhpZ2hQZXJmb3JtYW5jZSkgPyBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGln
aFBlcmZvcm1hbmNlIDogR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7
CisjZWxzZQorICAgIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gR3JhcGhpY3ND
b250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7CisjZW5kaWYKKworICAgIGJvb2wgdXNl
TXVsdGlzYW1wbGluZyA9IG1fYXR0cnMuYW50aWFsaWFzOworCisgICAgVmVjdG9yPENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOworICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9y
bWF0T2JqID0gMDsKKyAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOworCisgICAgYXR0cmli
cy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZB
Q29sb3JTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZT4oMzIpKTsKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsK
KyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4o
MzIpKTsKKworICAgIC8vIFRoaXMgYXR0cmlidXRlLCB3aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUg
cmVuZGVyZXJzLCBpcyBhY3R1YWxseQorICAgIC8vIGFsbG93aW5nIHVzIHRvIHJlcXVlc3QgdGhl
IGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQVQorICAgIC8vIHN5c3RlbSwgYW5kIG5v
dCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgorICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5h
cHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3RuMjIyOS9faW5kZXguaHRtbAorICAgIGlm
IChhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBG
QUFsbG93T2ZmbGluZVJlbmRlcmVycyk7CisKKyAgICBpZiAodXNlTXVsdGlzYW1wbGluZykgewor
ICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBTXVsdGlzYW1wbGUpOworICAgICAgICBhdHRy
aWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxlQnVmZmVycyk7CisgICAgICAgIGF0dHJpYnMuYXBwZW5k
KHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigxKSk7CisgICAgICAgIGF0dHJp
YnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVzKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDQpKTsKKyAgICB9CisKKyAgICBpZiAoYXR0
cnMuaXNXZWJHTDIpIHsKKyAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgYmFja2luZyBhIFdl
YkdMMiBHcmFwaGljc0NvbnRleHQzRCB3aXRoIGEgT3BlbkdMIDQgY29udGV4dCwgd2Ugc2hvdWxk
IGluc3RlYWQgYmFjayBpdCB3aXRoIEFOR0xFLgorICAgICAgICAvLyBVc2UgYW4gT3BlbkdMIDQg
Y29udGV4dCBmb3Igbm93IHVudGlsIHRoZSBBTkdMRSBiYWNrZW5kIGlzIHJlYWR5LgorICAgICAg
ICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBT3BlbkdMUHJvZmlsZSk7CisgICAgICAgIGF0dHJpYnMu
YXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihrQ0dMT0dMUFZlcnNp
b25fR0w0X0NvcmUpKTsKKyAgICB9CisKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCkpOworCisgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQo
YXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisKKyAg
ICBpZiAoIW51bVBpeGVsRm9ybWF0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dMRXJyb3Ig
ZXJyID0gQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdE9iaiwgc2hhcmVkQ29udGV4dCA/IHNo
YXJlZENvbnRleHQtPm1fY29udGV4dE9iaiA6IG51bGxwdHIsICZtX2NvbnRleHRPYmopOworICAg
IEdMaW50IGFib3J0T25CbGFja2xpc3QgPSAwOworICAgIENHTFNldFBhcmFtZXRlcihtX2NvbnRl
eHRPYmosIGtDR0xDUEFib3J0T25HUFVSZXN0YXJ0U3RhdHVzQmxhY2tsaXN0ZWQsICZhYm9ydE9u
QmxhY2tsaXN0KTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpIC8vIEZJWE1FOiBUaGlzIHByb2Jh
Ymx5IHNob3VsZCBiZSBVU0UoT1BFTkdMKSAtIHNlZSA8cmRhcjovLzUzMDYyNzk0Pi4KKworICAg
IGF1dG8gZ3B1SUQgPSAoaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBn
cHVJREZvckRpc3BsYXkoaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7
CisgICAgc2V0R1BVQnlSZWdpc3RyeUlEKG1fY29udGV4dE9iaiwgcGl4ZWxGb3JtYXRPYmosIGdw
dUlEKTsKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CisjZW5kaWYKKwor
ICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaik7CisgICAgCisgICAgaWYg
KGVyciAhPSBrQ0dMTm9FcnJvciB8fCAhbV9jb250ZXh0T2JqKSB7CisgICAgICAgIC8vIFdlIHdl
cmUgdW5hYmxlIHRvIGNyZWF0ZSB0aGUgY29udGV4dC4KKyAgICAgICAgbV9jb250ZXh0T2JqID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faXNGb3JXZWJHTDIgPSBhdHRycy5p
c1dlYkdMMjsKKworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisKKyAg
ICAvLyBXZWJHTCAyIGV4cGVjdHMgRVMgMy1vbmx5IFBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lO
REVYIHRvIGJlIGVuYWJsZWQ7IHdlIG11c3QgZW11bGF0ZSB0aGlzIG9uIG5vbi1FUyAzIHN5c3Rl
bXMuCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAgICAgIDo6Z2xFbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUKTsKKworI2VsaWYgVVNFKEFOR0xFKQorICAgIFVO
VVNFRF9QQVJBTShob3N0V2luZG93KTsKKyAgICBVTlVTRURfUEFSQU0oc2hhcmVkQ29udGV4dCk7
CisKKyAgICBtX2Rpc3BsYXlPYmogPSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZ
KTsKKyAgICBpZiAobV9kaXNwbGF5T2JqID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1
cm47CisgICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOworICAgIGlmIChFR0xf
SW5pdGlhbGl6ZShtX2Rpc3BsYXlPYmosICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09
IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0
aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBMT0coV2ViR0wsICJB
TkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5v
clZlcnNpb24pOworICAgIGNvbnN0IGNoYXIgKmRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1ZXJ5
U3RyaW5nKG1fZGlzcGxheU9iaiwgRUdMX0VYVEVOU0lPTlMpOworICAgIExPRyhXZWJHTCwgIkV4
dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOworCisgICAgRUdMQ29uZmlnIGNvbmZp
ZzsKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfUkVOREVS
QUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisgICAgICAgIEVHTF9SRURfU0laRSwgOCwK
KyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisg
ICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAg
RUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7CisgICAgRUdMX0Nob29zZUNvbmZpZyht
X2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25maWcsIDEsICZudW1iZXJDb25maWdz
UmV0dXJuZWQpOworICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJuZWQgIT0gMSkgeworICAgICAg
ICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb25maWciKTsKKworICAg
IEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKTsKKyAgICBpZiAoRUdMX0dldEVycm9yKCkg
IT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGJpbmQgdG8g
T1BFTkdMX0VTX0FQSSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjp2ZWN0
b3I8RUdMaW50PiBjb250ZXh0QXR0cmlidXRlczsKKyAgICBpZiAoYXR0cnMuaXNXZWJHTDIpIHsK
KyAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVOVF9W
RVJTSU9OKTsKKyAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDMpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9D
TElFTlRfVkVSU0lPTik7CisgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjaygyKTsK
KyAgICAgICAgLy8gQU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0IHRvIEVTMyBhdXRvbWF0
aWNhbGx5IHVubGVzcyB0aGlzIGlzIHNwZWNpZmllZC4KKyAgICAgICAgY29udGV4dEF0dHJpYnV0
ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdM
RSk7CisgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfRkFMU0UpOworICAg
IH0KKyAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfV0VCR0xfQ09N
UEFUSUJJTElUWV9BTkdMRSk7CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9U
UlVFKTsKKyAgICBpZiAoc3Ryc3RyKGRpc3BsYXlFeHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2Vy
X3ByZWZlcmVuY2UiKSkgeworICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdM
X1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOworICAgICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xF
IGlzIHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8KKyAgICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5H
TEUgaWYgZGVzaXJlZC4KKyAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9M
T1dfUE9XRVJfQU5HTEUpOworICAgIH0KKyAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2so
RUdMX05PTkUpOworCisgICAgbV9jb250ZXh0T2JqID0gRUdMX0NyZWF0ZUNvbnRleHQobV9kaXNw
bGF5T2JqLCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkp
OworICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9H
KFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKworICAgIEVH
TF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFD
RSwgbV9jb250ZXh0T2JqKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogcmVx
dWlyZWRFeHRlbnNpb25zW10gPSB7CisgICAgICAgICJHTF9BTkdMRV90ZXh0dXJlX3JlY3Rhbmds
ZSIsIC8vIEZvciBJT1N1cmZhY2UtYmFja2VkIHRleHR1cmVzCisgICAgICAgICJHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODgiLCAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZy
b20gYW4gSU9TdXJmYWNlCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hh
ciogb3B0aW9uYWxFeHRlbnNpb25zW10gPSB7CisgICAgICAgICJHTF9FWFRfZGVidWdfbWFya2Vy
IiwKKyAgICB9OworCisgICAgRXh0ZW5zaW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9u
cygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHJlcXVp
cmVkRXh0ZW5zaW9ucyk7ICsraSkgeworICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMo
cmVxdWlyZWRFeHRlbnNpb25zW2ldKSkgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAiTWlzc2lu
ZyByZXF1aXJlZCBleHRlbnNpb24uIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ld
KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgo
b3B0aW9uYWxFeHRlbnNpb25zKTsgKytpKSB7CisgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBv
cnRzKG9wdGlvbmFsRXh0ZW5zaW9uc1tpXSkpCisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3Vy
ZUVuYWJsZWQob3B0aW9uYWxFeHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyNlbmRpZiAvLyAjZWxp
ZiBVU0UoQU5HTEUpCisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgV2ViR0xMYXllcgorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAg
ICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFw
aGljc0NvbnRleHQzRDp0aGlzXSk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBbbV93ZWJHTExh
eWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2VuZGlmCisjaWYgVVNFKEFOR0xFKQorICAg
ICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGFuZENvbmZpZzpj
b25maWddOworI2VuZGlmCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworCisjaWYgVVNF
KE9QRU5HTCkKKyAgICBpZiAodXNlTXVsdGlzYW1wbGluZykKKyAgICAgICAgOjpnbEVuYWJsZShH
TF9NVUxUSVNBTVBMRSk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSB0aGUgdGV4dHVyZSB0aGF0
IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZyYW1lYnVmZmVyLgorI2lmIFVTRShPUEVOR0xfRVMpCisg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7CisjZWxpZiBVU0UoT1BFTkdM
KQorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAvLyBXZSBiaW5kIHRv
IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCByYXRoZXIgdGhhbiBURVhUVVJFXzJEIGJlY2F1c2UK
KyAgICAvLyB0aGF0J3Mgd2hhdCBpcyByZXF1aXJlZCBmb3IgYSB0ZXh0dXJlIGJhY2tlZCBieSBJ
T1N1cmZhY2UuCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwg
bV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9F
WFQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhU
LCAwKTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3Rl
eHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xF
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdM
RSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCAwKTsKKyNlbHNlCisjZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgorI2Vu
ZGlmCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQorICAgIC8vIENyZWF0ZSB0
aGUgZnJhbWVidWZmZXIgb2JqZWN0LgorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
ZmJvKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworCisgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9hdHRycy5h
bnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAgICAgICAg
OjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAg
IC8vIElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0
aXNhbXBsZSByZXN1bHRzLgorICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6
OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
OjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Cisg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAg
IDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9CisjZWxpZiBVU0UoQU5HTEUpCisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygx
LCAmbV9mYm8pOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87CisKKyAgICBpZiAoIW1fYXR0cnMuYW50
aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCisgICAgICAgIGds
OjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKKyAgICAvLyBJ
ZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1lYnVmZmVyIGZvciB0aGUgbXVsdGlzYW1w
bGUgcmVzdWx0cy4KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6Okdl
bkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0
YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyNlbmRp
ZiAvLyBVU0UoQU5HTEUpCisKKyNpZiAhVVNFKEFOR0xFKQorICAgIC8vIEFOR0xFIHNoYWRlciBj
b21waWxlciBpbml0aWFsaXphdGlvbi4KKworICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJl
c291cmNlczsKKyAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsK
KworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMs
ICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVj
dG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8v
IEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzID0gMTsKKyAgICAKKyAgICBHQzNEaW50IHJhbmdlWzJdLCBwcmVjaXNpb247Cisg
ICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIsIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7
CisgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8
IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7CisKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CisjZW5kaWYgLy8gIVVTRShBTkdMRSkKKyAgICAKKyNpZiBVU0UoT1BF
TkdMKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisgICAg
aWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BS
SVRFKTsKKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKKyAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICBnbDo6Q2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKKyNlbmRpZgorCisgICAgTE9HKFdlYkdMLCAiQ3JlYXRlZCBh
IEdyYXBoaWNzQ29udGV4dDNEICglcCkuIiwgdGhpcyk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNE
Ojp+R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7CisKKyAgICBpZiAobV9jb250ZXh0
T2JqKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgICAgIFttX2NvbnRleHRPYmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZG
RVIgZnJvbURyYXdhYmxlOm5pbF07CisgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX3RleHR1cmUpOworI2VsaWYgVVNFKE9QRU5HTCkKKyAgICAgICAgQ0dMU2V0Q3VycmVudENv
bnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOworI2VsaWYgVVNFKEFOR0xFKQorICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNw
bGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7Cisg
ICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNlbmRpZgorCisjaWYg
VVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkK
KyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNF
WFQoMSwgJm1fZmJvKTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICAgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBnbDo6RGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAg
ICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICB9CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgW0VBR0xDb250ZXh0IHNl
dEN1cnJlbnRDb250ZXh0OjBdOworICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPiht
X2NvbnRleHRPYmopIHJlbGVhc2VdOworI2VsaWYgVVNFKE9QRU5HTCkKKyAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7CisgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9i
aik7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlP
YmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAg
ICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOworI2Vu
ZGlmCisgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0Q29udGV4dDpudWxscHRyXTsKKyAgICB9CisK
KyAgICBMT0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHQzRCAoJXApLiIsIHRo
aXMpOworfQorCisjaWYgVVNFKE9QRU5HTF9FUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNhbGwgdG8gc2V0Qm91bmRz
IGJlbG93IHRvIHVwZGF0ZSB0aGUgYmFja2luZyBzdG9yZSBzaXplIGJ1dCB3ZSBhbHNvCisgICAg
Ly8gZG8gbm90IHdhbnQgdG8gY2xvYmJlciB0aGUgYm91bmRzIHNldCBkdXJpbmcgbGF5b3V0Lgor
ICAgIENHUmVjdCBwcmV2aW91c0JvdW5kcyA9IFttX3dlYkdMTGF5ZXIuZ2V0KCkgYm91bmRzXTsK
KworICAgIFttX3dlYkdMTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhl
aWdodCldOworICAgIFttX3dlYkdMTGF5ZXIgc2V0T3BhcXVlOiFtX2F0dHJzLmFscGhhXTsKKwor
ICAgIFttX2NvbnRleHRPYmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZGRVIgZnJv
bURyYXdhYmxlOnN0YXRpY19jYXN0PGlkPEVBR0xEcmF3YWJsZT4+KG1fd2ViR0xMYXllci5nZXQo
KSldOworCisgICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6cHJldmlvdXNCb3VuZHNdOworfQor
I2VuZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7
CisgICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFVT
RShPUEVOR0xfRVMpCisgICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50Q29udGV4dF0gIT0gbV9j
b250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0
OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07CisjZWxpZiBVU0UoT1BF
TkdMKQorICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29u
dGV4dCgpOworICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCisgICAgICAg
IHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vycm9y
OworI2VsaWYgVVNFKEFOR0xFKQorICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBt
X2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2Jq
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7CisjZW5kaWYK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVT
dGF0dXMoKQoreworICAgIGlmIChtX2ZhaWxOZXh0U3RhdHVzQ2hlY2spIHsKKyAgICAgICAgTE9H
KFdlYkdMLCAiUHJldGVuZGluZyB0aGUgR1BVIGhhcyByZXNldCAoJXApLiBMb3NlIHRoZSBjb250
ZXh0LiIsIHRoaXMpOworICAgICAgICBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSBmYWxzZTsKKyAg
ICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworI2lmIFVTRShPUEVOR0wpCisgICAgICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KDApOworI2VsaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgW0VBR0xD
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOworI2VsaWYgVVNFKEFOR0xFKQorICAgICAgICBF
R0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19DT05URVhUKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gT25seSBkbyB0aGUgY2hlY2sgZXZlcnkgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgY2FsbHMu
CisgICAgaWYgKG1fc3RhdHVzQ2hlY2tDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0dXNDaGVja0NvdW50ID0gKG1fc3RhdHVzQ2hlY2tDb3VudCArIDEpICUgc3RhdHVzQ2hlY2tU
aHJlc2hvbGQ7CisKKyAgICBHTGludCByZXN0YXJ0U3RhdHVzID0gMDsKKyNpZiBVU0UoT1BFTkdM
KQorICAgIENHTEdldFBhcmFtZXRlcihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIGtDR0xD
UEdQVVJlc3RhcnRTdGF0dXMsICZyZXN0YXJ0U3RhdHVzKTsKKyAgICBpZiAocmVzdGFydFN0YXR1
cyA9PSBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzQmxhY2tsaXN0ZWQpIHsKKyAgICAgICAgTE9HKFdl
YkdMLCAiVGhlIEdQVSBoYXMgYmxhY2tsaXN0ZWQgdXMgKCVwKS4gVGVybWluYXRpbmcuIiwgdGhp
cyk7CisgICAgICAgIGV4aXQoRVhfT1NFUlIpOworICAgIH0KKyAgICBpZiAocmVzdGFydFN0YXR1
cyA9PSBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkKSB7CisgICAgICAgIExPRyhXZWJHTCwg
IlRoZSBHUFUgaGFzIHJlc2V0IHVzICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7Cisg
ICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQo
MCk7CisgICAgfQorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyAgICBFQUdMQ29udGV4dCogY3VycmVu
dENvbnRleHQgPSBzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSk7CisgICAgW2N1cnJlbnRDb250ZXh0IGdldFBhcmFtZXRlcjprRUFHTENQR1BVUmVz
dGFydFN0YXR1cyB0bzomcmVzdGFydFN0YXR1c107CisgICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0g
a0VBR0xDUEdQVVJlc3RhcnRTdGF0dXNDYXVzZWQgfHwgcmVzdGFydFN0YXR1cyA9PSBrRUFHTENQ
R1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlRoZSBH
UFUgaGFzIGVpdGhlciByZXNldCBvciBibGFja2xpc3RlZCB1cyAoJXApLiBMb3NlIHRoZSBjb250
ZXh0LiIsIHRoaXMpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAgIFtFQUdM
Q29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyAgICB9CisjZWxpZiBVU0UoQU5HTEUpCisg
ICAgLy8gRklYTUU6IGNoZWNrIHZpYSBLSFJfcm9idXN0bmVzcy4KKyAgICByZXN0YXJ0U3RhdHVz
ID0gMDsKKyNlbmRpZgorfQorCisjaWYgVVNFKE9QRU5HTF9FUykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnByZXNlbnRSZW5kZXJidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworCisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIFtzdGF0aWNfY2FzdDxFQUdM
Q29udGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZG
RVJdOworICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuaWxdOworfQorI2VuZGlm
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlSU9TdXJmYWNlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBz
dXJmYWNlLCBHQzNEdWludCBwbGFuZSkKK3sKKyNpZiBVU0UoT1BFTkdMKQorICAgIHJldHVybiBr
Q0dMTm9FcnJvciA9PSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSwgdGFyZ2V0LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBzdXJmYWNlLCBwbGFuZSk7CisjZWxpZiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0o
SU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisgICAgcmV0dXJuIFtwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCkgdGV4SW1hZ2VJT1N1cmZhY2U6c3VyZmFjZSB0YXJnZXQ6dGFyZ2V0IGludGVybmFsRm9y
bWF0OmludGVybmFsRm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgZm9ybWF0OmZvcm1h
dCB0eXBlOnR5cGUgcGxhbmU6cGxhbmVdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0
KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxGb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh3
aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1h
dCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsK
KyAgICBVTlVTRURfUEFSQU0ocGxhbmUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
CisjaWYgVVNFKE9QRU5HTCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJm
YWNlQmFja2luZ1N0b3JlKEludFNpemUgc2l6ZSkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFwaGlj
c0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQgeCAlZC4gKCVw
KSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7CisgICAgW21fd2ViR0xMYXll
ciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUgdXNpbmdBbHBoYTpt
X2F0dHJzLmFscGhhXTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVi
dWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkKK3sKKyAgICBMT0coV2ViR0wsICJH
cmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJv
bUxheWVyKCkuICglcCkiLCB0aGlzKTsKKyAgICBbbV93ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZl
clRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
cGRhdGVDR0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAgICAgcmV0
dXJuOworCisgICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkg
cmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIENHTFVwZGF0ZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKKyAgICBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlz
aWJsZSkKK3sKKyAgICBpZiAobV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPT0gR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgeworICAgICAg
ICBpZiAoaXNWaXNpYmxlKQorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsK
KyAgICB9Cit9CisjZW5kaWYgLy8gVVNFKE9QRU5HTCkKKworI2lmIFVTRShBTkdMRSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUg
c2l6ZSkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1
cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQgeCAlZC4gKCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgdGhpcyk7CisgICAgW21fd2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZVdpdGhTaXplOnNpemUgdXNpbmdBbHBoYTptX2F0dHJzLmFscGhhXTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3Jl
RnJvbUxheWVyKCkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRl
RnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCkiLCB0aGlzKTsK
KyAgICBbbV93ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2Vd
OworfQorI2VuZGlmIC8vIFVTRShBTkdMRSkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjp1bmlx
dWVfcHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaW11bGF0ZUNvbnRl
eHRDaGFuZ2VkKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS51cGRhdGVBbGxDb250ZXh0cygpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjph
bGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAgIC8vIFdoZW4gV2luZG93
U2VydmVyIGFjY2VzcyBpcyBibG9ja2VkIGluIHRoZSBXZWJQcm9jZXNzLCB0aGVyZSBpcyBubyB3
YXkKKyAgICAvLyBmb3IgT3BlbkdMIHRvIGRlY2lkZSB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRv
IGEgZGlzcGxheSAob25saW5lL29mZmxpbmUpLgorICAgIC8vIE9wZW5HTCB3aWxsIHRoZW4gY29u
c2lkZXIgYWxsIEdQVXMsIG9yIHJlbmRlcmVycywgYXMgb2ZmbGluZSwgd2hpY2ggbWVhbnMKKyAg
ICAvLyBhbGwgb2ZmbGluZSByZW5kZXJlcnMgbmVlZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gZmlu
ZGluZyBhIHBpeGVsIGZvcm1hdC4KKyAgICAvLyBJbiBXZWJLaXQgbGVnYWN5LCB0aGVyZSB3aWxs
IHN0aWxsIGJlIGEgV2luZG93U2VydmVyIGNvbm5lY3Rpb24sIGFuZAorICAgIC8vIG1fZGlzcGxh
eU1hc2sgd2lsbCBub3QgYmUgc2V0IGluIHRoaXMgY2FzZS4KKyAgICBpZiAocHJpbWFyeU9wZW5H
TERpc3BsYXlNYXNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgUExBVEZPUk0oTUFD
Q0FUQUxZU1QpCisgICAgLy8gRklYTUU6IDxyZGFyOi8vNTMwNjI3OTQ+IFdlJ3JlIHZlcnkgaW5j
b25zaXN0ZW50IGFib3V0IFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HCisgICAgLy8g
YW5kIE1BQy9NQUNDQVRBTFlTVCBhbmQgT1BFTkdML09QRU5HTEVTLgorICAgIHJldHVybiB0cnVl
OworI2VuZGlmCisgICAgICAgIAorI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyAg
ICBpZiAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQpCit7CisgICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybjsKKyNp
ZiBVU0UoQU5HTEUpCisgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlJRCk7CisjZWxzZQorICAgIC8v
IEZJWE1FOiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gaW50ZWdyYXRlIG1vcmUgY29kZSBpbnRvIEFO
R0xFIHRvIGhhdmUgdGhpcyBlZmZlY3QuCisjaWYgVVNFKE9QRU5HTCkKKyAgICBpZiAoIW1faGFz
U3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSkKKyAgICAgICAgc2V0R1BVQnlSZWdpc3RyeUlE
KG1fY29udGV4dE9iaiwgQ0dMR2V0UGl4ZWxGb3JtYXQobV9jb250ZXh0T2JqKSwgZ3B1SURGb3JE
aXNwbGF5KGRpc3BsYXlJRCkpOworI2VuZGlmCisjZW5kaWYgLy8gVVNFKEFOR0xFKQorfQorI2Vu
ZGlmIC8vICFQTEFURk9STShNQUMpCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViR0xMYXllci5oCmluZGV4IDFkM2I2ZDVhYzhhODFhOGMyMWYyNzRjYWE2NDgzYTNkZTE0
YmU1ZGQuLmU2YzQ1ZmI1NzA1ZDYyMDQ5ZTRiYjE5NzZlZGE4ODMwNzliODcyMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgK
QEAgLTQwLDI0ICs0MCwyMiBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgog
QGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FMYXllcgogI2VsaWYgVVNFKE9QRU5HTF9FUykKIEBp
bnRlcmZhY2UgV2ViR0xMYXllciA6IENBRUFHTExheWVyCi0jZWxpZiBVU0UoQU5HTEUpICYmIFBM
QVRGT1JNKE1BQykKKyNlbGlmIFVTRShBTkdMRSkKIEBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENB
TGF5ZXIKLSNlbGlmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLUBpbnRlcmZh
Y2UgV2ViR0xMYXllciA6IENBRUFHTExheWVyCiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBs
YXRmb3JtCiAjZW5kaWYKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogX2NvbnRl
eHQ7CiAgICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87Ci0jaWYgVVNFKE9QRU5HTCkgfHwgKFVT
RShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKSkKKyNpZiBIQVZFKElPU1VSRkFDRSkgJiYgKFVTRShP
UEVOR0wpIHx8IFVTRShBTkdMRSkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3Vy
ZmFjZT4gX2NvbnRlbnRzQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+IF9kcmF3aW5nQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+IF9zcGFyZUJ1ZmZlcjsKICAgICBXZWJDb3JlOjpJbnRTaXplIF9idWZmZXJTaXplOwog
ICAgIEJPT0wgX3VzaW5nQWxwaGE7CiAjZW5kaWYKLSNpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JN
KE1BQykKKyNpZiBVU0UoQU5HTEUpCiAgICAgdm9pZCogX2VnbERpc3BsYXk7CiAgICAgdm9pZCog
X2VnbENvbmZpZzsKICAgICB2b2lkKiBfY29udGVudHNQYnVmZmVyOwpAQCAtNzMsMTMgKzcxLDEz
IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAKIC0gKENHSW1hZ2VSZWYp
Y29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3Bh
Y2U7CiAKLSNpZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQor
I2lmIEhBVkUoSU9TVVJGQUNFKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKIC0gKHZv
aWQpYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50U2l6
ZSlzaXplIHVzaW5nQWxwaGE6KEJPT0wpdXNpbmdBbHBoYTsKIC0gKHZvaWQpYmluZEZyYW1lYnVm
ZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZTsKICNlbmRpZgogCi0jaWYgKFVTRShBTkdMRSkgJiYg
UExBVEZPUk0oTUFDKSkKLS0gKHZvaWQpc2V0RUdMRGlzcGxheToodm9pZCopZWdsRGlzcGxheSBh
bmRDb25maWc6KHZvaWQqKWVnbENvbmZpZzsKKyNpZiBVU0UoQU5HTEUpCistICh2b2lkKXNldEVH
TERpc3BsYXk6KHZvaWQqKWVnbERpc3BsYXkgY29uZmlnOih2b2lkKillZ2xDb25maWc7CiAtICh2
b2lkKWRlYWxsb2M7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KaW5kZXggODc4MDg2MDI3MDI1ZjMwOTA4ODNh
YmVjNDdkYmVjYWQ1NmEyNTBkOS4uNTgzNjc2MThlY2ZhNmRjZGJmZThkZjg0N2ZkNDFhMmY4NDNm
NGY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9XZWJHTExheWVyLm1tCkBAIC02Niw3ICs2Niw3IEBACiAgICAgX2NvbnRleHQgPSBjb250ZXh0
OwogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgX2RldmljZVBpeGVsUmF0aW8gPSBjb250
ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmRldmljZVBpeGVsUmF0aW87Ci0jaWYgVVNFKE9Q
RU5HTCkgfHwgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKE9QRU5HTCkgfHwg
VVNFKEFOR0xFKQogICAgIHNlbGYuY29udGVudHNPcGFxdWUgPSAhY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYTsKICAgICBzZWxmLnRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RJ
ZGVudGl0eTsKICAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBfZGV2aWNlUGl4ZWxSYXRpbzsKQEAg
LTc2LDcgKzc2LDcgQEAKICAgICByZXR1cm4gc2VsZjsKIH0KIAotI2lmIFVTRShPUEVOR0wpIHx8
IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFO
R0xFKQogLy8gV2hlbiB1c2luZyBhbiBJT1N1cmZhY2UgYXMgbGF5ZXIgY29udGVudHMsIHdlIG5l
ZWQgdG8gZmxpcCB0aGUKIC8vIGxheWVyIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIElP
U3VyZmFjZSBwcm92aWRlcyBjb250ZW50CiAvLyBpbiBZLXVwLiBUaGlzIG1lYW5zIHRoYXQgYW55
IGluY29taW5nIHRyYW5zZm9ybSAodW5saWtlbHksIHNpbmNlCkBAIC05Miw3ICs5Miw3IEBACiB7
CiAgICAgW3N1cGVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKHAueCwgMS4wIC0gcC55KV07
CiB9Ci0jZW5kaWYgLy8gVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFD
KSkKKyNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCiAKICNpZiBVU0UoT1BFTkdM
KQogc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg
Lyogc2l6ZSAqLykKQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lk
ICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIH0KICNlbGlmIFVT
RShPUEVOR0xfRVMpCiAgICAgX2NvbnRleHQtPnByZXNlbnRSZW5kZXJidWZmZXIoKTsKLSNlbGlm
IFVTRShBTkdMRSkKKyNlbGlmIEhBVkUoSU9TVVJGQUNFKSAmJiBVU0UoQU5HTEUpCiAgICAgX2Nv
bnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAgICAgaWYgKF9kcmF3aW5nQnVmZmVyKSB7CiAgICAg
ICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKQEAgLTE4MSw4ICsxODEsOCBAQCBzdGF0aWMgdm9p
ZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQog
ICAgICAgICBsYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGxh
eWVyKTsKIH0KIAotI2lmIChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCi0tICh2b2lkKXNl
dEVHTERpc3BsYXk6KHZvaWQqKWRpc3BsYXkgYW5kQ29uZmlnOih2b2lkKiljb25maWcKKyNpZiBV
U0UoQU5HTEUpCistICh2b2lkKXNldEVHTERpc3BsYXk6KHZvaWQqKWRpc3BsYXkgY29uZmlnOih2
b2lkKiljb25maWcKIHsKICAgICBfZWdsRGlzcGxheSA9IGRpc3BsYXk7CiAgICAgX2VnbENvbmZp
ZyA9IGNvbmZpZzsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lk
ICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogfQogI2VuZGlmCiAKLSNp
ZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQorI2lmIEhBVkUo
SU9TVVJGQUNFKSAmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQogLSAodm9pZClhbGxvY2F0
ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNpemUgdXNp
bmdBbHBoYTooQk9PTCl1c2luZ0FscGhhCiB7CiAgICAgX2J1ZmZlclNpemUgPSBzaXplOwpAQCAt
MjE0LDcgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAq
ZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgX2RyYXdpbmdCdWZmZXItPm1pZ3JhdGVDb2xv
clNwYWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAgX3NwYXJlQnVmZmVyLT5taWdyYXRlQ29sb3JTcGFj
ZVRvUHJvcGVydGllcygpOwogCi0jaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjaWYg
VVNFKEFOR0xFKQogICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0cmlidXRlc1tdID0gewogICAg
ICAgICBFR0xfV0lEVEgsIHNpemUud2lkdGgoKSwKICAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5o
ZWlnaHQoKSwKQEAgLTI3Miw3ICsyNzIsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICos
IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIF9sYXRjaGVkUGJ1ZmZl
ciA9IF9kcmF3aW5nUGJ1ZmZlcjsKICNlbmRpZgogfQotI2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8
IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjZW5kaWYgLy8gVVNFKE9QRU5HTCkgfHwg
VVNFKEFOR0xFKQogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KaW5kZXggOWYxZjY2YjNiZDU5ZjU5YjFhZDNj
YjcwNWM4NTY1NDQyMjdlYzM5OC4uMDE5ZDIzOTUxN2Q4MmJjMmViZjNkYjY1NjZjM2ZhZDNhNTgw
ZmRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4
dHVyZUNhY2hlQ1YubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
VGV4dHVyZUNhY2hlQ1YubW0KQEAgLTYxLDYgKzYxLDE2IEBAIFRleHR1cmVDYWNoZUNWOjpUZXh0
dXJlQ2FjaGVDVihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCwgUmV0YWluUHRyPFRleHR1cmVD
YWNoCiAKIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVDVjo6VGV4dHVyZVR5cGU+IFRleHR1cmVDYWNo
ZUNWOjp0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIEdDM0RlbnVtIG91
dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKIHsKKyNpZiBVU0UoQU5HTEUpCisgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMgaW50ZWdyYXRpbmcgdmlhIEFOR0xFLgorICAg
IFVOVVNFRF9QQVJBTShpbWFnZSk7CisgICAgVU5VU0VEX1BBUkFNKG91dHB1dFRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxGb3JtYXQp
OworICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCiAgICAgVGV4dHVyZVR5cGUgYmFyZVZpZGVvVGV4dHVy
ZSA9IG51bGxwdHI7CiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICBzaXplX3Qgd2lkdGggPSBDVlBp
eGVsQnVmZmVyR2V0V2lkdGgoaW1hZ2UpOwpAQCAtNzUsMTUgKzg1LDYgQEAgUmV0YWluUHRyPFRl
eHR1cmVDYWNoZUNWOjpUZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hlQ1Y6OnRleHR1cmVGcm9tSW1h
Z2UoQ1ZQaXhlbEIKICAgICBVTlVTRURfUEFSQU0odHlwZSk7CiAgICAgaWYgKGtDVlJldHVyblN1
Y2Nlc3MgIT0gQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGVUZXh0dXJlRnJvbUltYWdlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIG1fY2FjaGUuZ2V0KCksIGltYWdlLCBudWxscHRyLCAmYmFyZVZpZGVv
VGV4dHVyZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotI2VsaWYgVVNFKEFOR0xFKQotICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzIGludGVncmF0aW5nIHZpYSBBTkdM
RS4KLSAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJBTShvdXRwdXRUYXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFs
Rm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlw
ZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKICAgICBSZXRhaW5QdHI8VGV4dHVyZVR5
cGU+IHZpZGVvVGV4dHVyZSA9IGFkb3B0Q0YoYmFyZVZpZGVvVGV4dHVyZSk7CiAKQEAgLTkxLDE2
ICs5MiwxNyBAQCBSZXRhaW5QdHI8VGV4dHVyZUNhY2hlQ1Y6OlRleHR1cmVUeXBlPiBUZXh0dXJl
Q2FjaGVDVjo6dGV4dHVyZUZyb21JbWFnZShDVlBpeGVsQgogICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt3ZWFrVGhpc10gewogICAgICAgICBpZiAoIXdlYWtU
aGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBpZiAoYXV0byBj
YWNoZSA9IHdlYWtUaGlzLT5tX2NhY2hlLmdldCgpKQogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAg
ICAgICAgICBDVk9wZW5HTEVTVGV4dHVyZUNhY2hlRmx1c2goY2FjaGUsIDApOwotI2Vsc2UKKyNl
bGlmIFVTRShPUEVOR0wpCiAgICAgICAgICAgICBDVk9wZW5HTFRleHR1cmVDYWNoZUZsdXNoKGNh
Y2hlLCAwKTsKICNlbmRpZgogICAgIH0pOwogCiAgICAgcmV0dXJuIHZpZGVvVGV4dHVyZTsKKyNl
bmRpZgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKaW5kZXggNzVhZDQ4NzcwNGZmN2I0
OGU1MzYxZTVjNTNmOGJhNDE4YWRiMjIzYi4uMWY2ZDExYzQ1M2UzM2I0ZmVmMjgxOTRmOWE4ODJh
YTU3M2Q4YTc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcApAQCAtODc0LDIwICs4NzQsMzYg
QEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKFRleHR1cmVUeXBlIGlucHV0VmkKICAgICBHTGZsb2F0IGxvd2VyUmlnaHRbMl0gPSB7
IDAsIDAgfTsKICAgICBHTGZsb2F0IHVwcGVyUmlnaHRbMl0gPSB7IDAsIDAgfTsKICAgICBHTGZs
b2F0IHVwcGVyTGVmdFsyXSA9IHsgMCwgMCB9OworICAgIFBsYXRmb3JtM0RPYmplY3QgdmlkZW9U
ZXh0dXJlTmFtZTsKKyAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQ7CisKICNpZiBVU0Uo
T1BFTkdMX0VTKQotICAgIFBsYXRmb3JtM0RPYmplY3QgdmlkZW9UZXh0dXJlTmFtZSA9IENWT3Bl
bkdMRVNUZXh0dXJlR2V0TmFtZShpbnB1dFZpZGVvVGV4dHVyZSk7Ci0gICAgR0MzRGVudW0gdmlk
ZW9UZXh0dXJlVGFyZ2V0ID0gQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1Rl
eHR1cmUpOworICAgIHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUo
aW5wdXRWaWRlb1RleHR1cmUpOworICAgIHZpZGVvVGV4dHVyZVRhcmdldCA9IENWT3BlbkdMRVNU
ZXh0dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsKICAgICBDVk9wZW5HTEVTVGV4dHVy
ZUdldENsZWFuVGV4Q29vcmRzKGlucHV0VmlkZW9UZXh0dXJlLCBsb3dlckxlZnQsIGxvd2VyUmln
aHQsIHVwcGVyUmlnaHQsIHVwcGVyTGVmdCk7CiAjZWxpZiBVU0UoT1BFTkdMKQotICAgIFBsYXRm
b3JtM0RPYmplY3QgdmlkZW9UZXh0dXJlTmFtZSA9IENWT3BlbkdMVGV4dHVyZUdldE5hbWUoaW5w
dXRWaWRlb1RleHR1cmUpOwotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IENWT3Bl
bkdMVGV4dHVyZUdldFRhcmdldChpbnB1dFZpZGVvVGV4dHVyZSk7CisgICAgdmlkZW9UZXh0dXJl
TmFtZSA9IENWT3BlbkdMVGV4dHVyZUdldE5hbWUoaW5wdXRWaWRlb1RleHR1cmUpOworICAgIHZp
ZGVvVGV4dHVyZVRhcmdldCA9IENWT3BlbkdMVGV4dHVyZUdldFRhcmdldChpbnB1dFZpZGVvVGV4
dHVyZSk7CiAgICAgQ1ZPcGVuR0xUZXh0dXJlR2V0Q2xlYW5UZXhDb29yZHMoaW5wdXRWaWRlb1Rl
eHR1cmUsIGxvd2VyTGVmdCwgbG93ZXJSaWdodCwgdXBwZXJSaWdodCwgdXBwZXJMZWZ0KTsKICNl
bGlmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5hbWUgPSBD
Vk9wZW5HTFRleHR1cmVHZXROYW1lKGlucHV0VmlkZW9UZXh0dXJlKTsKLSAgICBHQzNEZW51bSB2
aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1Rl
eHR1cmUpOwotICAgIENWT3BlbkdMVGV4dHVyZUdldENsZWFuVGV4Q29vcmRzKGlucHV0VmlkZW9U
ZXh0dXJlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVyUmlnaHQsIHVwcGVyTGVmdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxvd2VyTGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKGxvd2VyUmlnaHQp
OworICAgIFVOVVNFRF9QQVJBTSh1cHBlckxlZnQpOworICAgIFVOVVNFRF9QQVJBTSh1cHBlclJp
Z2h0KTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQp
OworICAgIFVOVVNFRF9QQVJBTShvdXRwdXRUZXh0dXJlKTsKKyAgICBVTlVTRURfUEFSQU0ob3V0
cHV0VGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTShp
bnRlcm5hbEZvcm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7CisgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKKyAgICBVTlVT
RURfUEFSQU0oZmxpcFkpOworICAgIFVOVVNFRF9QQVJBTShzd2FwQ29sb3JDaGFubmVscyk7CiAg
ICAgLy8gRklYTUU6IGRldGVybWluZSBob3cgdG8gYWNjZXNzIHJlY3Rhbmd1bGFyIHRleHR1cmVz
IHZpYSBBTkdMRS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKICAgICBpZiAobG93ZXJMZWZ0WzFdIDwg
dXBwZXJSaWdodFsxXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAppbmRleCAy
ZmZhNmI3NzY3MzczY2I3NzhiMGE1MDRmNTM5NWYwZTg0ZWNjNzZlLi5iY2Q3MjQ2OGUwNWM3MjRi
MzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRp
bmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCiAjaW5jbHVkZSAiVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZy5oIgogCiAjaWYgVVNFKExJQkVQT1hZKQpAQCAtMzYsNyArMzYsNyBAQAog
CiAjaWYgVVNFKE9QRU5HTF9FUykKICNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2wuaD4KLSNlbHNl
CisjZWxpZiBVU0UoT1BFTkdMKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3Jh
cnlPcGVuR0xTZXR0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCmluZGV4IGNiNTE2OTViNzFkYjc1Mjc2YWIxNDM4
NjNjZWFiN2M3YjdjMTY3ZGUuLjNiODU0MzEyOTZjMzgxYWQ0YjVkMTRhZWVlMTYyYzk4MmU1MDVl
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaApAQCAtMjQsMTEgKzI0LDEyIEBA
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZ19oCi0j
ZGVmaW5lIFRlbXBvcmFyeU9wZW5HTFNldHRpbmdfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzM0QuaCIKIAorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAm
JiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCisKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383077</attachid>
            <date>2019-11-07 15:05:51 -0800</date>
            <delta_ts>2019-11-07 15:23:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202159-20191108100548.patch</filename>
            <type>text/plain</type>
            <size>175983</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggMGQ0OWY2OTUzMzZhMTc0Zjg1MDZmMmIwNmUzNzk0ZTBhZjhhOWJjZC4uNjE4YjAxNDkyMGI1
YmJiOGRlNTIzOWY0NjA3Y2Q3OGRkN2ExMzFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2NiBAQAorMjAxOS0xMS0wNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIEFOR0xFIGJhY2tlbmQgZm9yIGlPUyBkZXZpY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE1OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhbiBPcGVuR0xF
UyBiYWNrZW5kIG92ZXIgRUFHTCBmb3IgaU9TIHRvIEFOR0xFLgorCisgICAgICAgIFRoaXMgaXMg
YmFzaWNhbGx5IGEgY29weSBvZiBhbGwgdGhlIGZpbGVzIGluCisgICAgICAgIGxpYkFOR0xFL3Jl
bmRlcmVyL2dsL2NnbCBpbnRvIGxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wsIHRoZW4gd2l0aAor
ICAgICAgICBtb2RpZmljYXRpb25zIHRvIG1ha2UgaXQgd29yayBvbiBpT1MncyBPcGVuR0wgRVMu
IE1vc3Qgbm90YWJseSwKKyAgICAgICAgc29tZSBmb3JtYXQgZW51bXMgYW5kIHRoZSBtYW5uZXIg
aW4gd2hpY2ggeW91IGJpbmQgYW4gSU9TdXJmYWNlIHRvCisgICAgICAgIGEgR0wgdGV4dHVyZSBh
cmUgZGlmZmVyZW50LgorCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIGZldyBwbGFjZXMgd2hl
cmUgd2UgaGF2ZSB0byBkbyBhIGNvbXBpbGUgdGltZQorICAgICAgICBzd2l0Y2ggZm9yIGlPUywg
c29tZSBvZiB3aGljaCBtaWdodCBhY3R1YWxseSBiZSBhcHBsaWNhYmxlIHRvCisgICAgICAgIG90
aGVyIE9wZW5HTCBFUyBiYWNrZW5kcy4KKworICAgICAgICBUaGUgYmlnZ2VzdCBtaXNzaW5nIHBp
ZWNlIGlzIHN1cHBvcnQgZm9yIHRoZSBpT1Mgc2ltdWxhdG9yLiBBdCB0aGUgbW9tZW50CisgICAg
ICAgIHRoaXMgYmFja2VuZCByZWxpZXMgb24gYW4gSU9TdXJmYWNlIGJpbmRpbmcgYXMgYSByZW5k
ZXJpbmcgdGFyZ2V0LgorICAgICAgICBCdXQgdGhlIGlPUyBTaW11bGF0b3IgZG9lcyBub3QgaGF2
ZSB0aGUgcmVxdWlyZWQgYWJpbGl0eSB0byBoYXZlIGEKKyAgICAgICAgR0wgRVMgdGV4dHVyZSBi
YWNrZWQgYnkgYW4gSU9TdXJmYWNlLgorCisgICAgICAgIFRoZSBXaW5kb3dTdXJmYWNlRUFHTCBj
b2RlIGlzIGluY29tcGxldGUsIGJ1dCB3YXMgbm90IG5lY2Vzc2FyeQorICAgICAgICBpbiBvcmRl
ciB0byBnZXQgV2ViR0wgb3BlcmF0aW9uYWwuIEFuZCBldmVuIGlmIHlvdSBhcmUgdXNpbmcgQU5H
TEUKKyAgICAgICAgZGlyZWN0bHksIHlvdSBjYW4gaGF2ZSB0aGUgY2xpZW50IGNvZGUgcmVuZGVy
IGludG8gYSBDQUxheWVyIHdpdGhvdXQKKyAgICAgICAgZ29pbmcgdGhyb3VnaCB0aGUgV2luZG93
U3VyZmFjZS4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaW5jbHVkZS9FR0wvZWdsZXh0X2FuZ2xlLmg6CisgICAgICAgICogc3JjL2NvbW1v
bi9QYWNrZWRFbnVtcy5jcHA6CisgICAgICAgIChlZ2xfZ2w6OkVHTFRleHR1cmVUYXJnZXRUb1Rl
eHR1cmVUeXBlKToKKyAgICAgICAgKiBzcmMvY29tbW9uL3BsYXRmb3JtLmg6CisgICAgICAgICog
c3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKGFu
Z2xlOjpHZXRTeXN0ZW1JbmZvKToKKyAgICAgICAgKiBzcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX21hY29zLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9n
cHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjLmNwcC4KKyAgICAgICAgKGFuZ2xlOjpHZXRTeXN0
ZW1JbmZvKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9EaXNwbGF5LmNwcDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMu
Y3BwOgorICAgICAgICAoZ2w6OkJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKToKKyAgICAgICAg
KiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0RldmljZUNHTC5jcHA6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tOgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvSU9TdXJmYWNlU3VyZmFjZUNHTC5jcHA6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUNHTDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1BidWZmZXJTdXJmYWNlQ0dMLmNwcDoKKyAgICAg
ICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1JlbmRlcmVyQ0dMLmNwcDoKKyAgICAg
ICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1dpbmRvd1N1cmZhY2VDR0wubW06Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvQ29udGV4dEVBR0wuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHJ4OjpDb250ZXh0RUFHTDo6Q29udGV4dEVBR0wpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRleHRFQUdMLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKHJ4OjpEZXZpY2VFQUdMOjpEZXZpY2VFQUdMKToKKyAgICAgICAgKHJ4OjpE
ZXZpY2VFQUdMOjp+RGV2aWNlRUFHTCk6CisgICAgICAgIChyeDo6RGV2aWNlRUFHTDo6aW5pdGlh
bGl6ZSk6CisgICAgICAgIChyeDo6RGV2aWNlRUFHTDo6Z2V0QXR0cmlidXRlKToKKyAgICAgICAg
KHJ4OjpEZXZpY2VFQUdMOjpnZXRUeXBlKToKKyAgICAgICAgKHJ4OjpEZXZpY2VFQUdMOjpnZW5l
cmF0ZUV4dGVuc2lvbnMgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0RldmljZUVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW06IEFkZGVkLgorICAgICAgICAocng6OkZ1
bmN0aW9uc0dMRUFHTDo6RnVuY3Rpb25zR0xFQUdMKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6RGlzcGxheUVBR0wpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjp+RGlzcGxheUVBR0wp
OgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpE
aXNwbGF5RUFHTDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6Y3JlYXRl
V2luZG93U3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmNyZWF0ZVBidWZmZXJT
dXJmYWNlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGll
bnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjpjcmVhdGVQaXhtYXBTdXJmYWNl
KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChy
eDo6RGlzcGxheUVBR0w6OmNyZWF0ZURldmljZSk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6
OmdlbmVyYXRlQ29uZmlncyk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OnRlc3REZXZpY2VM
b3N0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6cmVzdG9yZUxvc3REZXZpY2UpOgorICAg
ICAgICAocng6OkRpc3BsYXlFQUdMOjppc1ZhbGlkTmF0aXZlV2luZG93IGNvbnN0KToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5RUFHTDo6dmFsaWRhdGVDbGllbnRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjpnZXRWZW5kb3JTdHJpbmcgY29uc3QpOgorICAgICAgICAocng6
OkRpc3BsYXlFQUdMOjpnZXRFQUdMQ29udGV4dCBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxh
eUVBR0w6OmdldEVBR0xQaXhlbEZvcm1hdCBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVB
R0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6
OmdlbmVyYXRlQ2FwcyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OndhaXRDbGll
bnQpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjp3YWl0TmF0aXZlKToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5RUFHTDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9uIGNvbnN0KToKKyAgICAgICAg
KHJ4OjpEaXNwbGF5RUFHTDo6bWFrZUN1cnJlbnRTdXJmYWNlbGVzcyk6CisgICAgICAgIChyeDo6
V29ya2VyQ29udGV4dEVBR0w6OldvcmtlckNvbnRleHRFQUdMKToKKyAgICAgICAgKHJ4OjpXb3Jr
ZXJDb250ZXh0RUFHTDo6fldvcmtlckNvbnRleHRFQUdMKToKKyAgICAgICAgKHJ4OjpXb3JrZXJD
b250ZXh0RUFHTDo6bWFrZUN1cnJlbnQpOgorICAgICAgICAocng6OldvcmtlckNvbnRleHRFQUdM
Ojp1bm1ha2VDdXJyZW50KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6Y3JlYXRlV29ya2Vy
Q29udGV4dCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmluaXRpYWxpemVGcm9udGVuZEZl
YXR1cmVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6cG9wdWxhdGVGZWF0dXJl
TGlzdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNl
U3VyZmFjZUVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wubW06IENvcGllZCBmcm9tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvSU9TdXJmYWNlU3VyZmFjZUNH
TC5jcHAuCisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6OklPU3VyZmFjZVN1cmZh
Y2VFQUdMKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6fklPU3VyZmFjZVN1
cmZhY2VFQUdMKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6OnN3YXApOgorICAgICAgICAocng6OklPU3VyZmFj
ZVN1cmZhY2VFQUdMOjpwb3N0U3ViQnVmZmVyKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlRUFHTDo6cXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlRUFHTDo6cmVsZWFzZVRleEltYWdlKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNl
RUFHTDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFH
TDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpn
ZXRIZWlnaHQgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjppc1Bv
c3RTdWJCdWZmZXJTdXBwb3J0ZWQgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZh
Y2VFQUdMOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAocng6OklPU3VyZmFjZUZy
YW1lYnVmZmVyOjpJT1N1cmZhY2VGcmFtZWJ1ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZUVBR0w6OmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChyeDo6SU9T
dXJmYWNlU3VyZmFjZUVBR0w6OmluaXRpYWxpemVBbHBoYUNoYW5uZWwpOgorICAgICAgICAocng6
OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpoYXNFbXVsYXRlZEFscGhhQ2hhbm5lbCBjb25zdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdM
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL2NnbC9QYnVmZmVyU3VyZmFjZUNHTC5jcHAuCisgICAgICAgIChyeDo6UGJ1ZmZl
clN1cmZhY2VFQUdMOjpQYnVmZmVyU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OlBidWZmZXJT
dXJmYWNlRUFHTDo6flBidWZmZXJTdXJmYWNlRUFHTCk6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1
cmZhY2VFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6
Om1ha2VDdXJyZW50KToKKyAgICAgICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6OnN3YXApOgor
ICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcik6CisgICAgICAg
IChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjpxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUpOgorICAg
ICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKHJ4
OjpQYnVmZmVyU3VyZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChyeDo6UGJ1
ZmZlclN1cmZhY2VFQUdMOjpzZXRTd2FwSW50ZXJ2YWwpOgorICAgICAgICAocng6OlBidWZmZXJT
dXJmYWNlRUFHTDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNl
RUFHTDo6Z2V0SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6
OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCBjb25zdCk6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1
cmZhY2VFQUdMOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OlBidWZmZXJT
dXJmYWNlRUFHTDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9QYnVmZmVyU3VyZmFjZUVBR0wuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUmVuZGVyZXJFQUdMLmNwcDogQWRk
ZWQuCisgICAgICAgIChyeDo6UmVuZGVyZXJFQUdMOjpSZW5kZXJlckVBR0wpOgorICAgICAgICAo
cng6OlJlbmRlcmVyRUFHTDo6flJlbmRlcmVyRUFHTCk6CisgICAgICAgIChyeDo6UmVuZGVyZXJF
QUdMOjpjcmVhdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wuaDogQWRkZWQuCisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wubW06IENvcGll
ZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9j
Z2wvV2luZG93U3VyZmFjZUNHTC5tbS4KKyAgICAgICAgKC1bV2ViU3dhcExheWVyIGluaXRXaXRo
U2hhcmVkU3RhdGU6d2l0aENvbnRleHQ6d2l0aEZ1bmN0aW9uczpdKToKKyAgICAgICAgKC1bV2Vi
U3dhcExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6V2lu
ZG93U3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OldpbmRvd1N1cmZhY2VFQUdMOjp+V2luZG93
U3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OldpbmRvd1N1cmZhY2VFQUdMOjppbml0aWFsaXpl
KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6bWFrZUN1cnJlbnQpOgorICAgICAg
ICAocng6OldpbmRvd1N1cmZhY2VFQUdMOjpzd2FwKToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJm
YWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcik6CisgICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6
OnF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRSk6CisgICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVB
R0w6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6OnJlbGVh
c2VUZXhJbWFnZSk6CisgICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6OnNldFN3YXBJbnRl
cnZhbCk6CisgICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6OmdldFdpZHRoIGNvbnN0KToK
KyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6Z2V0SGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0
KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6Z2V0U3dhcEJlaGF2aW9yIGNvbnN0
KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGls
cy5jcHA6CisgICAgICAgIChyeDo6bmF0aXZlZ2xfZ2w6OkdlbmVyYXRlQ2Fwcyk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzIuY3BwOgorICAgICAgICAoZ2w6OlZhbGlkYXRl
RnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZW50cnlfcG9p
bnRzX2VnbF9leHQuY3BwOgorCiAyMDE5LTEwLTI5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KIAogICAgICAgICBbQU5HTEVdIFdpbmRvdyBTZXJ2ZXIgYmxvY2tpbmcgc3RvcHMgc2lu
Z2xlIEdQVSBzeXN0ZW1zIGZyb20gY3JlYXRpbmcgYSBDR0xQaXhlbEZvcm1hdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDFlNjg4MDIyY2FiZWVlYjQ3YWVkNzY5MmYxYWEyNjgyODYzY2U2MGUuLjE0ZGEzNmJjM2Fi
Y2MxOTUxNjBkMDk2MGQ4NDlmYmIyZTJmZjM4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBA
QAorMjAxOS0xMS0wNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIEFOR0xFIGJhY2tlbmQgZm9yIGlPUyBkZXZpY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUgQU5HTEUgZm9yIGlPUyBiYWNrZW5kLgor
CisgICAgICAgIE1vc3RseSB0aGlzIHdhcyBqdXN0IG1vdmluZyBzb21lIGNvZGUgYXJvdW5kIHNv
IHRoYXQgaXQgd291bGQgY29tcGlsZQorICAgICAgICBvbiBpT1Mgd2hlbiBVU0UoQU5HTEUpIGlz
IHRydWUuIFRoZSBhY3R1YWwgY29kZSB0byByZW5kZXIgV2ViR0wgaXMKKyAgICAgICAgc2ltaWxh
ciBiZXR3ZWVuIG1hY09TIGFuZCBpT1MgLSBib3RoIG5vdyB1c2luZyBhIENBTGF5ZXIgd2l0aAor
ICAgICAgICBhIHNldCBvZiBJT1N1cmZhY2VzIHRoYXQgYXJlIHVzZWQgYXMgc3dhcCB0ZXh0dXJl
cy4KKworICAgICAgICBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgbWFjT1MgKE9wZW5HTCkg
YmluZHMgdG8gVEVYVFVSRV9SRUNUQU5HTEUsCisgICAgICAgIGFuZCBpT1MgKE9wZW5HTCBFUykg
YmluZHMgdG8gdGhlIHJlZ3VsYXIgVEVYVFVSRV8yRC4KKworICAgICAgICBUaGUgcmVtYWluaW5n
IG1pc3NpbmcgcGllY2UgaXMgZ2V0dGluZyB2aWRlbyB0ZXh0dXJlcyBpbnRvIEFOR0xFCisgICAg
ICAgIGVmZmljaWVudGx5ICh3aXRob3V0IGxlYXZpbmcgdGhlIEdQVSkuIFdlIGNhbiBhc2sgQ29y
ZVZpZGVvCisgICAgICAgIHRvIGdpdmUgdXMgcmF3IEdMIHRleHR1cmVzLCBidXQgd2l0aCBBTkdM
RSB3ZSBubyBsb25nZXIgaGF2ZSBkaXJlY3QgYWNjZXNzCisgICAgICAgIHRvIHRoZSB1bmRlcmx5
aW5nIE9wZW5HTCBjb250ZXh0LgorCisgICAgICAgIFRoaXMgaXMgbm90IGVuYWJsZWQgaW4gdGhl
IGJ1aWxkcyB5ZXQsIHNvIG5vIHRlc3RzLiBIb3dldmVyLCB3aGVuCisgICAgICAgIGVuYWJsZWQg
aXQgd2lsbCBiZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgb2ZmaWNpYWwgV2ViR0wgY29uZm9ybWFuY2Ug
c3VpdGUuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVv
U29mdExpbmsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZh
Y2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVw
ZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgaW5p
dFdpdGhHcmFwaGljc0NvbnRleHQzRDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5
XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxheTpjb25maWc6XSk6CisgICAg
ICAgICgtW1dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTp1
c2luZ0FscGhhOl0pOgorICAgICAgICAoLVtXZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4
dEF2YWlsYWJsZVN1cmZhY2VdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBzZXRFR0xEaXNwbGF5
OmFuZENvbmZpZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9U
ZXh0dXJlQ2FjaGVDVi5tbToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNWOjp0ZXh0
dXJlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1
cmVDb3BpZXJDVi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RleHR1cmVDb3BpZXJDVjo6
Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaDoKKwogMjAxOS0x
MC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgZW50ZXJrZXloaW50IHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJkYTA1ZmU2YmYxODli
ODhkNmMwMWEzNDRiYzBiZTJhZWM3YTJhZGEuLjc3MjRhMzBkZjA2YzMwYzJkY2NlYWNmNzZlNDM5
NDJlM2E3ZmY2MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjAsNiArNjAsMTkgQEAKIAkJMzEwMTJF
ODAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUxMTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVy
c2lvbkdMU0wuaCAqLzsgfTsKIAkJMzEyQkRCMEMxNUZFQ0FDOTAwOTdFQkM3IC8qIEFOR0xFLnBs
aXN0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJC
REIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi87IH07CiAJCTMxMkJEQjBFMTVG
RUNBRTUwMDk3RUJDNyAvKiBMSUNFTlNFIGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogTElDRU5TRSAqLzsg
fTsKKwkJMzEzQkNFNTQyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0NjIzNjExMzM4MDBG
QzM5RTUgLyogRGlzcGxheUVBR0wuaCAqLzsgfTsKKwkJMzEzQkNFNTUyMzYxMTMzQTAwRkMzOUU1
IC8qIElPU3VyZmFjZVN1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0NzIzNjExMzM4MDBGQzM5RTUgLyogSU9TdXJmYWNlU3Vy
ZmFjZUVBR0wuaCAqLzsgfTsKKwkJMzEzQkNFNTYyMzYxMTMzQTAwRkMzOUU1IC8qIFBidWZmZXJT
dXJmYWNlRUFHTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTNCQ0U0ODIzNjExMzM4MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCAq
LzsgfTsKKwkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNDkyMzYxMTMz
OTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5oICovOyB9OworCQkzMTNCQ0U1ODIzNjExMzNBMDBG
QzM5RTUgLyogQ29udGV4dEVBR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEzQkNFNEEyMzYxMTMzOTAwRkMzOUU1IC8qIENvbnRleHRFQUdMLmNw
cCAqLzsgfTsKKwkJMzEzQkNFNTkyMzYxMTMzQTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0QjIz
NjExMzM5MDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmNwcCAqLzsgfTsKKwkJMzEzQkNFNUEyMzYx
MTMzQTAwRkMzOUU1IC8qIERldmljZUVBR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNEMyMzYxMTMzOTAwRkMzOUU1IC8qIERldmljZUVB
R0wuY3BwICovOyB9OworCQkzMTNCQ0U1QjIzNjExMzNBMDBGQzM5RTUgLyogRGV2aWNlRUFHTC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNEQy
MzYxMTMzOTAwRkMzOUU1IC8qIERldmljZUVBR0wuaCAqLzsgfTsKKwkJMzEzQkNFNUMyMzYxMTMz
QTAwRkMzOUU1IC8qIElPU3VyZmFjZVN1cmZhY2VFQUdMLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNEUyMzYxMTMzOTAwRkMzOUU1IC8qIElP
U3VyZmFjZVN1cmZhY2VFQUdMLm1tICovOyB9OworCQkzMTNCQ0U1RDIzNjExMzNBMDBGQzM5RTUg
LyogUGJ1ZmZlclN1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTNCQ0U0RjIzNjExMzM5MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VF
QUdMLmggKi87IH07CisJCTMxM0JDRTVFMjM2MTEzM0EwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNl
RUFHTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEz
QkNFNTAyMzYxMTMzOTAwRkMzOUU1IC8qIFdpbmRvd1N1cmZhY2VFQUdMLmggKi87IH07CisJCTMx
M0JDRTVGMjM2MTEzM0EwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNTEyMzYxMTMzOTAwRkMzOUU1IC8q
IENvbnRleHRFQUdMLmggKi87IH07CisJCTMxM0JDRTYxMjM2MTEzM0EwMEZDMzlFNSAvKiBEaXNw
bGF5RUFHTC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxM0JDRTUzMjM2MTEzMzkwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5tbSAqLzsgfTsKIAkJMzE1
RUJEM0YxRkNFNDNCRDAwQUM3QTg5IC8qIHVuaWZvcm1fdHlwZV9pbmZvX2F1dG9nZW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE1RUJEM0UxRkNF
NDNCRDAwQUM3QTg5IC8qIHVuaWZvcm1fdHlwZV9pbmZvX2F1dG9nZW4uY3BwICovOyB9OwogCQkz
MTVFQkQ3ODFGQ0U0NDM2MDBBQzdBODkgLyogVHJhbnNsYXRvclZ1bGthbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTVFQkQ0MDFGQ0U0NDI2MDBB
QzdBODkgLyogVHJhbnNsYXRvclZ1bGthbi5jcHAgKi87IH07CiAJCTMxNUVCRDdCMUZDRTQ0MzYw
MEFDN0E4OSAvKiBVdGlsc0hMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzE1RUJENDMxRkNFNDQyNzAwQUM3QTg5IC8qIFV0aWxzSExTTC5jcHAg
Ki87IH07CkBAIC0xMzksNiArMTUyLDkgQEAKIAkJMzFBMzMxQzgxRUE1RUQ1RjAwRkQyMjAzIC8q
IHZlY3Rvcl91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzFBMzMxQzUxRUE1RUQ1RjAwRkQyMjAzIC8qIHZlY3Rvcl91dGlscy5oICovOyB9Owog
CQkzMUEzMzFEQzFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQTMzMUQxMUVBNUVEREEwMEZEMjIwMyAv
KiBTZXZlcml0eS5oICovOyB9OwogCQkzMUEzMzFFMjFFQTVFRkI4MDBGRDIyMDMgLyogdHJhY2Vf
ZXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
QTMzMUUxMUVBNUVGQjgwMEZEMjIwMyAvKiB0cmFjZV9ldmVudC5oICovOyB9OworCQkzMUIxNTcy
MDIzNkI3RkFGMDBDQUE0RkQgLyogU3lzdGVtSW5mb19pb3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCMTU3MUYyMzZCN0ZBRTAwQ0FBNEZEIC8q
IFN5c3RlbUluZm9faW9zLmNwcCAqLzsgfTsKKwkJMzFCMTU3MjIyMzZCODAzMzAwQ0FBNEZEIC8q
IFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxQjE1NzIxMjM2QjgwMzMwMENBQTRGRCAvKiBTeXN0ZW1JbmZvX2ludGVy
bmFsLmggKi87IH07CisJCTMxQjE1NzIzMjM2QjgyQkIwMENBQTRGRCAvKiBXaW5kb3dTdXJmYWNl
RUFHTC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
M0JDRTUyMjM2MTEzMzkwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5tbSAqLzsgfTsKIAkJ
NUMxQkFBOUExREZCNjBGRjAwMjkwNkJCIC8qIGdsMy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxQkFBOTYxREZCNjBGRjAwMjkwNkJCIC8qIGdsMy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNUMxQkFB
OUIxREZCNjBGRjAwMjkwNkJCIC8qIGdsM3BsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzFCQUE5NzFERkI2MEZGMDAyOTA2QkIgLyogZ2wz
cGxhdGZvcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07
CiAJCTVDMUJBQTlDMURGQjYwRkYwMDI5MDZCQiAvKiBnbDMxLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzFCQUE5ODFERkI2MEZGMDAyOTA2QkIgLyog
Z2wzMS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKQEAg
LTU0Miw3ICs1NTgsNyBAQAogCQk1Q0NENTk5MzIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3Jt
YXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0NE
NTk4QjIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3JtYXRzLmggKi87IH07CiAJCTVDQ0Q1OTk0
MjI4NEZDNDAwMDE4RjJEOCAvKiBnZW5lcmF0ZW1pcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDRDU5OEMyMjg0RkM0MDAwMThGMkQ4IC8qIGdlbmVy
YXRlbWlwLmggKi87IH07CiAJCTVDQ0Q1OTk1MjI4NEZDNDAwMDE4RjJEOCAvKiBsb2FkaW1hZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDRDU5
OEQyMjg0RkM0MDAwMThGMkQ4IC8qIGxvYWRpbWFnZS5jcHAgKi87IH07Ci0JCTVDQ0Q1OTlBMjI4
NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvX21hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0NENTk5NzIyODRGQzc1MDAxOEYyRDggLyogU3lz
dGVtSW5mb19tYWMuY3BwICovOyB9OworCQk1Q0NENTk5QTIyODRGQzc1MDAxOEYyRDggLyogU3lz
dGVtSW5mb19tYWNvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1Q0NENTk5NzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mb19tYWNvcy5jcHAg
Ki87IH07CiAJCTVDQ0Q1OTlCMjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQ0Q1OTk4MjI4NEZD
NzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmNwcCAqLzsgfTsKIAkJNUNDRDU5OUMyMjg0RkM3NTAw
MThGMkQ4IC8qIFN5c3RlbUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQ0Q1OTk5MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmggKi87
IH07CiAJCTVDQ0Q1OTlFMjI4NEZDREUwMDE4RjJEOCAvKiBDb250ZXh0X2dsZXNfMV8wLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQ0Q1OTlEMjI4
NEZDREQwMDE4RjJEOCAvKiBDb250ZXh0X2dsZXNfMV8wLmNwcCAqLzsgfTsKQEAgLTgwMSw2ICs4
MTcsMjAgQEAKIAkJMzEwMTJFMTExOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMkJEQjA5MTVGRUM5MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlz
dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gQU5HTEUucGxpc3Q7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAvKiBMSUNFTlNF
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExJQ0VOU0U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxM0JDRTQ2MjM2MTEzMzgwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5RUFHTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTNCQ0U0NzIzNjExMzM4MDBGQzM5RTUgLyogSU9TdXJmYWNlU3VyZmFj
ZUVBR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFj
ZUVBR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEzQkNFNDgyMzYxMTMzODAw
RkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYnVmZmVyU3VyZmFjZUVBR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTNCQ0U0OTIzNjExMzM5MDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmVyRUFHTC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTNCQ0U0QTIzNjExMzM5MDBGQzM5RTUgLyogQ29udGV4dEVB
R0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGV4dEVBR0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTNCQ0U0QjIzNjExMzM5MDBGQzM5
RTUgLyogUmVuZGVyZXJFQUdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlcmVyRUFHTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxM0JD
RTRDMjM2MTEzMzkwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldmljZUVBR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTNCQ0U0RDIzNjExMzM5MDBGQzM5RTUgLyogRGV2aWNlRUFHTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VFQUdMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxM0JDRTRFMjM2MTEzMzkwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNl
RUFHTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElPU3VyZmFj
ZVN1cmZhY2VFQUdMLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTNCQ0U0RjIz
NjExMzM5MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBidWZmZXJTdXJmYWNlRUFHTC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTNCQ0U1MDIzNjExMzM5MDBGQzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93U3VyZmFjZUVBR0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEzQkNFNTEyMzYxMTMzOTAwRkMzOUU1IC8q
IENvbnRleHRFQUdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRF
QUdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxM0JDRTUyMjM2MTEzMzkwMEZD
MzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdpbmRvd1N1cmZhY2VFQUdMLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTNCQ0U1MzIzNjExMzM5MDBGQzM5RTUgLyogRGlzcGxheUVBR0wubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaXNwbGF5RUFHTC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE1RUJEM0UxRkNFNDNCRDAwQUM3QTg5IC8qIHVuaWZv
cm1fdHlwZV9pbmZvX2F1dG9nZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gdW5pZm9ybV90eXBlX2luZm9fYXV0b2dlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVsa2FuLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JWdWxrYW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTVFQkQ0MzFGQ0U0NDI3MDBBQzdB
ODkgLyogVXRpbHNITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFV0aWxzSExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04ODEsNiArOTEx
LDggQEAKIAkJMzFBMzMxQzUxRUE1RUQ1RjAwRkQyMjAzIC8qIHZlY3Rvcl91dGlscy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB2ZWN0b3JfdXRpbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzFBMzMxRDExRUE1RUREQTAwRkQyMjAzIC8qIFNldmVyaXR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldmVyaXR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxQTMzMUUxMUVBNUVGQjgwMEZEMjIwMyAvKiB0cmFjZV9ldmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB0cmFjZV9ldmVudC5oOyBwYXRo
ID0gdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzFCMTU3MUYyMzZCN0ZBRTAwQ0FBNEZEIC8qIFN5c3RlbUluZm9faW9zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUluZm9faW9zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMTU3MjEyMzZCODAzMzAwQ0FBNEZEIC8qIFN5c3Rl
bUluZm9faW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
SW5mb19pbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzFCQUE5NjFE
RkI2MEZGMDAyOTA2QkIgLyogZ2wzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IGdsMy5oOyBwYXRoID0gaW5jbHVkZS9HTEVTMy9nbDMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUMxQkFBOTcxREZCNjBGRjAwMjkwNkJCIC8qIGdsM3BsYXRmb3JtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGdsM3BsYXRmb3JtLmg7IHBhdGggPSBpbmNsdWRl
L0dMRVMzL2dsM3BsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMUJB
QTk4MURGQjYwRkYwMDI5MDZCQiAvKiBnbDMxLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IGdsMzEuaDsgcGF0aCA9IGluY2x1ZGUvR0xFUzMvZ2wzMS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI4NSw3ICsxMzE3LDcgQEAKIAkJNUNDRDU5OEIyMjg0RkM0MDAw
MThGMkQ4IC8qIGltYWdlZm9ybWF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBpbWFnZWZvcm1hdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDRDU5OEMy
Mjg0RkM0MDAwMThGMkQ4IC8qIGdlbmVyYXRlbWlwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGdlbmVyYXRlbWlwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
Q0Q1OThEMjI4NEZDNDAwMDE4RjJEOCAvKiBsb2FkaW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gbG9hZGltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUNDRDU5OTcyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm9fbWFjLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUluZm9fbWFjLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDRDU5OTcyMjg0RkM3NTAwMThGMkQ4IC8q
IFN5c3RlbUluZm9fbWFjb3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3lzdGVtSW5mb19tYWNvcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
Q0Q1OTk4MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0NENTk5OTIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1JbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDQ0Q1OTlEMjI4NEZDREQwMDE4RjJEOCAvKiBDb250ZXh0X2dsZXNf
MV8wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRfZ2xl
c18xXzAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMyw2ICsxNjU1LDI3
IEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTMxM0JDRTI3MjM2MEY3ODkwMEZDMzlFNSAvKiBlYWdsICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTNCQ0U0QTIzNjExMzM5MDBGQzM5RTUgLyogQ29u
dGV4dEVBR0wuY3BwICovLAorCQkJCTMxM0JDRTUxMjM2MTEzMzkwMEZDMzlFNSAvKiBDb250ZXh0
RUFHTC5oICovLAorCQkJCTMxM0JDRTRDMjM2MTEzMzkwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmNw
cCAqLywKKwkJCQkzMTNCQ0U0RDIzNjExMzM5MDBGQzM5RTUgLyogRGV2aWNlRUFHTC5oICovLAor
CQkJCTMxM0JDRTQ2MjM2MTEzMzgwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5oICovLAorCQkJCTMx
M0JDRTUzMjM2MTEzMzkwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5tbSAqLywKKwkJCQkzMTNCQ0U0
NzIzNjExMzM4MDBGQzM5RTUgLyogSU9TdXJmYWNlU3VyZmFjZUVBR0wuaCAqLywKKwkJCQkzMTNC
Q0U0RTIzNjExMzM5MDBGQzM5RTUgLyogSU9TdXJmYWNlU3VyZmFjZUVBR0wubW0gKi8sCisJCQkJ
MzEzQkNFNDgyMzYxMTMzODAwRkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5jcHAgKi8sCisJ
CQkJMzEzQkNFNEYyMzYxMTMzOTAwRkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5oICovLAor
CQkJCTMxM0JDRTRCMjM2MTEzMzkwMEZDMzlFNSAvKiBSZW5kZXJlckVBR0wuY3BwICovLAorCQkJ
CTMxM0JDRTQ5MjM2MTEzMzkwMEZDMzlFNSAvKiBSZW5kZXJlckVBR0wuaCAqLywKKwkJCQkzMTNC
Q0U1MDIzNjExMzM5MDBGQzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCAqLywKKwkJCQkzMTNC
Q0U1MjIzNjExMzM5MDBGQzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wubW0gKi8sCisJCQkpOwor
CQkJcGF0aCA9IGVhZ2w7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkzMTVF
QkUwQjFGQ0U0NUFDMDBBQzdBODkgLyogdGhpcmRfcGFydHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjMzMyw4ICsyMzg2LDkgQEAKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTVDQ0Q1OTk4MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmNwcCAqLywK
IAkJCQk1Q0NENTk5OTIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mby5oICovLAotCQkJCTMx
M0JDRTQ0MjM2MEY5QUQwMEZDMzlFNSAvKiBTeXN0ZW1JbmZvX2ludGVybmFsLmggKi8sCi0JCQkJ
NUNDRDU5OTcyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm9fbWFjLmNwcCAqLywKKwkJCQkz
MUIxNTcyMTIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVtSW5mb19pbnRlcm5hbC5oICovLAorCQkJ
CTMxQjE1NzFGMjM2QjdGQUUwMENBQTRGRCAvKiBTeXN0ZW1JbmZvX2lvcy5jcHAgKi8sCisJCQkJ
NUNDRDU5OTcyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm9fbWFjb3MuY3BwICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBncHVpbmZvdXRpbDsKIAkJCXBhdGggPSBncHVfaW5mb191dGlsOwpAQCAt
MjU0Myw3ICsyNTk3LDcgQEAKIAkJCQk1QzFEQkRFMzFCMDQzOEQzMDAyMzU1NTIgLyogQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MjcyMzA1RjdDNDAwMkRBOTcyIC8qIENvbnRl
eHQuaW5sLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk3QjIyODRGQTgzMDAxOEYyRDggLyog
Q29udGV4dENHTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzEzQkNFM0QyMzYwRjc4QTAwRkMzOUU1
IC8qIENvbnRleHRFQUdMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTNCQ0U1RjIzNjExMzNBMDBG
QzM5RTUgLyogQ29udGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFEMURFMzlG
MUEwMEQyQzQwNSAvKiBDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERFMURF
NDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5
OEUyMjg0RkM0MDAwMThGMkQ4IC8qIGNvcHlpbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU0
LDcgKzI2MDgsNyBAQAogCQkJCTVDNTVENjg5MjI4MjZCOUYwMEI1QkEyQyAvKiBEZWZlckdsb2Jh
bEluaXRpYWxpemVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERTcxQjA0MzhEMzAwMjM1
NTUyIC8qIERldmljZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkUzMUEwQTQyMzRFRUVENDAwQzg0
Nzg0IC8qIERldmljZUNHTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzEzQkNFNDMyMzYwRjc4QTAw
RkMzOUU1IC8qIERldmljZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxM0JDRTVCMjM2MTEz
M0EwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRFMDFE
RTQxNjQ4MDBEMkM0MDUgLyogRGV2aWNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJF
MjcxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MjY0RjhBRDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI1NjQsNyArMjYxOCw3IEBACiAJCQkJMzE1RUJEQkMxRkNFNDRCRjAwQUM3QTg5IC8q
IERpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRFOTFC
MDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNEYx
REUzOUY0NzAwRDJDNDA1IC8qIERpc3BsYXlDR0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxM0JD
RTNCMjM2MEY3OEEwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEzQkNFNTQyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1Q0IzMDExRjFERTM5RjFBMDBEMkM0MDUgLyogRGlzcGxheUdMLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0IzMDRFMjFERTQxNjQ4MDBEMkM0MDUgLyogRGlzcGxheUltcGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCREM5MUZDRTQ0RTQwMEFDN0E4OSAvKiBkcml2ZXJfdXRpbHMuaCBp
biBIZWFkZXJzICovLApAQCAtMjY2Myw3ICsyNzE3LDcgQEAKIAkJCQk1QzU1RDcwODIyODI2Q0Iz
MDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzU1RDcwMTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDQ0Q1OTc3MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNlQ0dM
LmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTNCQ0U0MTIzNjBGNzhBMDBGQzM5RTUgLyogSU9TdXJm
YWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxM0JDRTU1MjM2MTEzM0EwMEZD
MzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
OEUxRkNFNDQzNjAwQUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDMURCQzMyMUIwNDM3NUYwMDIzNTU1MiAvKiBsZW5ndGhfbGltaXRzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI3MDQsNyArMjc1OCw3IEBACiAJCQkJNUNCMzAxMkUxREUzOUYx
QTAwRDJDNDA1IC8qIFBhdGhHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjExREU0MTY0
ODAwRDJDNDA1IC8qIFBhdGhJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDE1MTFERTM5
RjQ3MDBEMkM0MDUgLyogUGJ1ZmZlclN1cmZhY2VDR0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTMx
M0JDRTNDMjM2MEY3OEEwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxM0JDRTVEMjM2MTEzM0EwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQkY1MUIwNDM2RUMwMDIzNTU1MiAvKiBwbGF0Zm9y
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJFMjkxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJI
YXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcyNzIyODI3NDc3MDBCNUJBMkMgLyogUG9v
bEFsbG9jLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NDMsNyArMjc5Nyw3IEBACiAJCQkJNUNCMzA0
RjUxREU0MTY0ODAwRDJDNDA1IC8qIFJlbmRlcmJ1ZmZlckltcGxfbW9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RjgxREU0MTY0ODAwRDJDNDA1IC8qIHJlbmRlcmVyX3V0aWxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0NENTk3QzIyODRGQTgzMDAxOEYyRDggLyogUmVuZGVyZXJDR0wu
aCBpbiBIZWFkZXJzICovLAotCQkJCTMxM0JDRTNFMjM2MEY3OEEwMEZDMzlFNSAvKiBSZW5kZXJl
ckVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxM0JDRTU3MjM2MTEzM0EwMEZDMzlFNSAvKiBS
ZW5kZXJlckVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM4MURFMzlGMUEwMEQyQzQw
NSAvKiBSZW5kZXJlckdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzNjFERTM5RjFBMDBE
MkM0MDUgLyogcmVuZGVyZXJnbF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MDcy
MzA1RjYzNjAwMkRBOTcyIC8qIFJlcGxhY2VTaGFkb3dpbmdWYXJpYWJsZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjgwOCw3ICsyODYyLDcgQEAKIAkJCQkzMUEzMzFDNzFFQTVFRDVGMDBGRDIyMDMg
Lyogc3lzdGVtX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcyQjIyODI3NDc3MDBC
NUJBMkMgLyogc3lzdGVtX3V0aWxzX3VuaXR0ZXN0X2hlbHBlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDRDU5OUMyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uaCBpbiBIZWFkZXJzICov
LAotCQkJCTMxM0JDRTQ1MjM2MEY5QUQwMEZDMzlFNSAvKiBTeXN0ZW1JbmZvX2ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMUIxNTcyMjIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVtSW5m
b19pbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJGMzExQjA0MzhEMzAwMjM1NTUy
IC8qIFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRDlFMUZDRTQ0MzYwMEFDN0E4
OSAvKiBUZXh0dXJlRnVuY3Rpb25ITFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDE0MjFE
RTM5RjFBMDBEMkM0MDUgLyogVGV4dHVyZUdMLmggaW4gSGVhZGVycyAqLywKQEAgLTI4ODYsNyAr
Mjk0MCw3IEBACiAJCQkJNUMxREJGNDIxQjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEF0dHJpYnV0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MDAyMjgyNkNCMzAwQjVCQTJDIC8qIFZpc2l0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzFCNjE4MzIzMEI3NDdGMDAxNjEwRDcgLyogV2luZG93
U3VyZmFjZUNHTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzEzQkNFMzcyMzYwRjc4QTAwRkMzOUU1
IC8qIFdpbmRvd1N1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTNCQ0U1RTIzNjEx
MzNBMDBGQzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREZBMUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDNTVENjc1MjI4MjZCOUYwMEI1QkEyQyAvKiBXcmFwU3dpdGNoU3RhdGVtZW50c0luQmxv
Y2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk1MTIyODRFQ0QxMDAxOEYyRDggLyogeHho
YXNoLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDcsNiArMzA2MSw3IEBACiAJCQkJQTMwMzA3MjQy
MzA1RjdDNDAwMkRBOTcyIC8qIENvbnRleHRfZ2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5OUUyMjg0RkNERTAwMThGMkQ4IC8qIENvbnRleHRfZ2xlc18xXzAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNDRDU5NzgyMjg0RkE4MzAwMThGMkQ4IC8qIENvbnRleHRDR0wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMzEzQkNFNTgyMzYxMTMzQTAwRkMzOUU1IC8qIENvbnRleHRFQUdMLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTFDMURFMzlGMUEwMEQyQzQwNSAvKiBDb250ZXh0
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0REQxREU0MTY0ODAwRDJDNDA1IC8qIENv
bnRleHRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OThGMjI4NEZDNDAwMDE4RjJE
OCAvKiBjb3B5aW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDE3LDYgKzMwNzIsNyBAQAog
CQkJCTVDNTVENkFGMjI4MjZCQzgwMEI1QkEyQyAvKiBEZWZlckdsb2JhbEluaXRpYWxpemVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRFNjFCMDQzOEQzMDAyMzU1NTIgLyogRGV2aWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMzFBMEEzMjM0RUVFRDQwMEM4NDc4NCAvKiBEZXZp
Y2VDR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEzQkNFNUEyMzYxMTMzQTAwRkMzOUU1IC8q
IERldmljZUVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0REYxREU0MTY0ODAwRDJD
NDA1IC8qIERldmljZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMjYxOEI5N0I5
QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFD
MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMDI2LDYgKzMwODIsNyBAQAogCQkJCTMxNUVCREJFMUZDRTQ0QkYwMEFDN0E4OSAvKiBEaXNw
YXRjaFRhYmxlR0xfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRFODFCMDQz
OEQzMDAyMzU1NTIgLyogRGlzcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2RTIy
ODRGOTUxMDAxOEYyRDggLyogRGlzcGxheUNHTC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxM0JD
RTYxMjM2MTEzM0EwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwMTFFMURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNCMzA0RTExREU0MTY0ODAwRDJDNDA1IC8qIERpc3BsYXlJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxNUVCRENDMUZDRTQ0RTQwMEFDN0E4OSAvKiBkcml2ZXJfdXRpbHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMDk1LDYgKzMxNTIsNyBAQAogCQkJCTVDNTVENzA0MjI4MjZD
QjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUM1NUQ3MDIyMjgyNkNCMzAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDQ0Q1OTc5MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJm
YWNlQ0dMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxM0JDRTVDMjM2MTEzM0EwMEZDMzlFNSAv
KiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCRDlDMUZD
RTQ0MzYwMEFDN0E4OSAvKiBJc0FTVERlcHRoQmVsb3dMaW1pdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMjY0RjhCNjE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNCMzA0RUYxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVuY3Rpb25zX3RhYmxlX2F1
dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTI5LDYgKzMxODcsNyBAQAogCQkJCTVDQ0Q4
MTdBMURCRkU5OTkwMDYwNjZCOCAvKiBQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMw
MTJEMURFMzlGMUEwMEQyQzQwNSAvKiBQYXRoR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5NkYyMjg0Rjk1NTAwMThGMkQ4IC8qIFBidWZmZXJTdXJmYWNlQ0dMLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxM0JDRTU2MjM2MTEzM0EwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERkUxQjA0MzhEMzAwMjM1NTUyIC8qIFBsYXRm
b3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCRTI4MUZDRjgwOEMwMEFDN0E4OSAvKiBQ
TXVySGFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU1NjE4Qjk3QjlCMDAzOTA2MkYg
LyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE2MCw2ICszMjE5LDcgQEAKIAkJ
CQk1Q0IzMDEzMzFERTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyYnVmZmVyR0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNCMzA0RjcxREU0MTY0ODAwRDJDNDA1IC8qIHJlbmRlcmVyX3V0aWxzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTdBMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5kZXJl
ckNHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTNCQ0U1OTIzNjExMzNBMDBGQzM5RTUgLyog
UmVuZGVyZXJFQUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM3MURFMzlGMUEwMEQy
QzQwNSAvKiBSZW5kZXJlckdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM1MURFMzlG
MUEwMEQyQzQwNSAvKiByZW5kZXJlcmdsX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
MDMwNzA1MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzIxMiw3ICszMjcyLDggQEAKIAkJCQk1QzU1RDczMDIyODI3NDc3
MDBCNUJBMkMgLyogc3lzdGVtX3V0aWxzX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVD
NTVENzIwMjI4Mjc0NzcwMEI1QkEyQyAvKiBzeXN0ZW1fdXRpbHNfdW5pdHRlc3RfaGVscGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTlCMjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1J
bmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVDQ0Q1OTlBMjI4NEZDNzUwMDE4RjJEOCAvKiBT
eXN0ZW1JbmZvX21hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMUIxNTcyMDIzNkI3RkFGMDBD
QUE0RkQgLyogU3lzdGVtSW5mb19pb3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDRDU5OUEy
Mjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm9fbWFjb3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUMxREJGMzAxQjA0MzhEMzAwMjM1NTUyIC8qIFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzE1RUJEOTkxRkNFNDQzNjAwQUM3QTg5IC8qIFRleHR1cmVGdW5jdGlvbkhMU0wuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxNDExREUzOUYxQTAwRDJDNDA1IC8qIFRleHR1cmVH
TC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNzUsNiArMzMzNiw3IEBACiAJCQkJNUNCMzAxNDUx
REUzOUYxQTAwRDJDNDA1IC8qIFZlcnRleEFycmF5R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUMxREJGNDExQjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEF0dHJpYnV0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMzFCNjE4NDIzMEI3NDdGMDAxNjEwRDcgLyogV2luZG93U3VyZmFjZUNHTC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTMxQjE1NzIzMjM2QjgyQkIwMENBQTRGRCAvKiBXaW5kb3dT
dXJmYWNlRUFHTC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREU3MUZDRTQ1MkQwMEFDN0E4
OSAvKiBXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2RDUyMjgyNkJD
ODAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNDRDU5NTAyMjg0RUNEMTAwMThGMkQ4IC8qIHh4aGFzaC5jIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xl
eHRfYW5nbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dF9h
bmdsZS5oCmluZGV4IGFiNWNiOGQ3YzBlYTlmMTljMjI5NDZjNTc2NjA2Mjg4MzRmMDI0NWUuLmQz
ZGQyM2QxMzEyY2ExNDQyOWEzNDY1M2QwOTE5ZjMyYmEwNzBhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dF9hbmdsZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dF9hbmdsZS5oCkBAIC0yNTksNiAr
MjU5LDEzIEBAIEVHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5RGlzcGxheUF0
dHJpYkFOR0xFKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQKICNkZWZpbmUgRUdMX0NHTF9QSVhFTF9G
T1JNQVRfQU5HTEUgMHgzNDg2CiAjZW5kaWYKIAorI2lmbmRlZiBFR0xfQU5HTEVfZGV2aWNlX2Vh
Z2wKKyNkZWZpbmUgRUdMX0FOR0xFX2RldmljZV9lYWdsIDEKKyNkZWZpbmUgRUdMX0VBR0xfQ09O
VEVYVF9BTkdMRSAweDM0ODcKKy8vIEZJWE1FOiBEbyB3ZSBuZWVkIGFuIEVHTF9QSVhFTF9GT1JN
QVRfQU5HTEU/CisvLyAjZGVmaW5lIEVHTF9FQUdMX1BJWEVMX0ZPUk1BVF9BTkdMRSAweDM0ODgK
KyNlbmRpZgorCiAvLyBjbGFuZy1mb3JtYXQgb24KIAogI2VuZGlmICAvLyBJTkNMVURFX0VHTF9F
R0xFWFRfQU5HTEVfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL1BhY2tlZEVudW1zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
UGFja2VkRW51bXMuY3BwCmluZGV4IGQ0YmQwMjgxMTYxZmUzZTdiODc1ZWZmNDg5ZjY4OTg1NWE4
NDJiNzUuLjhjYjllNTBkZTVhZDJmYTQ4MjVkNDlkNGE3M2MzMDA1Y2U3MWVhOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUGFja2VkRW51bXMuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUGFja2VkRW51bXMuY3BwCkBA
IC0zNzQsNyArMzc0LDExIEBAIGdsOjpUZXh0dXJlVHlwZSBFR0xUZXh0dXJlVGFyZ2V0VG9UZXh0
dXJlVHlwZShFR0xlbnVtIGVnbFRhcmdldCkKICAgICAgICAgICAgIHJldHVybiBnbDo6VGV4dHVy
ZVR5cGU6Ol8yRDsKIAogICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRToK
KyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKyAgICAgICAgICAgIHJldHVybiBnbDo6
VGV4dHVyZVR5cGU6Ol8yRDsKKyNlbHNlCiAgICAgICAgICAgICByZXR1cm4gZ2w6OlRleHR1cmVU
eXBlOjpSZWN0YW5nbGU7CisjZW5kaWYKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vcGxhdGZvcm0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vcGxh
dGZvcm0uaAppbmRleCA5NjAzYmU0OWI4YzY1MzIwMzk0ZjgzNTBhMzgyZGRiODdlYTk1ODY2Li5l
OTU3ZDEyYjEyZjZkNGFiYWIyYmQ3ZDU3OTNjZjNlOTFiMWViMTZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3JtLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCkBAIC0xMTEsNCArMTExLDE3IEBA
CiAjICAgIGVuZGlmICAvLyBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykK
ICNlbmRpZiAgICAgIC8vICFkZWZpbmVkKEFOR0xFX0xJS0VMWSkgfHwgIWRlZmluZWQoQU5HTEVf
VU5MSUtFTFkpCiAKKyNpZmRlZiBBTkdMRV9QTEFURk9STV9BUFBMRQorIyAgICBpbmNsdWRlIDxU
YXJnZXRDb25kaXRpb25hbHMuaD4KKyMgICAgaWYgVEFSR0VUX09TX09TWAorIyAgICAgICAgZGVm
aW5lIEFOR0xFX1BMQVRGT1JNX01BQ09TIDEKKyMgICAgZWxpZiBUQVJHRVRfT1NfSU9TCisjICAg
ICAgICBkZWZpbmUgQU5HTEVfUExBVEZPUk1fSU9TIDEKKyMgICAgICAgIGRlZmluZSBHTEVTX1NJ
TEVOQ0VfREVQUkVDQVRJT04KKyMgICAgICAgIGlmIFRBUkdFVF9PU19TSU1VTEFUT1IKKyMgICAg
ICAgICAgICBkZWZpbmUgQU5HTEVfUExBVEZPUk1fSU9TX1NJTVVMQVRPUiAxCisjICAgICAgICBl
bmRpZgorIyAgICBlbmRpZgorI2VuZGlmCisKICNlbmRpZiAgLy8gQ09NTU9OX1BMQVRGT1JNX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2lvcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFjZTc0YTRjYWExMDVlNjc2ZWUw
Mzc3NjRkYjM4YzBkMGExN2MyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcApAQCAtMCwwICsxLDQ5
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8vIFN5c3RlbUluZm9faW9zLmNwcDogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIGlPUy1zcGVjaWZpYyBwYXJ0cyBvZiBTeXN0ZW1JbmZvLmgKKworI2lu
Y2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpCisKKyNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW50ZXJuYWwuaCIKKwor
bmFtZXNwYWNlIGFuZ2xlCit7CisKK2Jvb2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1JbmZvICppbmZv
KQoreworICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJz
aW9uLgorICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmdsZQorCisjZW5kaWYg
IC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTJlZmVhOTBmMTRjMGNkMjRmMzZhMzAxMjFl
Y2YzZjkzNGQ2YzI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9f
bWFjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IDIwMTcgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
eXN0ZW1JbmZvX21hYy5jcHA6IGltcGxlbWVudGF0aW9uIG9mIHRoZSBNYWMtc3BlY2lmaWMgcGFy
dHMgb2YgU3lzdGVtSW5mby5oCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpbmNsdWRlIDxU
YXJnZXRDb25kaXRpb25hbHMuaD4KLSNpZiBUQVJHRVRfT1NfT1NYCi0KLSNpbmNsdWRlICJncHVf
aW5mb191dGlsL1N5c3RlbUluZm9faW50ZXJuYWwuaCIKLQotI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0RpcmVjdERpc3BsYXkuaD4KLSNpbmNsdWRlIDxJT0tpdC9JT0tpdExpYi5oPgotI2luY2x1
ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLQotbmFtZXNwYWNlIGFuZ2xlCi17Ci0KLW5hbWVzcGFjZQot
ewotCi11c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwotCi1jb25zdGV4cHIgQ0dM
UmVuZGVyZXJQcm9wZXJ0eSBrQ0dMUlBSZWdpc3RyeUlETG93ICA9IHN0YXRpY19jYXN0PENHTFJl
bmRlcmVyUHJvcGVydHk+KDE0MCk7Ci1jb25zdGV4cHIgQ0dMUmVuZGVyZXJQcm9wZXJ0eSBrQ0dM
UlBSZWdpc3RyeUlESGlnaCA9IHN0YXRpY19jYXN0PENHTFJlbmRlcmVyUHJvcGVydHk+KDE0MSk7
Ci0KLS8vIENvZGUgZnJvbSBXZWJLaXQgdG8gZ2V0IHRoZSBhY3RpdmUgR1BVJ3MgSUQgZ2l2ZW4g
YSBkaXNwbGF5IElELgotdWludDY0X3QgR2V0R3B1SURGcm9tRGlzcGxheUlEKFBsYXRmb3JtRGlz
cGxheUlEIGRpc3BsYXlJRCkKLXsKLSAgICBHTHVpbnQgZGlzcGxheU1hc2sgICAgICAgICAgICAg
ID0gQ0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCk7Ci0gICAgR0xpbnQg
bnVtUmVuZGVyZXJzICAgICAgICAgICAgICA9IDA7Ci0gICAgQ0dMUmVuZGVyZXJJbmZvT2JqIHJl
bmRlcmVySW5mbyA9IG51bGxwdHI7Ci0gICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xRdWVyeVJlbmRl
cmVySW5mbyhkaXNwbGF5TWFzaywgJnJlbmRlcmVySW5mbywgJm51bVJlbmRlcmVycyk7Ci0gICAg
aWYgKCFudW1SZW5kZXJlcnMgfHwgIXJlbmRlcmVySW5mbyB8fCBlcnJvciAhPSBrQ0dMTm9FcnJv
cikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgMHRoIHJlbmRlcmVyIHNob3VsZCBu
b3QgYmUgdGhlIHNvZnR3YXJlIHJlbmRlcmVyLgotICAgIEdMaW50IGlzQWNjZWxlcmF0ZWQ7Ci0g
ICAgZXJyb3IgPSBDR0xEZXNjcmliZVJlbmRlcmVyKHJlbmRlcmVySW5mbywgMCwga0NHTFJQQWNj
ZWxlcmF0ZWQsICZpc0FjY2VsZXJhdGVkKTsKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWQgfHwgZXJy
b3IgIT0ga0NHTE5vRXJyb3IpCi0gICAgewotICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZv
KHJlbmRlcmVySW5mbyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEdMaW50IGdw
dUlETG93ICA9IDA7Ci0gICAgR0xpbnQgZ3B1SURIaWdoID0gMDsKLQotICAgIGVycm9yID0gQ0dM
RGVzY3JpYmVSZW5kZXJlcihyZW5kZXJlckluZm8sIDAsIGtDR0xSUFJlZ2lzdHJ5SURMb3csICZn
cHVJRExvdyk7Ci0KLSAgICBpZiAoZXJyb3IgIT0ga0NHTE5vRXJyb3IgfHwgZ3B1SURMb3cgPCAw
KQotICAgIHsKLSAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbyhyZW5kZXJlckluZm8pOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBlcnJvciA9IENHTERlc2NyaWJlUmVuZGVy
ZXIocmVuZGVyZXJJbmZvLCAwLCBrQ0dMUlBSZWdpc3RyeUlESGlnaCwgJmdwdUlESGlnaCk7Ci0g
ICAgaWYgKGVycm9yICE9IGtDR0xOb0Vycm9yIHx8IGdwdUlESGlnaCA8IDApCi0gICAgewotICAg
ICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvKHJlbmRlcmVySW5mbyk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8ocmVuZGVyZXJJbmZvKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdwdUlESGlnaCkgPDwgMzIgfCBncHVJ
RExvdzsKLX0KLQotc3RkOjpzdHJpbmcgR2V0TWFjaGluZU1vZGVsKCkKLXsKLSAgICBpb19zZXJ2
aWNlX3QgcGxhdGZvcm1FeHBlcnQgPSBJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2UoCi0gICAg
ICAgIGtJT01hc3RlclBvcnREZWZhdWx0LCBJT1NlcnZpY2VNYXRjaGluZygiSU9QbGF0Zm9ybUV4
cGVydERldmljZSIpKTsKLQotICAgIGlmIChwbGF0Zm9ybUV4cGVydCA9PSBJT19PQkpFQ1RfTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBDRkRhdGFSZWYgbW9k
ZWxEYXRhID0gc3RhdGljX2Nhc3Q8Q0ZEYXRhUmVmPigKLSAgICAgICAgSU9SZWdpc3RyeUVudHJ5
Q3JlYXRlQ0ZQcm9wZXJ0eShwbGF0Zm9ybUV4cGVydCwgQ0ZTVFIoIm1vZGVsIiksIGtDRkFsbG9j
YXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAobW9kZWxEYXRhID09IG51bGxwdHIpCi0gICAgewot
ICAgICAgICBJT09iamVjdFJlbGVhc2UocGxhdGZvcm1FeHBlcnQpOwotICAgICAgICByZXR1cm4g
IiI7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyICo+KENGRGF0YUdldEJ5dGVQdHIobW9kZWxEYXRhKSk7Ci0KLSAgICBJT09iamVj
dFJlbGVhc2UocGxhdGZvcm1FeHBlcnQpOwotICAgIENGUmVsZWFzZShtb2RlbERhdGEpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gRXh0cmFjdHMgb25lIGludGVnZXIgcHJvcGVydHkg
ZnJvbSBhIHJlZ2lzdHJ5IGVudHJ5LgotYm9vbCBHZXRFbnRyeVByb3BlcnR5KGlvX3JlZ2lzdHJ5
X2VudHJ5X3QgZW50cnksIENGU3RyaW5nUmVmIG5hbWUsIHVpbnQzMl90ICp2YWx1ZSkKLXsKLSAg
ICAqdmFsdWUgPSAwOwotCi0gICAgQ0ZEYXRhUmVmIGRhdGEgPSBzdGF0aWNfY2FzdDxDRkRhdGFS
ZWY+KAotICAgICAgICBJT1JlZ2lzdHJ5RW50cnlTZWFyY2hDRlByb3BlcnR5KGVudHJ5LCBrSU9T
ZXJ2aWNlUGxhbmUsIG5hbWUsIGtDRkFsbG9jYXRvckRlZmF1bHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga0lPUmVnaXN0cnlJdGVyYXRlUmVjdXJzaXZlbHkgfCBr
SU9SZWdpc3RyeUl0ZXJhdGVQYXJlbnRzKSk7Ci0KLSAgICBpZiAoZGF0YSA9PSBudWxscHRyKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IHVpbnQzMl90
ICp2YWx1ZVB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4oQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSk7Ci0KLSAgICBpZiAodmFsdWVQdHIgPT0gbnVsbHB0cikKLSAgICB7Ci0g
ICAgICAgIENGUmVsZWFzZShkYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgICp2YWx1ZSA9ICp2YWx1ZVB0cjsKLSAgICBDRlJlbGVhc2UoZGF0YSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIEdhdGhlcnMgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhl
IFBDSSBHUFVzCi1ib29sIEdldFBDSURldmljZXMoc3RkOjp2ZWN0b3I8R1BVRGV2aWNlSW5mbz4g
KmRldmljZXMpCi17Ci0gICAgLy8gbWF0Y2hEaWN0aW9uYXJ5IHdpbGwgYmUgY29uc3VtZWQgYnkg
SU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcywgbm8gbmVlZCB0byByZWxlYXNlIGl0LgotICAg
IENGTXV0YWJsZURpY3Rpb25hcnlSZWYgbWF0Y2hEaWN0aW9uYXJ5ID0gSU9TZXJ2aWNlTWF0Y2hp
bmcoIklPUENJRGV2aWNlIik7Ci0KLSAgICBpb19pdGVyYXRvcl90IGVudHJ5SXRlcmF0b3I7Ci0g
ICAgaWYgKElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMoa0lPTWFzdGVyUG9ydERlZmF1bHQs
IG1hdGNoRGljdGlvbmFyeSwgJmVudHJ5SXRlcmF0b3IpICE9Ci0gICAgICAgIGtJT1JldHVyblN1
Y2Nlc3MpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW9fcmVn
aXN0cnlfZW50cnlfdCBlbnRyeSA9IElPX09CSkVDVF9OVUxMOwotCi0gICAgd2hpbGUgKChlbnRy
eSA9IElPSXRlcmF0b3JOZXh0KGVudHJ5SXRlcmF0b3IpKSAhPSBJT19PQkpFQ1RfTlVMTCkKLSAg
ICB7Ci0gICAgICAgIGNvbnN0ZXhwciB1aW50MzJfdCBrQ2xhc3NDb2RlRGlzcGxheVZHQSA9IDB4
MzAwMDA7Ci0gICAgICAgIHVpbnQzMl90IGNsYXNzQ29kZTsKLSAgICAgICAgR1BVRGV2aWNlSW5m
byBpbmZvOwotCi0gICAgICAgIGlmIChHZXRFbnRyeVByb3BlcnR5KGVudHJ5LCBDRlNUUigiY2xh
c3MtY29kZSIpLCAmY2xhc3NDb2RlKSAmJgotICAgICAgICAgICAgY2xhc3NDb2RlID09IGtDbGFz
c0NvZGVEaXNwbGF5VkdBICYmCi0gICAgICAgICAgICBHZXRFbnRyeVByb3BlcnR5KGVudHJ5LCBD
RlNUUigidmVuZG9yLWlkIiksICZpbmZvLnZlbmRvcklkKSAmJgotICAgICAgICAgICAgR2V0RW50
cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIoImRldmljZS1pZCIpLCAmaW5mby5kZXZpY2VJZCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRldmljZXMtPnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAg
fQotCi0gICAgICAgIElPT2JqZWN0UmVsZWFzZShlbnRyeSk7Ci0gICAgfQotICAgIElPT2JqZWN0
UmVsZWFzZShlbnRyeUl0ZXJhdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNl
dEFjdGl2ZUdQVUluZGV4KFN5c3RlbUluZm8gKmluZm8pCi17Ci0gICAgVmVuZG9ySUQgYWN0aXZl
VmVuZG9yOwotICAgIERldmljZUlEIGFjdGl2ZURldmljZTsKLQotICAgIHVpbnQ2NF90IGdwdUlE
ID0gR2V0R3B1SURGcm9tRGlzcGxheUlEKGtDR0RpcmVjdE1haW5EaXNwbGF5KTsKLQotICAgIGlm
IChncHVJRCA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5
UmVmIG1hdGNoRGljdGlvbmFyeSA9IElPUmVnaXN0cnlFbnRyeUlETWF0Y2hpbmcoZ3B1SUQpOwot
ICAgIGlvX3NlcnZpY2VfdCBncHVFbnRyeSA9IElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZShr
SU9NYXN0ZXJQb3J0RGVmYXVsdCwgbWF0Y2hEaWN0aW9uYXJ5KTsKLQotICAgIGlmIChncHVFbnRy
eSA9PSBJT19PQkpFQ1RfTlVMTCkKLSAgICB7Ci0gICAgICAgIElPT2JqZWN0UmVsZWFzZShncHVF
bnRyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShHZXRFbnRyeVByb3Bl
cnR5KGdwdUVudHJ5LCBDRlNUUigidmVuZG9yLWlkIiksICZhY3RpdmVWZW5kb3IpICYmCi0gICAg
ICAgICAgR2V0RW50cnlQcm9wZXJ0eShncHVFbnRyeSwgQ0ZTVFIoImRldmljZS1pZCIpLCAmYWN0
aXZlRGV2aWNlKSkpCi0gICAgewotICAgICAgICBJT09iamVjdFJlbGVhc2UoZ3B1RW50cnkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSU9PYmplY3RSZWxlYXNlKGdwdUVudHJ5KTsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby0+Z3B1cy5zaXplKCk7ICsraSkKLSAg
ICB7Ci0gICAgICAgIGlmIChpbmZvLT5ncHVzW2ldLnZlbmRvcklkID09IGFjdGl2ZVZlbmRvciAm
JiBpbmZvLT5ncHVzW2ldLmRldmljZUlkID09IGFjdGl2ZURldmljZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5mby0+YWN0aXZlR1BVSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gIC8vIGFub255bW91cyBu
YW1lc3BhY2UKLQotYm9vbCBHZXRTeXN0ZW1JbmZvKFN5c3RlbUluZm8gKmluZm8pCi17Ci0gICAg
ewotICAgICAgICBpbnQzMl90IG1ham9yID0gMDsKLSAgICAgICAgaW50MzJfdCBtaW5vciA9IDA7
Ci0gICAgICAgIFBhcnNlTWFjTWFjaGluZU1vZGVsKEdldE1hY2hpbmVNb2RlbCgpLCAmaW5mby0+
bWFjaGluZU1vZGVsTmFtZSwgJm1ham9yLCAmbWlub3IpOwotICAgICAgICBpbmZvLT5tYWNoaW5l
TW9kZWxWZXJzaW9uID0gc3RkOjp0b19zdHJpbmcobWFqb3IpICsgIi4iICsgc3RkOjp0b19zdHJp
bmcobWlub3IpOwotICAgIH0KLQotICAgIGlmICghR2V0UENJRGV2aWNlcygmKGluZm8tPmdwdXMp
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaW5mby0+
Z3B1cy5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIENhbGwgdGhlIGdlbmVyaWMgR2V0RHVhbEdQVUluZm8gZnVuY3Rpb24gdG8gaW5pdGlhbGl6
ZSBpbmZvIGZpZWxkcwotICAgIC8vIHN1Y2ggYXMgaXNPcHRpbXVzLCBpc0FNRFN3aXRjaGFibGUs
IGFuZCB0aGUgYWN0aXZlR1BVSW5kZXgKLSAgICBHZXREdWFsR1BVSW5mbyhpbmZvKTsKLQotICAg
IC8vIFRoZW4gb3ZlcnJpZGUgdGhlIGFjdGl2ZUdQVUluZGV4IGZpZWxkIG9mIGluZm8gdG8gcmVm
bGVjdCB0aGUgY3VycmVudAotICAgIC8vIEdQVSBpbnN0ZWFkIG9mIHRoZSBub24taW50ZWwgR1BV
Ci0gICAgLy8gVE9ETyhkaW5vKTogVXNlIHN5c2N0bCB0byBkZXRlY3QgT1MgdmVyc2lvbi4KLSAg
ICAvLyAgICBpZiAoQGF2YWlsYWJsZShtYWNPUyAxMC4xMywgKikpCi0gICAgU2V0QWN0aXZlR1BV
SW5kZXgoaW5mbyk7Ci0KLSAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBpcyBhIGR1YWwt
R1BVIHN5c3RlbS4KLSAgICAvLwotICAgIC8vIFRPRE8oa2JyKTogdGhpcyBjb2RlIHdhcyBwb3J0
ZWQgb3ZlciBmcm9tIENocm9taXVtLCBhbmQgaXRzIGNvcnJlY3RuZXNzCi0gICAgLy8gY291bGQg
YmUgaW1wcm92ZWQgLSBuZWVkIHRvIHVzZSBNYWMtc3BlY2lmaWMgQVBJcyB0byBkZXRlcm1pbmUg
d2hldGhlcgotICAgIC8vIG9mZmxpbmUgcmVuZGVyZXJzIGFyZSBhbGxvd2VkLCBhbmQgd2hldGhl
ciB0aGVzZSB0d28gR1BVcyBhcmUgcmVhbGx5IHRoZQotICAgIC8vIGludGVncmF0ZWQvZGlzY3Jl
dGUgR1BVcyBpbiBhIGxhcHRvcC4KLSAgICBpZiAoaW5mby0+Z3B1cy5zaXplKCkgPT0gMiAmJgot
ICAgICAgICAoKElzSW50ZWwoaW5mby0+Z3B1c1swXS52ZW5kb3JJZCkgJiYgIUlzSW50ZWwoaW5m
by0+Z3B1c1sxXS52ZW5kb3JJZCkpIHx8Ci0gICAgICAgICAoIUlzSW50ZWwoaW5mby0+Z3B1c1sw
XS52ZW5kb3JJZCkgJiYgSXNJbnRlbChpbmZvLT5ncHVzWzFdLnZlbmRvcklkKSkpKQotICAgIHsK
LSAgICAgICAgaW5mby0+aXNNYWNTd2l0Y2hhYmxlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCi0KLSNlbmRpZiAgLy8gVEFSR0VU
X09TX09TWAotI2VuZGlmICAvLyBfX0FQUExFX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzEzMjFjNTYyNDMwNGNiY2I5Y2E5MDA4ZDU2M2I3MDM1NzFiOGI5OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGls
L1N5c3RlbUluZm9fbWFjb3MuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvLworLy8gQ29weXJpZ2h0
IDIwMTcgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBT
eXN0ZW1JbmZvX21hY29zLmNwcDogaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hY09TLXNwZWNpZmlj
IHBhcnRzIG9mIFN5c3RlbUluZm8uaAorCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisK
KyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQorCisjaW5jbHVkZSAiZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dE
aXJlY3REaXNwbGF5Lmg+CisjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxP
cGVuR0wvT3BlbkdMLmg+CisKK25hbWVzcGFjZSBhbmdsZQoreworCituYW1lc3BhY2UKK3sKKwor
dXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKKworY29uc3RleHByIENHTFJlbmRl
cmVyUHJvcGVydHkga0NHTFJQUmVnaXN0cnlJRExvdyAgPSBzdGF0aWNfY2FzdDxDR0xSZW5kZXJl
clByb3BlcnR5PigxNDApOworY29uc3RleHByIENHTFJlbmRlcmVyUHJvcGVydHkga0NHTFJQUmVn
aXN0cnlJREhpZ2ggPSBzdGF0aWNfY2FzdDxDR0xSZW5kZXJlclByb3BlcnR5PigxNDEpOworCisv
LyBDb2RlIGZyb20gV2ViS2l0IHRvIGdldCB0aGUgYWN0aXZlIEdQVSdzIElEIGdpdmVuIGEgZGlz
cGxheSBJRC4KK3VpbnQ2NF90IEdldEdwdUlERnJvbURpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJ
RCBkaXNwbGF5SUQpCit7CisgICAgR0x1aW50IGRpc3BsYXlNYXNrICAgICAgICAgICAgICA9IENH
RGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpOworICAgIEdMaW50IG51bVJl
bmRlcmVycyAgICAgICAgICAgICAgPSAwOworICAgIENHTFJlbmRlcmVySW5mb09iaiByZW5kZXJl
ckluZm8gPSBudWxscHRyOworICAgIENHTEVycm9yIGVycm9yID0gQ0dMUXVlcnlSZW5kZXJlcklu
Zm8oZGlzcGxheU1hc2ssICZyZW5kZXJlckluZm8sICZudW1SZW5kZXJlcnMpOworICAgIGlmICgh
bnVtUmVuZGVyZXJzIHx8ICFyZW5kZXJlckluZm8gfHwgZXJyb3IgIT0ga0NHTE5vRXJyb3IpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhlIDB0aCByZW5kZXJlciBzaG91bGQgbm90IGJl
IHRoZSBzb2Z0d2FyZSByZW5kZXJlci4KKyAgICBHTGludCBpc0FjY2VsZXJhdGVkOworICAgIGVy
cm9yID0gQ0dMRGVzY3JpYmVSZW5kZXJlcihyZW5kZXJlckluZm8sIDAsIGtDR0xSUEFjY2VsZXJh
dGVkLCAmaXNBY2NlbGVyYXRlZCk7CisgICAgaWYgKCFpc0FjY2VsZXJhdGVkIHx8IGVycm9yICE9
IGtDR0xOb0Vycm9yKQorICAgIHsKKyAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbyhyZW5k
ZXJlckluZm8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHTGludCBncHVJRExv
dyAgPSAwOworICAgIEdMaW50IGdwdUlESGlnaCA9IDA7CisKKyAgICBlcnJvciA9IENHTERlc2Ny
aWJlUmVuZGVyZXIocmVuZGVyZXJJbmZvLCAwLCBrQ0dMUlBSZWdpc3RyeUlETG93LCAmZ3B1SURM
b3cpOworCisgICAgaWYgKGVycm9yICE9IGtDR0xOb0Vycm9yIHx8IGdwdUlETG93IDwgMCkKKyAg
ICB7CisgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8ocmVuZGVyZXJJbmZvKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZXJyb3IgPSBDR0xEZXNjcmliZVJlbmRlcmVyKHJl
bmRlcmVySW5mbywgMCwga0NHTFJQUmVnaXN0cnlJREhpZ2gsICZncHVJREhpZ2gpOworICAgIGlm
IChlcnJvciAhPSBrQ0dMTm9FcnJvciB8fCBncHVJREhpZ2ggPCAwKQorICAgIHsKKyAgICAgICAg
Q0dMRGVzdHJveVJlbmRlcmVySW5mbyhyZW5kZXJlckluZm8pOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvKHJlbmRlcmVySW5mbyk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihncHVJREhpZ2gpIDw8IDMyIHwgZ3B1SURMb3c7
Cit9CisKK3N0ZDo6c3RyaW5nIEdldE1hY2hpbmVNb2RlbCgpCit7CisgICAgaW9fc2VydmljZV90
IHBsYXRmb3JtRXhwZXJ0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlKAorICAgICAgICBr
SU9NYXN0ZXJQb3J0RGVmYXVsdCwgSU9TZXJ2aWNlTWF0Y2hpbmcoIklPUGxhdGZvcm1FeHBlcnRE
ZXZpY2UiKSk7CisKKyAgICBpZiAocGxhdGZvcm1FeHBlcnQgPT0gSU9fT0JKRUNUX05VTEwpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgQ0ZEYXRhUmVmIG1vZGVsRGF0
YSA9IHN0YXRpY19jYXN0PENGRGF0YVJlZj4oCisgICAgICAgIElPUmVnaXN0cnlFbnRyeUNyZWF0
ZUNGUHJvcGVydHkocGxhdGZvcm1FeHBlcnQsIENGU1RSKCJtb2RlbCIpLCBrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwKSk7CisgICAgaWYgKG1vZGVsRGF0YSA9PSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgSU9PYmplY3RSZWxlYXNlKHBsYXRmb3JtRXhwZXJ0KTsKKyAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhciAqPihDRkRhdGFHZXRCeXRlUHRyKG1vZGVsRGF0YSkpOworCisgICAgSU9PYmplY3RSZWxl
YXNlKHBsYXRmb3JtRXhwZXJ0KTsKKyAgICBDRlJlbGVhc2UobW9kZWxEYXRhKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy8vIEV4dHJhY3RzIG9uZSBpbnRlZ2VyIHByb3BlcnR5IGZyb20g
YSByZWdpc3RyeSBlbnRyeS4KK2Jvb2wgR2V0RW50cnlQcm9wZXJ0eShpb19yZWdpc3RyeV9lbnRy
eV90IGVudHJ5LCBDRlN0cmluZ1JlZiBuYW1lLCB1aW50MzJfdCAqdmFsdWUpCit7CisgICAgKnZh
bHVlID0gMDsKKworICAgIENGRGF0YVJlZiBkYXRhID0gc3RhdGljX2Nhc3Q8Q0ZEYXRhUmVmPigK
KyAgICAgICAgSU9SZWdpc3RyeUVudHJ5U2VhcmNoQ0ZQcm9wZXJ0eShlbnRyeSwga0lPU2Vydmlj
ZVBsYW5lLCBuYW1lLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtJT1JlZ2lzdHJ5SXRlcmF0ZVJlY3Vyc2l2ZWx5IHwga0lPUmVn
aXN0cnlJdGVyYXRlUGFyZW50cykpOworCisgICAgaWYgKGRhdGEgPT0gbnVsbHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCB1aW50MzJfdCAqdmFs
dWVQdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90ICo+KENGRGF0YUdldEJ5dGVQ
dHIoZGF0YSkpOworCisgICAgaWYgKHZhbHVlUHRyID09IG51bGxwdHIpCisgICAgeworICAgICAg
ICBDRlJlbGVhc2UoZGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAq
dmFsdWUgPSAqdmFsdWVQdHI7CisgICAgQ0ZSZWxlYXNlKGRhdGEpOworICAgIHJldHVybiB0cnVl
OworfQorCisvLyBHYXRoZXJzIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgZm9yIHRoZSBQQ0kg
R1BVcworYm9vbCBHZXRQQ0lEZXZpY2VzKHN0ZDo6dmVjdG9yPEdQVURldmljZUluZm8+ICpkZXZp
Y2VzKQoreworICAgIC8vIG1hdGNoRGljdGlvbmFyeSB3aWxsIGJlIGNvbnN1bWVkIGJ5IElPU2Vy
dmljZUdldE1hdGNoaW5nU2VydmljZXMsIG5vIG5lZWQgdG8gcmVsZWFzZSBpdC4KKyAgICBDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIG1hdGNoRGljdGlvbmFyeSA9IElPU2VydmljZU1hdGNoaW5nKCJJ
T1BDSURldmljZSIpOworCisgICAgaW9faXRlcmF0b3JfdCBlbnRyeUl0ZXJhdG9yOworICAgIGlm
IChJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2VzKGtJT01hc3RlclBvcnREZWZhdWx0LCBtYXRj
aERpY3Rpb25hcnksICZlbnRyeUl0ZXJhdG9yKSAhPQorICAgICAgICBrSU9SZXR1cm5TdWNjZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlvX3JlZ2lzdHJ5
X2VudHJ5X3QgZW50cnkgPSBJT19PQkpFQ1RfTlVMTDsKKworICAgIHdoaWxlICgoZW50cnkgPSBJ
T0l0ZXJhdG9yTmV4dChlbnRyeUl0ZXJhdG9yKSkgIT0gSU9fT0JKRUNUX05VTEwpCisgICAgewor
ICAgICAgICBjb25zdGV4cHIgdWludDMyX3Qga0NsYXNzQ29kZURpc3BsYXlWR0EgPSAweDMwMDAw
OworICAgICAgICB1aW50MzJfdCBjbGFzc0NvZGU7CisgICAgICAgIEdQVURldmljZUluZm8gaW5m
bzsKKworICAgICAgICBpZiAoR2V0RW50cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIoImNsYXNzLWNv
ZGUiKSwgJmNsYXNzQ29kZSkgJiYKKyAgICAgICAgICAgIGNsYXNzQ29kZSA9PSBrQ2xhc3NDb2Rl
RGlzcGxheVZHQSAmJgorICAgICAgICAgICAgR2V0RW50cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIo
InZlbmRvci1pZCIpLCAmaW5mby52ZW5kb3JJZCkgJiYKKyAgICAgICAgICAgIEdldEVudHJ5UHJv
cGVydHkoZW50cnksIENGU1RSKCJkZXZpY2UtaWQiKSwgJmluZm8uZGV2aWNlSWQpKQorICAgICAg
ICB7CisgICAgICAgICAgICBkZXZpY2VzLT5wdXNoX2JhY2soaW5mbyk7CisgICAgICAgIH0KKwor
ICAgICAgICBJT09iamVjdFJlbGVhc2UoZW50cnkpOworICAgIH0KKyAgICBJT09iamVjdFJlbGVh
c2UoZW50cnlJdGVyYXRvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTZXRBY3Rp
dmVHUFVJbmRleChTeXN0ZW1JbmZvICppbmZvKQoreworICAgIFZlbmRvcklEIGFjdGl2ZVZlbmRv
cjsKKyAgICBEZXZpY2VJRCBhY3RpdmVEZXZpY2U7CisKKyAgICB1aW50NjRfdCBncHVJRCA9IEdl
dEdwdUlERnJvbURpc3BsYXlJRChrQ0dEaXJlY3RNYWluRGlzcGxheSk7CisKKyAgICBpZiAoZ3B1
SUQgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBt
YXRjaERpY3Rpb25hcnkgPSBJT1JlZ2lzdHJ5RW50cnlJRE1hdGNoaW5nKGdwdUlEKTsKKyAgICBp
b19zZXJ2aWNlX3QgZ3B1RW50cnkgPSBJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2Uoa0lPTWFz
dGVyUG9ydERlZmF1bHQsIG1hdGNoRGljdGlvbmFyeSk7CisKKyAgICBpZiAoZ3B1RW50cnkgPT0g
SU9fT0JKRUNUX05VTEwpCisgICAgeworICAgICAgICBJT09iamVjdFJlbGVhc2UoZ3B1RW50cnkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEoR2V0RW50cnlQcm9wZXJ0eShn
cHVFbnRyeSwgQ0ZTVFIoInZlbmRvci1pZCIpLCAmYWN0aXZlVmVuZG9yKSAmJgorICAgICAgICAg
IEdldEVudHJ5UHJvcGVydHkoZ3B1RW50cnksIENGU1RSKCJkZXZpY2UtaWQiKSwgJmFjdGl2ZURl
dmljZSkpKQorICAgIHsKKyAgICAgICAgSU9PYmplY3RSZWxlYXNlKGdwdUVudHJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIElPT2JqZWN0UmVsZWFzZShncHVFbnRyeSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8tPmdwdXMuc2l6ZSgpOyArK2kpCisgICAgewor
ICAgICAgICBpZiAoaW5mby0+Z3B1c1tpXS52ZW5kb3JJZCA9PSBhY3RpdmVWZW5kb3IgJiYgaW5m
by0+Z3B1c1tpXS5kZXZpY2VJZCA9PSBhY3RpdmVEZXZpY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGluZm8tPmFjdGl2ZUdQVUluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2Jvb2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1JbmZvICppbmZvKQoreworICAgIHsKKyAg
ICAgICAgaW50MzJfdCBtYWpvciA9IDA7CisgICAgICAgIGludDMyX3QgbWlub3IgPSAwOworICAg
ICAgICBQYXJzZU1hY01hY2hpbmVNb2RlbChHZXRNYWNoaW5lTW9kZWwoKSwgJmluZm8tPm1hY2hp
bmVNb2RlbE5hbWUsICZtYWpvciwgJm1pbm9yKTsKKyAgICAgICAgaW5mby0+bWFjaGluZU1vZGVs
VmVyc2lvbiA9IHN0ZDo6dG9fc3RyaW5nKG1ham9yKSArICIuIiArIHN0ZDo6dG9fc3RyaW5nKG1p
bm9yKTsKKyAgICB9CisKKyAgICBpZiAoIUdldFBDSURldmljZXMoJihpbmZvLT5ncHVzKSkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGluZm8tPmdwdXMu
ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBD
YWxsIHRoZSBnZW5lcmljIEdldER1YWxHUFVJbmZvIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgaW5m
byBmaWVsZHMKKyAgICAvLyBzdWNoIGFzIGlzT3B0aW11cywgaXNBTURTd2l0Y2hhYmxlLCBhbmQg
dGhlIGFjdGl2ZUdQVUluZGV4CisgICAgR2V0RHVhbEdQVUluZm8oaW5mbyk7CisKKyAgICAvLyBU
aGVuIG92ZXJyaWRlIHRoZSBhY3RpdmVHUFVJbmRleCBmaWVsZCBvZiBpbmZvIHRvIHJlZmxlY3Qg
dGhlIGN1cnJlbnQKKyAgICAvLyBHUFUgaW5zdGVhZCBvZiB0aGUgbm9uLWludGVsIEdQVQorICAg
IC8vIFRPRE8oZGlubyk6IFVzZSBzeXNjdGwgdG8gZGV0ZWN0IE9TIHZlcnNpb24uCisgICAgLy8g
ICAgaWYgKEBhdmFpbGFibGUobWFjT1MgMTAuMTMsICopKQorICAgIFNldEFjdGl2ZUdQVUluZGV4
KGluZm8pOworCisgICAgLy8gRmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMgYSBkdWFsLUdQVSBz
eXN0ZW0uCisgICAgLy8KKyAgICAvLyBUT0RPKGticik6IHRoaXMgY29kZSB3YXMgcG9ydGVkIG92
ZXIgZnJvbSBDaHJvbWl1bSwgYW5kIGl0cyBjb3JyZWN0bmVzcworICAgIC8vIGNvdWxkIGJlIGlt
cHJvdmVkIC0gbmVlZCB0byB1c2UgTWFjLXNwZWNpZmljIEFQSXMgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIKKyAgICAvLyBvZmZsaW5lIHJlbmRlcmVycyBhcmUgYWxsb3dlZCwgYW5kIHdoZXRoZXIgdGhl
c2UgdHdvIEdQVXMgYXJlIHJlYWxseSB0aGUKKyAgICAvLyBpbnRlZ3JhdGVkL2Rpc2NyZXRlIEdQ
VXMgaW4gYSBsYXB0b3AuCisgICAgaWYgKGluZm8tPmdwdXMuc2l6ZSgpID09IDIgJiYKKyAgICAg
ICAgKChJc0ludGVsKGluZm8tPmdwdXNbMF0udmVuZG9ySWQpICYmICFJc0ludGVsKGluZm8tPmdw
dXNbMV0udmVuZG9ySWQpKSB8fAorICAgICAgICAgKCFJc0ludGVsKGluZm8tPmdwdXNbMF0udmVu
ZG9ySWQpICYmIElzSW50ZWwoaW5mby0+Z3B1c1sxXS52ZW5kb3JJZCkpKSkKKyAgICB7CisgICAg
ICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmdsZQorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvQ2Fwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0NhcHMuaAppbmRleCAwZTBiMTdlNjJmNDU4OTJiYWMxZTkxOTBhN2JiNzA2MjAzZWYxM2IxLi4z
NWRiNDU0YTMxZjVlZmVhM2MwMzkwZjU3OTQ3N2JhNjUxMzhlNmVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmgKQEAgLTk0NSw2ICs5NDUsOSBAQCBzdHJ1
Y3QgRGV2aWNlRXh0ZW5zaW9ucwogCiAgICAgLy8gRUdMX0FOR0xFX2RldmljZV9jZ2wKICAgICBi
b29sIGRldmljZUNHTCA9IGZhbHNlOworCisgICAgLy8gRUdMX0FOR0xFX2RldmljZV9lYWdsCisg
ICAgYm9vbCBkZXZpY2VFQUdMID0gZmFsc2U7CiB9OwogCiBzdHJ1Y3QgQ2xpZW50RXh0ZW5zaW9u
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3Bs
YXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3Bw
CmluZGV4IGYzNmQzNGRiMmE2YmFkODM5NTFjNWU0NWVhM2IxOGUxMjU0ODRiNzkuLmIwYWU1MTg4
NDU5YjE4YjQ1OWE2ZTNlZmJjYzdhMzgxZDNjMWQ2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAgLTUyLDggKzUyLDEwIEBACiAj
ICAgICAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvRGlzcGxheVdHTC5oIgog
IyAgICBlbGlmIGRlZmluZWQoQU5HTEVfVVNFX1gxMSkKICMgICAgICAgIGluY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL2dsL2dseC9EaXNwbGF5R0xYLmgiCi0jICAgIGVsaWYgZGVmaW5lZChBTkdM
RV9QTEFURk9STV9BUFBMRSkKKyMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09T
KQogIyAgICAgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wu
aCIKKyMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKyMgICAgICAgIGluY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCIKICMgICAgZWxpZiBk
ZWZpbmVkKEFOR0xFX1VTRV9PWk9ORSkKICMgICAgICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2VnbC9vem9uZS9EaXNwbGF5T3pvbmUuaCIKICMgICAgZWxpZiBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX0FORFJPSUQpCkBAIC0yMzIsOCArMjM0LDEwIEBAIHJ4OjpEaXNwbGF5SW1wbCAq
Q3JlYXRlRGlzcGxheUZyb21BdHRyaWJzKGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmliTWFwLCBj
b25zdCBECiAgICAgICAgICAgICBpbXBsID0gbmV3IHJ4OjpEaXNwbGF5V0dMKHN0YXRlKTsKICMg
ICAgZWxpZiBkZWZpbmVkKEFOR0xFX1VTRV9YMTEpCiAgICAgICAgICAgICBpbXBsID0gbmV3IHJ4
OjpEaXNwbGF5R0xYKHN0YXRlKTsKLSMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQ
UExFKQorIyAgICBlbGlmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiAgICAgICAgICAg
ICBpbXBsID0gbmV3IHJ4OjpEaXNwbGF5Q0dMKHN0YXRlKTsKKyMgICAgZWxpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX0lPUykKKyAgICAgICAgICAgIGltcGwgPSBuZXcgcng6OkRpc3BsYXlFQUdM
KHN0YXRlKTsKICMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1VTRV9PWk9ORSkKICAgICAgICAgICAg
IC8vIFRoaXMgbWlnaHQgd29yayBidXQgaGFzIG5ldmVyIGJlZW4gdHJpZWQsIHNvIGRpc2FsbG93
IGZvciBub3cuCiAgICAgICAgICAgICBpbXBsID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwCmluZGV4IDg3ODBh
ODU5ZTRhYTU2MDJiYWViODc5OWY3OGUzYmNkMjk2ZjQyZTYuLmM1NWQ0NTU2MTkwOTdkZTU0NTNh
ZjY4OWE1YWQ3MmMwZTliYmU2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcApAQCAtOTc1LDcgKzk3NSwxMSBAQCBzdGF0
aWMgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIEJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCkKICAg
ICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX1JHQkEsICAgICAgICAgICBmYWxzZSwgIDgsICA4LCAg
OCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0
ZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV2ZXJTdXBwb3J0ZWQpOwogICAg
IEFkZFJHQkFGb3JtYXQoJm1hcCwgR0xfU1JHQiwgICAgICAgICAgIGZhbHNlLCAgOCwgIDgsICA4
LCAgMCwgMCwgR0xfU1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIFJlcXVpcmVFeHQ8JkV4dGVuc2lvbnM6
OnNSR0I+LCAgICAgICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRl
ZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXZlclN1cHBvcnRlZCk7CiAgICAg
QWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9TUkdCX0FMUEhBX0VYVCwgZmFsc2UsICA4LCAgOCwgIDgs
ICA4LCAwLCBHTF9TUkdCX0FMUEhBX0VYVCwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCB0cnVlLCAgUmVxdWlyZUV4dDwmRXh0ZW5zaW9uczo6
c1JHQj4sICAgICAgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFeHQ8JkV4
dGVuc2lvbnM6OnNSR0I+LCAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkKTsKKyNpZiBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKyAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JH
UkFfRVhULCAgICAgICBmYWxzZSwgIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IGZhbHNlLCBSZXF1aXJlRVM8MiwgMD4sICAgQWx3YXlzU3VwcG9ydGVkLCBSZXF1aXJlRVM8Miwg
MD4sIE5ldmVyU3VwcG9ydGVkKTsKKyNlbHNlCiAgICAgQWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9C
R1JBX0VYVCwgICAgICAgZmFsc2UsICA4LCAgOCwgIDgsICA4LCAwLCBHTF9CR1JBX0VYVCwgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
LCBmYWxzZSwgUmVxdWlyZUV4dDwmRXh0ZW5zaW9uczo6dGV4dHVyZUZvcm1hdEJHUkE4ODg4Piwg
ICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFeHQ8JkV4dGVuc2lvbnM6OnRleHR1cmVGb3JtYXRC
R1JBODg4OD4sIE5ldmVyU3VwcG9ydGVkKTsKKyNlbmRpZgogCiAgICAgLy8gVW5zaXplZCBpbnRl
Z2VyIGZvcm1hdHMKICAgICAvLyAgICAgICAgICAgICAgICAgfEludGVybmFsIGZvcm1hdCB8c2l6
ZWQgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlIHwgU1JHQiB8IFRleHR1cmUgc3VwcG9ydGVk
IHwgRmlsdGVyYWJsZSAgICB8IFRleHR1cmUgYXR0YWNobWVudCB8IFJlbmRlcmJ1ZmZlciB8CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0RldmljZUNHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2wvY2dsL0RldmljZUNHTC5jcHAKaW5kZXggOTMzY2ZmNzQzMTE4YjFhYmJl
ZDRjYTVmNjEzYzcxZjBmNmIyMzZjYS4uYjgxYTJlODk4MDFmMmMyZWFjNWJjMmQwNThhMWU2MmY3
MTgzM2UyNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsL2NnbC9EZXZpY2VDR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvRGV2aWNlQ0dMLmNwcApAQCAtNiw5ICs2
LDkgQEAKIAogLy8gRGV2aWNlQ0dMLmNwcDogQ0dMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6RGV2
aWNlCiAKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25h
bHMuaD4KLSNpZiBUQVJHRVRfT1NfT1NYCisjaW1wb3J0ICJjb21tb24vcGxhdGZvcm0uaCIKKwor
I2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiAKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9nbC9jZ2wvRGV2aWNlQ0dMLmgiCiAKQEAgLTU5LDUgKzU5LDQgQEAgdm9pZCBEZXZp
Y2VDR0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyhlZ2w6OkRldmljZUV4dGVuc2lvbnMgKm91dEV4dGVu
c2lvbnMpIGNvbnN0CiAKIH0gIC8vIG5hbWVzcGFjZSByeAogCi0jZW5kaWYgIC8vIFRBUkdFVF9P
U19PU1gKLSNlbmRpZiAgLy8gX19BUFBMRV9fCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fTUFDT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KaW5kZXggZjVm
OTMyYmYwZTZlMjc2MzNhNmE1NzY0MzE5OTY1NDU3YTU0OWYwZS4uNjNlMTY2YjdjNDkzMmI1ODk5
OGExYjhmZjc2YzBlNWE4MTVkYmMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNH
TC5tbQpAQCAtNiw5ICs2LDkgQEAKIAogLy8gRGlzcGxheUNHTC5jcHA6IENHTCBpbXBsZW1lbnRh
dGlvbiBvZiBlZ2w6OkRpc3BsYXkKIAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2luY2x1ZGUg
PFRhcmdldENvbmRpdGlvbmFscy5oPgotI2lmIFRBUkdFVF9PU19PU1gKKyNpbXBvcnQgImNvbW1v
bi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKIAogI2lt
cG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wuaCIKIApAQCAtNDQ2LDUg
KzQ0Niw0IEBAIHZvaWQgRGlzcGxheUNHTDo6cG9wdWxhdGVGZWF0dXJlTGlzdChhbmdsZTo6RmVh
dHVyZUxpc3QgKmZlYXR1cmVzKQogfQogfQogCi0jZW5kaWYgIC8vIFRBUkdFVF9PU19PU1gKLSNl
bmRpZiAgLy8gX19BUFBMRV9fCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvY2dsL0lPU3VyZmFjZVN1cmZhY2VDR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9JT1N1cmZhY2VTdXJmYWNlQ0dMLmNw
cAppbmRleCA0NjM2OTAzYjUyMjYyMjJkZmFmNTRlNWI0YmY3NmU0ZWEzZDRhYjU5Li4xMDZkZmY3
ZGZmMzJkMDc4NGU4MzhhNzIxNmY0NDlmOTkzYzExYWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0lPU3VyZmFjZVN1cmZh
Y2VDR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvSU9TdXJmYWNlU3VyZmFjZUNHTC5jcHAKQEAgLTcsOSArNyw5IEBACiAvLyBQ
QnVmZmVyU3VyZmFjZUNHTC5jcHA6IGFuIGltcGxlbWVudGF0aW9uIG9mIFBCdWZmZXJzIGNyZWF0
ZWQgZnJvbSBJT1N1cmZhY2VzIHVzaW5nCiAvLyAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9B
TkdMRV9pb3N1cmZhY2VfY2xpZW50X2J1ZmZlcgogCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0j
aW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+Ci0jaWYgVEFSR0VUX09TX09TWAorI2ltcG9y
dCAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09T
KQogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0lPU3VyZmFjZVN1cmZhY2VD
R0wuaCIKIApAQCAtNTAsOCArNTAsOCBAQCBzdGF0aWMgY29uc3QgSU9TdXJmYWNlRm9ybWF0SW5m
byBrSU9TdXJmYWNlRm9ybWF0c1tdID0gewogICAgIHtHTF9SRUQsICAgICAgR0xfVU5TSUdORURf
QllURSwgIDEsIEdMX1JFRCwgIEdMX1JFRCwgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgIH0s
CiAgICAge0dMX1IxNlVJLCAgICBHTF9VTlNJR05FRF9TSE9SVCwgMiwgR0xfUkVELCAgR0xfUkVE
LCAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgfSwKICAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAyLCBHTF9SRywgICBHTF9SRywgICBHTF9VTlNJR05FRF9CWVRFICAgICAg
ICAgICB9LAotICAgIHtHTF9SR0IsICAgICAgR0xfVU5TSUdORURfQllURSwgIDQsIEdMX0JHUkEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVn0sCi0gICAge0dMX0JHUkFfRVhU
LCBHTF9VTlNJR05FRF9CWVRFLCAgNCwgR0xfQkdSQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfSU5U
XzhfOF84XzhfUkVWfSwKKyAgICB7R0xfUkdCLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICA0LCBH
TF9SR0JBLCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVZ9LAorICAgIHtHTF9C
R1JBX0VYVCwgR0xfVU5TSUdORURfQllURSwgIDQsIEdMX1JHQkEsIEdMX0JHUkEsIEdMX1VOU0lH
TkVEX0lOVF84XzhfOF84X1JFVn0sCiAgICAge0dMX1JHQkEsICAgICBHTF9IQUxGX0ZMT0FULCAg
ICAgOCwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgfSwKIH07
CiAvLyBjbGFuZy1mb3JtYXQgb24KQEAgLTE1OSw4ICsxNTksOCBAQCBlZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VDR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICBzdGF0ZU1hbmFnZXItPmJpbmRUZXh0dXJlKGdsOjpUZXh0dXJlVHlwZTo6UmVjdGFuZ2xl
LCB0ZXh0dXJlSUQpOwogCiAgICAgY29uc3QgYXV0byAmZm9ybWF0ID0ga0lPU3VyZmFjZUZvcm1h
dHNbbUZvcm1hdEluZGV4XTsKLSAgICBDR0xFcnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJm
YWNlMkQobUNHTENvbnRleHQsIEdMX1RFWFRVUkVfUkVDVEFOR0xFLCBmb3JtYXQubmF0aXZlRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgs
IG1IZWlnaHQsIGZvcm1hdC5uYXRpdmVJbnRlcm5hbEZvcm1hdCwKKyAgICBDR0xFcnJvciBlcnJv
ciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQobUNHTENvbnRleHQsIEdMX1RFWFRVUkVfUkVDVEFO
R0xFLCBmb3JtYXQubmF0aXZlSW50ZXJuYWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgZm9ybWF0Lm5hdGl2ZUZvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0Lm5h
dGl2ZVR5cGUsIG1JT1N1cmZhY2UsIG1QbGFuZSk7CiAKICAgICBpZiAoZXJyb3IgIT0ga0NHTE5v
RXJyb3IpCkBAIC0zMzUsNSArMzM1LDQgQEAgYm9vbCBJT1N1cmZhY2VTdXJmYWNlQ0dMOjpoYXNF
bXVsYXRlZEFscGhhQ2hhbm5lbCgpIGNvbnN0CiAKIH0gIC8vIG5hbWVzcGFjZSByeAogCi0jZW5k
aWYgIC8vIFRBUkdFVF9PU19PU1gKLSNlbmRpZiAgLy8gX19BUFBMRV9fCisjZW5kaWYgIC8vIGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1BidWZmZXJTdXJmYWNlQ0dMLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
UGJ1ZmZlclN1cmZhY2VDR0wuY3BwCmluZGV4IGNkNTlhN2QyYTY1ZDMyNzgzYTA2ZmJhNGM2MDJm
ODcxYWNjOWQ5Y2UuLjQwOTQ0NDJjODhiYTlmMzVhMTA4ZTFlODhlMzZmZDM2YjI4ZTgyNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvUGJ1ZmZlclN1cmZhY2VDR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvUGJ1ZmZlclN1cmZhY2VDR0wuY3BwCkBAIC03
LDkgKzcsOSBAQAogLy8gUEJ1ZmZlclN1cmZhY2VDR0wuY3BwOiBhbiBpbXBsZW1lbnRhdGlvbiBv
ZiBlZ2w6OlN1cmZhY2UgZm9yIFBCdWZmZXJzIGZvciB0aGUgQ0xHIGJhY2tlbmQsCiAvLyAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdXNpbmcgcmVuZGVyYnVmZmVy
cwogCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxz
Lmg+Ci0jaWYgVEFSR0VUX09TX09TWAorI2ltcG9ydCAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNp
ZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvZ2wvY2dsL1BidWZmZXJTdXJmYWNlQ0dMLmgiCiAKQEAgLTE0Niw1ICsxNDYsNCBAQCBG
cmFtZWJ1ZmZlckltcGwgKlBidWZmZXJTdXJmYWNlQ0dMOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZm
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKgogCiB9ICAvLyBuYW1lc3BhY2UgcngKIAotI2VuZGlmICAv
LyBUQVJHRVRfT1NfT1NYCi0jZW5kaWYgIC8vIF9fQVBQTEVfXworI2VuZGlmICAvLyBkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ09TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9SZW5kZXJlckNHTC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1JlbmRlcmVyQ0dM
LmNwcAppbmRleCAxNWQ5NzM3NzNmMDU0YmUwZTMxZjY3NjBlMjViMDYyMmEyMWMzNTU0Li5hYzRi
OTIxYWM3Yjg3ZDdhYTM2NGY5YzY4ZDM5YTgxYmM5NTVkZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1JlbmRlcmVyQ0dM
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL1JlbmRlcmVyQ0dMLmNwcApAQCAtNiw5ICs2LDkgQEAKIAogLy8gUmVuZGVyZXJDR0wu
bW06IEltcGxlbWVudHMgdGhlIGNsYXNzIG1ldGhvZHMgZm9yIFJlbmRlcmVyQ0dMLgogCi0jaWYg
ZGVmaW5lZChfX0FQUExFX18pCi0jaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+Ci0jaWYg
VEFSR0VUX09TX09TWAorI2ltcG9ydCAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ09TKQogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL0Rpc3BsYXlDR0wuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvUmVu
ZGVyZXJDR0wuaCIKQEAgLTMxLDUgKzMxLDQgQEAgV29ya2VyQ29udGV4dCAqUmVuZGVyZXJDR0w6
OmNyZWF0ZVdvcmtlckNvbnRleHQoc3RkOjpzdHJpbmcgKmluZm9Mb2cpCiAKIH0gIC8vIG5hbWVz
cGFjZSByeAogCi0jZW5kaWYgIC8vIFRBUkdFVF9PU19PU1gKLSNlbmRpZiAgLy8gX19BUFBMRV9f
CisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1dpbmRv
d1N1cmZhY2VDR0wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvY2dsL1dpbmRvd1N1cmZhY2VDR0wubW0KaW5kZXggYzE4MTI2MWQyZmFiMDc3MTVk
ODI0ZjgwZjUzOWQ2Y2YxMmE3YTZiZi4uNGMwODRkODA4NDhmZmI0NzRlNzMyYjczNDdjYjAyMDA5
NTg0MjM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJmYWNlQ0dMLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvV2luZG93U3VyZmFjZUNHTC5t
bQpAQCAtNiw5ICs2LDkgQEAKIAogLy8gV2luZG93U3VyZmFjZUNHTC5jcHA6IENHTCBpbXBsZW1l
bnRhdGlvbiBvZiBlZ2w6OlN1cmZhY2UgZm9yIHdpbmRvd3MKIAotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgotI2lmIFRBUkdFVF9PU19PU1gK
KyNpbXBvcnQgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNPUykKIAogI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1dpbmRvd1N1cmZh
Y2VDR0wuaCIKIApAQCAtMzM4LDUgKzMzOCw0IEBAIEZyYW1lYnVmZmVySW1wbCAqV2luZG93U3Vy
ZmFjZUNHTDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjCiAK
IH0gIC8vIG5hbWVzcGFjZSByeAogCi0jZW5kaWYgIC8vIFRBUkdFVF9PU19PU1gKLSNlbmRpZiAg
Ly8gX19BUFBMRV9fCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9Db250ZXh0RUFHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM4ZWUy
ZTM2ZDAzYzk5NDRmNDc1YWY3ODc0YzhhOTM5ZGVlYmFkOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRl
eHRFQUdMLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gQ29udGV4dEVBR0w6CisvLyAgIGlPUy1zcGVjaWZpYyBzdWJj
bGFzcyBvZiBDb250ZXh0R0wuCisvLworCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9Db250ZXh0RUFHTC5oIgorCisjaW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0Rpc3BsYXlFQUdMLmgiCisKK25hbWVzcGFjZSByeAoreworCitDb250ZXh0RUFHTDo6
Q29udGV4dEVBR0woY29uc3QgZ2w6OlN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkVycm9yU2V0ICplcnJvclNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzaGFyZWRfcHRyPFJlbmRlcmVyR0w+ICZyZW5kZXJlcikKKyAgICA6IENvbnRleHRHTChz
dGF0ZSwgZXJyb3JTZXQsIHJlbmRlcmVyKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcngKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0NvbnRleHRFQUdMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZjY5ZDg0MWRh
MzNmYjhjZjE4ZmY5ZTFjMTRmZDVhNDdhNzcxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFH
TC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworLy8gQ29udGV4dEVBR0w6CisvLyAgIGlPUy1zcGVjaWZpYyBzdWJjbGFzcyBvZiBD
b250ZXh0R0wuCisvLworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfQ09OVEVY
VEVBR0xfSF8KKyNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9DT05URVhURUFHTF9I
XworCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvQ29udGV4dEdMLmgiCisjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvUmVuZGVyZXJHTC5oIgorCituYW1lc3BhY2UgcngKK3sK
KworY2xhc3MgQ29udGV4dEVBR0wgOiBwdWJsaWMgQ29udGV4dEdMCit7CisgIHB1YmxpYzoKKyAg
ICBDb250ZXh0RUFHTChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgZ2w6
OkVycm9yU2V0ICplcnJvclNldCwKKyAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0
cjxSZW5kZXJlckdMPiAmcmVuZGVyZXIpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNl
bmRpZiAgLy8gTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9DT05URVhURUFHTF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGV2aWNlRUFHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2wvZWFnbC9EZXZpY2VFQUdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTc2YjE0YzBjNmMx
YjIwNjRjNDQ2OGUzYjQ0NDM3OGE0OTg5NGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGV2aWNlRUFHTC5j
cHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERldmljZUVBR0wuY3BwOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6
RGV2aWNlCisKKyNpbXBvcnQgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdM
RV9QTEFURk9STV9JT1MpCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rl
dmljZUVBR0wuaCIKKworI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxh
eUVBR0wuaCIKKworI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKworbmFtZXNwYWNlIHJ4Cit7CisK
K0RldmljZUVBR0w6OkRldmljZUVBR0woKSB7fQorCitEZXZpY2VFQUdMOjp+RGV2aWNlRUFHTCgp
IHt9CisKK2VnbDo6RXJyb3IgRGV2aWNlRUFHTDo6aW5pdGlhbGl6ZSgpCit7CisgICAgcmV0dXJu
IGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIERldmljZUVBR0w6OmdldEF0dHJpYnV0
ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKipv
dXRWYWx1ZSkKK3sKKyAgICBEaXNwbGF5RUFHTCAqZGlzcGxheUltcGwgPSBHZXRJbXBsQXM8RGlz
cGxheUVBR0w+KGRpc3BsYXkpOworCisgICAgc3dpdGNoIChhdHRyaWJ1dGUpCisgICAgeworICAg
ICAgICBjYXNlIEVHTF9FQUdMX0NPTlRFWFRfQU5HTEU6CisgICAgICAgICAgICAqb3V0VmFsdWUg
PSBkaXNwbGF5SW1wbC0+Z2V0RUFHTENvbnRleHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7
CisgICAgfQorCisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitFR0xpbnQgRGV2aWNl
RUFHTDo6Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRGV2aWNlRUFHTDo6
Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6RGV2aWNlRXh0ZW5zaW9ucyAqb3V0RXh0ZW5zaW9ucykg
Y29uc3QKK3sKKyAgICBvdXRFeHRlbnNpb25zLT5kZXZpY2VFQUdMID0gdHJ1ZTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9EZXZpY2VFQUdMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EZXZpY2VFQUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU0YjA4NmQw
MDZmNjkyNTk0ODA1MjBhMWI0N2RhYWRmYmFmMjkxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVB
R0wuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRGV2aWNlRUFHTC5oOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6
RGV2aWNlCisKKyNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9ERVZJQ0VFQUdMX0hf
CisjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfREVWSUNFRUFHTF9IXworCisjaW5j
bHVkZSAibGliQU5HTEUvRGV2aWNlLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvRGV2
aWNlSW1wbC5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIERldmljZUVBR0wgOiBwdWJsaWMg
RGV2aWNlSW1wbAoreworICBwdWJsaWM6CisgICAgRGV2aWNlRUFHTCgpOworICAgIH5EZXZpY2VF
QUdMKCkgb3ZlcnJpZGU7CisKKyAgICBlZ2w6OkVycm9yIGluaXRpYWxpemUoKSBvdmVycmlkZTsK
KyAgICBlZ2w6OkVycm9yIGdldEF0dHJpYnV0ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3V0VmFsdWUpIG92ZXJyaWRlOworICAgIEVHTGlu
dCBnZXRUeXBlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZW5lcmF0ZUV4dGVuc2lvbnMoZWdsOjpE
ZXZpY2VFeHRlbnNpb25zICpvdXRFeHRlbnNpb25zKSBjb25zdCBvdmVycmlkZTsKK307CisKK30g
IC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xf
REVWSUNFRUFHTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2ZmOTk1Y2M5MDk2NDVhNTFhMjc1NTgwMTAzMTFjMTdhMGY0ZWNiNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0Rpc3BsYXlFQUdMLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBEaXNwbGF5RUFHTC5oOiBFQUdMIGltcGxl
bWVudGF0aW9uIG9mIGVnbDo6RGlzcGxheQorCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dM
X0VBR0xfRElTUExBWUVBR0xfSF8KKyNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9E
SVNQTEFZRUFHTF9IXworCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvRGlzcGxheUdM
LmgiCisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIEVBR0xDb250ZXh0OwordHlwZWRlZiBFQUdM
Q29udGV4dCogRUFHTENvbnRleHRPYmo7CisjZWxzZQordHlwZWRlZiB2b2lkKiBFQUdMQ29udGV4
dE9iajsKKyNlbmRpZgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgV29ya2VyQ29udGV4dDsK
KworY2xhc3MgRGlzcGxheUVBR0wgOiBwdWJsaWMgRGlzcGxheUdMCit7CisgIHB1YmxpYzoKKyAg
ICBEaXNwbGF5RUFHTChjb25zdCBlZ2w6OkRpc3BsYXlTdGF0ZSAmc3RhdGUpOworICAgIH5EaXNw
bGF5RUFHTCgpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGVnbDo6RGlz
cGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsK
KworICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xO
YXRpdmVXaW5kb3dUeXBlIHdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgb3ZlcnJpZGU7CisgICAgU3Vy
ZmFjZUltcGwgKmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpB
dHRyaWJ1dGVNYXAgJmF0dHJpYnMpIG92ZXJyaWRlOworICAgIFN1cmZhY2VJbXBsICpjcmVhdGVQ
YnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGVudW0gYnVm
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
Q2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIG92ZXJy
aWRlOworICAgIFN1cmZhY2VJbXBsICpjcmVhdGVQaXhtYXBTdXJmYWNlKGNvbnN0IGVnbDo6U3Vy
ZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
YXRpdmVQaXhtYXBUeXBlIG5hdGl2ZVBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgb3ZlcnJpZGU7CisK
KyAgICBDb250ZXh0SW1wbCAqY3JlYXRlQ29udGV4dChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpFcnJvclNldCAqZXJyb3JTZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3Vy
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbnRleHQg
KnNoYXJlQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6
OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgb3ZlcnJpZGU7CisKKyAgICBlZ2w6OkNvbmZpZ1NldCBn
ZW5lcmF0ZUNvbmZpZ3MoKSBvdmVycmlkZTsKKworICAgIGJvb2wgdGVzdERldmljZUxvc3QoKSBv
dmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlz
cGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzVmFsaWROYXRpdmVXaW5kb3co
RUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0IG92ZXJyaWRlOworICAgIGVnbDo6RXJy
b3IgdmFsaWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50
QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpB
dHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRGV2aWNlSW1wbCAq
Y3JlYXRlRGV2aWNlKCkgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnN0cmluZyBnZXRWZW5kb3JTdHJp
bmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3Igd2FpdENsaWVudChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciB3YWl0TmF0aXZl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKSBvdmVycmlkZTsKKwor
ICAgIGdsOjpWZXJzaW9uIGdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgRUFHTENvbnRleHRPYmogZ2V0RUFHTENvbnRleHQoKSBjb25zdDsKKworICAgIFdv
cmtlckNvbnRleHQgKmNyZWF0ZVdvcmtlckNvbnRleHQoc3RkOjpzdHJpbmcgKmluZm9Mb2cpOwor
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbnRlbmRGZWF0dXJlcyhhbmdsZTo6RnJvbnRlbmRGZWF0
dXJlcyAqZmVhdHVyZXMpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwb3B1bGF0ZUZlYXR1
cmVMaXN0KGFuZ2xlOjpGZWF0dXJlTGlzdCAqZmVhdHVyZXMpIG92ZXJyaWRlOworCisgIHByaXZh
dGU6CisgICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudFN1cmZhY2VsZXNzKGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZTsKKworICAgIHZvaWQgZ2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6RGlz
cGxheUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
Z2VuZXJhdGVDYXBzKGVnbDo6Q2FwcyAqb3V0Q2FwcykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBz
dGQ6OnNoYXJlZF9wdHI8UmVuZGVyZXJHTD4gbVJlbmRlcmVyOworCisgICAgZWdsOjpEaXNwbGF5
ICptRUdMRGlzcGxheTsKKyAgICBFQUdMQ29udGV4dE9iaiBtQ29udGV4dDsKK307CisKK30gIC8v
IG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfRElT
UExBWUVBR0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTUwN2FhYzQ4ZjNkMDdjZWM4ZDljNzQ0ZWY3Yzk3NWIzNzczNzBkNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0Rpc3BsYXlFQUdMLm1tCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRGlzcGxheUVBR0wuY3BwOiBFQUdMIGlt
cGxlbWVudGF0aW9uIG9mIGVnbDo6RGlzcGxheQorCisjaW1wb3J0ICJjb21tb24vcGxhdGZvcm0u
aCIKKworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQorCisjaW1wb3J0ICJsaWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgiCisKKyNpbXBvcnQgImNvbW1vbi9kZWJ1
Zy5oIgorI2ltcG9ydCAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisjaW1wb3J0ICJsaWJB
TkdMRS9EaXNwbGF5LmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRl
eHRFQUdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wu
aCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVB
R0wuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VF
QUdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5o
IgorI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9XaW5kb3dTdXJmYWNlRUFHTC5o
IgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPE9wZW5HTEVT
L0VBR0wuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8ZGxm
Y24uaD4KKworI2RlZmluZSBHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04KKworI2lmICFkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisKK25hbWVzcGFjZQoreworCitjb25zdCBj
aGFyICprT3BlbkdMRVNEeWxpYk5hbWUgPQorICAgICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9PcGVuR0xFUy5mcmFtZXdvcmsvT3BlbkdMRVMiOworCit9CisKKyNlbmRpZgorCituYW1lc3Bh
Y2UgcngKK3sKKworY2xhc3MgRnVuY3Rpb25zR0xFQUdMIDogcHVibGljIEZ1bmN0aW9uc0dMCit7
CisgIHB1YmxpYzoKKyAgICBGdW5jdGlvbnNHTEVBR0wodm9pZCAqZHlsaWJIYW5kbGUpIDogbUR5
bGliSGFuZGxlKGR5bGliSGFuZGxlKSB7fQorCisgICAgfkZ1bmN0aW9uc0dMRUFHTCgpIG92ZXJy
aWRlIHsgZGxjbG9zZShtRHlsaWJIYW5kbGUpOyB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkICps
b2FkUHJvY0FkZHJlc3MoY29uc3Qgc3RkOjpzdHJpbmcgJmZ1bmN0aW9uKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRsc3ltKG1EeWxpYkhhbmRsZSwgZnVuY3Rpb24uY19z
dHIoKSk7CisgICAgfQorCisgICAgdm9pZCAqbUR5bGliSGFuZGxlOworfTsKKworRGlzcGxheUVB
R0w6OkRpc3BsYXlFQUdMKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKKyAgICA6IERp
c3BsYXlHTChzdGF0ZSksCisgICAgICBtRUdMRGlzcGxheShudWxscHRyKSwKKyAgICAgIG1Db250
ZXh0KG51bGxwdHIpCit7fQorCitEaXNwbGF5RUFHTDo6fkRpc3BsYXlFQUdMKCkge30KKworZWds
OjpFcnJvciBEaXNwbGF5RUFHTDo6aW5pdGlhbGl6ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCit7
CisgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OworCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9JT1NfU0lNVUxBVE9SKQorICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwg
IkFOR0xFIHdpdGggRUFHTCBub3Qgc3VwcG9ydGVkIG9uIGlPUyBTaW11bGF0b3IgZHVlIHRvIGxh
Y2sgb2YgSU9TdXJmYWNlIHN1cHBvcnQuIjsKKyNlbHNlCisgICAgYW5nbGU6OlN5c3RlbUluZm8g
aW5mbzsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBB
TkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CisKKyAgICBtQ29udGV4dCA9IFtbRUFHTENvbnRl
eHQgYWxsb2NdIGluaXRXaXRoQVBJOmtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMzXTsKKyAgICBp
ZiAobUNvbnRleHQgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5v
dEluaXRpYWxpemVkKCkgPDwgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIEVBR0wgY29udGV4dC4iOwor
ICAgIH0KKyAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bUNvbnRleHRdOworCisg
ICAgLy8gVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBnZXRQcm9jQWRkcmVzcyBpbiBFQUdMIHNvIHdl
IG9wZW4gdGhlIGR5bGliIGRpcmVjdGx5CisgICAgdm9pZCAqaGFuZGxlID0gZGxvcGVuKGtPcGVu
R0xFU0R5bGliTmFtZSwgUlRMRF9OT1cpOworICAgIGlmICghaGFuZGxlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVnbDo6RWdsTm90SW5pdGlhbGl6ZWQoKSA8PCAiQ291bGQgbm90IG9wZW4gdGhl
IE9wZW5HTEVTIEZyYW1ld29yay4iOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbnNHTD4gZnVuY3Rpb25zR0wobmV3IEZ1bmN0aW9uc0dMRUFHTChoYW5kbGUpKTsKKyAgICBm
dW5jdGlvbnNHTC0+aW5pdGlhbGl6ZShkaXNwbGF5LT5nZXRBdHRyaWJ1dGVNYXAoKSk7CisKKyAg
ICBtUmVuZGVyZXIucmVzZXQobmV3IFJlbmRlcmVyRUFHTChzdGQ6Om1vdmUoZnVuY3Rpb25zR0wp
LCBkaXNwbGF5LT5nZXRBdHRyaWJ1dGVNYXAoKSwgdGhpcykpOworCisgICAgY29uc3QgZ2w6OlZl
cnNpb24gJm1heFZlcnNpb24gPSBtUmVuZGVyZXItPmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigp
OworICAgIGlmIChtYXhWZXJzaW9uIDwgZ2w6OlZlcnNpb24oMiwgMCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJPcGVuR0wgRVMgMi4wIGlzIG5v
dCBzdXBwb3J0YWJsZS4iOworICAgIH0KKworICAgIHJldHVybiBEaXNwbGF5R0w6OmluaXRpYWxp
emUoZGlzcGxheSk7CisjZW5kaWYKK30KKwordm9pZCBEaXNwbGF5RUFHTDo6dGVybWluYXRlKCkK
K3sKKyAgICBEaXNwbGF5R0w6OnRlcm1pbmF0ZSgpOworCisgICAgbVJlbmRlcmVyLnJlc2V0KCk7
CisgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBbRUFHTENvbnRl
eHQgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKyAgICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwor
ICAgICAgICBtQ29udGV4dCA9IG51bGxwdHI7CisgICAgfQorfQorCitTdXJmYWNlSW1wbCAqRGlz
cGxheUVBR0w6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMTmF0
aXZlV2luZG93VHlwZSB3aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKK3sKKyAgICByZXR1
cm4gbmV3IFdpbmRvd1N1cmZhY2VFQUdMKHN0YXRlLCBtUmVuZGVyZXIuZ2V0KCksIHdpbmRvdywg
bUNvbnRleHQpOworfQorCitTdXJmYWNlSW1wbCAqRGlzcGxheUVBR0w6OmNyZWF0ZVBidWZmZXJT
dXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0
cmlicykKK3sKKyAgICBFR0xpbnQgd2lkdGggID0gc3RhdGljX2Nhc3Q8RUdMaW50PihhdHRyaWJz
LmdldChFR0xfV0lEVEgsIDApKTsKKyAgICBFR0xpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RUdM
aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hULCAwKSk7CisgICAgcmV0dXJuIG5ldyBQYnVmZmVy
U3VyZmFjZUVBR0woc3RhdGUsIG1SZW5kZXJlci5nZXQoKSwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K1N1cmZhY2VJbXBsICpEaXNwbGF5RUFHTDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIo
Y29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGVudW0gYnVmdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRC
dWZmZXIgY2xpZW50QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorewor
ICAgIEFTU0VSVChidWZ0eXBlID09IEVHTF9JT1NVUkZBQ0VfQU5HTEUpOworICAgIHJldHVybiBu
ZXcgSU9TdXJmYWNlU3VyZmFjZUVBR0woc3RhdGUsIG1Db250ZXh0LCBjbGllbnRCdWZmZXIsIGF0
dHJpYnMpOworfQorCitTdXJmYWNlSW1wbCAqRGlzcGxheUVBR0w6OmNyZWF0ZVBpeG1hcFN1cmZh
Y2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlUGl4bWFwVHlwZSBuYXRpdmVQaXhtYXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicykKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0NvbnRleHRJbXBsICpEaXNwbGF5RUFHTDo6Y3JlYXRlQ29udGV4dChj
b25zdCBnbDo6U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkVycm9yU2V0ICplcnJvclNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6
QXR0cmlidXRlTWFwICZhdHRyaWJzKQoreworICAgIHJldHVybiBuZXcgQ29udGV4dEVBR0woc3Rh
dGUsIGVycm9yU2V0LCBtUmVuZGVyZXIpOworfQorCitEZXZpY2VJbXBsICpEaXNwbGF5RUFHTDo6
Y3JlYXRlRGV2aWNlKCkKK3sKKyAgICByZXR1cm4gbmV3IERldmljZUVBR0woKTsKK30KKworZWds
OjpDb25maWdTZXQgRGlzcGxheUVBR0w6OmdlbmVyYXRlQ29uZmlncygpCit7CisgICAgLy8gVE9E
Tyhjd2FsbGV6KTogZ2VuZXJhdGUgbW9yZSBjb25maWcgcGVybXV0YXRpb25zCisgICAgZWdsOjpD
b25maWdTZXQgY29uZmlnczsKKworICAgIGNvbnN0IGdsOjpWZXJzaW9uICZtYXhWZXJzaW9uID0g
Z2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9uKCk7CisgICAgQVNTRVJUKG1heFZlcnNpb24gPj0gZ2w6
OlZlcnNpb24oMiwgMCkpOworICAgIGJvb2wgc3VwcG9ydHNFUzMgPSBtYXhWZXJzaW9uID49IGds
OjpWZXJzaW9uKDMsIDApOworCisgICAgZWdsOjpDb25maWcgY29uZmlnOworCisgICAgLy8gTmF0
aXZlIHN0dWZmCisgICAgY29uZmlnLm5hdGl2ZVZpc3VhbElEICAgPSAwOworICAgIGNvbmZpZy5u
YXRpdmVWaXN1YWxUeXBlID0gMDsKKyAgICBjb25maWcubmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9U
UlVFOworCisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29uZmlnLnJlZFNpemUgICAgID0gODsK
KyAgICBjb25maWcuZ3JlZW5TaXplICAgPSA4OworICAgIGNvbmZpZy5ibHVlU2l6ZSAgICA9IDg7
CisgICAgY29uZmlnLmFscGhhU2l6ZSAgID0gODsKKyAgICBjb25maWcuZGVwdGhTaXplICAgPSAy
NDsKKyAgICBjb25maWcuc3RlbmNpbFNpemUgPSA4OworCisgICAgY29uZmlnLmNvbG9yQnVmZmVy
VHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIGNvbmZpZy5sdW1pbmFuY2VTaXplICAgPSAwOwor
ICAgIGNvbmZpZy5hbHBoYU1hc2tTaXplICAgPSAwOworCisgICAgY29uZmlnLmJ1ZmZlclNpemUg
PSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUgKyBj
b25maWcuYWxwaGFTaXplOworCisgICAgY29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05F
OworCisgICAgLy8gUGJ1ZmZlcgorICAgIGNvbmZpZy5tYXhQQnVmZmVyV2lkdGggID0gNDA5NjsK
KyAgICBjb25maWcubWF4UEJ1ZmZlckhlaWdodCA9IDQwOTY7CisgICAgY29uZmlnLm1heFBCdWZm
ZXJQaXhlbHMgPSA0MDk2ICogNDA5NjsKKworICAgIC8vIENhdmVhdAorICAgIGNvbmZpZy5jb25m
aWdDYXZlYXQgPSBFR0xfTk9ORTsKKworICAgIC8vIE1pc2MKKyAgICBjb25maWcuc2FtcGxlQnVm
ZmVycyAgICAgPSAwOworICAgIGNvbmZpZy5zYW1wbGVzICAgICAgICAgICA9IDA7CisgICAgY29u
ZmlnLmxldmVsICAgICAgICAgICAgID0gMDsKKyAgICBjb25maWcuYmluZFRvVGV4dHVyZVJHQiAg
PSBFR0xfRkFMU0U7CisgICAgY29uZmlnLmJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0ZBTFNFOwor
CisgICAgY29uZmlnLnN1cmZhY2VUeXBlID0gRUdMX1dJTkRPV19CSVQgfCBFR0xfUEJVRkZFUl9C
SVQ7CisKKyAgICBjb25maWcubWluU3dhcEludGVydmFsID0gMTsKKyAgICBjb25maWcubWF4U3dh
cEludGVydmFsID0gMTsKKworICAgIGNvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBHTF9SR0JB
ODsKKyAgICBjb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMODsK
KworICAgIGNvbmZpZy5jb25mb3JtYW50ICAgICA9IEVHTF9PUEVOR0xfRVMyX0JJVCB8IChzdXBw
b3J0c0VTMyA/IEVHTF9PUEVOR0xfRVMzX0JJVF9LSFIgOiAwKTsKKyAgICBjb25maWcucmVuZGVy
YWJsZVR5cGUgPSBjb25maWcuY29uZm9ybWFudDsKKworICAgIGNvbmZpZy5tYXRjaE5hdGl2ZVBp
eG1hcCA9IEVHTF9OT05FOworCisgICAgY29uZmlnLmNvbG9yQ29tcG9uZW50VHlwZSA9IEVHTF9D
T0xPUl9DT01QT05FTlRfVFlQRV9GSVhFRF9FWFQ7CisKKyAgICBjb25maWdzLmFkZChjb25maWcp
OworICAgIHJldHVybiBjb25maWdzOworfQorCitib29sIERpc3BsYXlFQUdMOjp0ZXN0RGV2aWNl
TG9zdCgpCit7CisgICAgLy8gVE9ETyhjd2FsbGV6KSBpbnZlc3RpZ2F0ZSBpbXBsZW1lbnRpbmcg
dGhpcworICAgIHJldHVybiBmYWxzZTsKK30KKworZWdsOjpFcnJvciBEaXNwbGF5RUFHTDo6cmVz
dG9yZUxvc3REZXZpY2UoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWREaXNwbGF5KCk7Cit9CisKK2Jvb2wg
RGlzcGxheUVBR0w6OmlzVmFsaWROYXRpdmVXaW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5k
b3cpIGNvbnN0Cit7CisgICAgTlNPYmplY3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09i
amVjdCAqPih3aW5kb3cpOworICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXll
ciBjbGFzc11dOworfQorCitlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjp2YWxpZGF0ZUNsaWVudEJ1
ZmZlcihjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBl
Z2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICBBU1NFUlQoYnVmdHlwZSA9
PSBFR0xfSU9TVVJGQUNFX0FOR0xFKTsKKworICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZUVBR0w6
OnZhbGlkYXRlQXR0cmlidXRlcyhjbGllbnRCdWZmZXIsIGF0dHJpYnMpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVn
bDo6Tm9FcnJvcigpOworfQorCitzdGQ6OnN0cmluZyBEaXNwbGF5RUFHTDo6Z2V0VmVuZG9yU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICAvLyBUT0RPKGN3YWxsZXopIGZpbmQgYSB1c2VmdWwgdmVuZG9y
IHN0cmluZworICAgIHJldHVybiAiIjsKK30KKworRUFHTENvbnRleHRPYmogRGlzcGxheUVBR0w6
OmdldEVBR0xDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbnRleHQ7Cit9CisKK3Zv
aWQgRGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyhlZ2w6OkRpc3BsYXlFeHRlbnNpb25z
ICpvdXRFeHRlbnNpb25zKSBjb25zdAoreworICAgIG91dEV4dGVuc2lvbnMtPmlvc3VyZmFjZUNs
aWVudEJ1ZmZlciA9IHRydWU7CisgICAgb3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0
ICAgID0gdHJ1ZTsKKyAgICBvdXRFeHRlbnNpb25zLT5kZXZpY2VRdWVyeSAgICAgICAgICAgPSB0
cnVlOworCisgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBi
ZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJl
R3JvdXAgPSB0cnVlOworCisgICAgb3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFs
c2U7CisKKyAgICBEaXNwbGF5R0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyhvdXRFeHRlbnNpb25zKTsK
K30KKwordm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVDYXBzKGVnbDo6Q2FwcyAqb3V0Q2Fwcykg
Y29uc3QKK3sKKyAgICBvdXRDYXBzLT50ZXh0dXJlTlBPVCA9IHRydWU7Cit9CisKK2VnbDo6RXJy
b3IgRGlzcGxheUVBR0w6OndhaXRDbGllbnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgLy8gVE9ETyhjd2FsbGV6KSBVTklNUExFTUVOVEVEKCkKKyAgICByZXR1cm4gZWdsOjpO
b0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgRGlzcGxheUVBR0w6OndhaXROYXRpdmUoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpCit7CisgICAgLy8gVE9ETyhjd2Fs
bGV6KSBVTklNUExFTUVOVEVEKCkKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2ds
OjpWZXJzaW9uIERpc3BsYXlFQUdMOjpnZXRNYXhTdXBwb3J0ZWRFU1ZlcnNpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigpOworfQor
CitlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjptYWtlQ3VycmVudFN1cmZhY2VsZXNzKGdsOjpDb250
ZXh0ICpjb250ZXh0KQoreworICAgIC8vIFdlIGhhdmUgbm90aGluZyB0byBkbyBhcyBtQ29udGV4
dCBpcyBhbHdheXMgY3VycmVudCwgYW5kIHRoYXQgRUFHTCBpcyBzdXJmYWNlbGVzcyBieQorICAg
IC8vIGRlZmF1bHQuCisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitjbGFzcyBXb3Jr
ZXJDb250ZXh0RUFHTCBmaW5hbCA6IHB1YmxpYyBXb3JrZXJDb250ZXh0Cit7CisgIHB1YmxpYzoK
KyAgICBXb3JrZXJDb250ZXh0RUFHTChFQUdMQ29udGV4dE9iaiBjb250ZXh0KTsKKyAgICB+V29y
a2VyQ29udGV4dEVBR0woKSBvdmVycmlkZTsKKworICAgIGJvb2wgbWFrZUN1cnJlbnQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVubWFrZUN1cnJlbnQoKSBvdmVycmlkZTsKKworICBwcml2YXRlOgor
ICAgIEVBR0xDb250ZXh0T2JqIG1Db250ZXh0OworfTsKKworV29ya2VyQ29udGV4dEVBR0w6Oldv
cmtlckNvbnRleHRFQUdMKEVBR0xDb250ZXh0T2JqIGNvbnRleHQpIDogbUNvbnRleHQoY29udGV4
dCkge30KKworV29ya2VyQ29udGV4dEVBR0w6On5Xb3JrZXJDb250ZXh0RUFHTCgpCit7CisgICAg
W0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5pbF07CisgICAgW21Db250ZXh0IHJlbGVh
c2VdOworICAgIG1Db250ZXh0ID0gbnVsbHB0cjsKK30KKworYm9vbCBXb3JrZXJDb250ZXh0RUFH
TDo6bWFrZUN1cnJlbnQoKQoreworICAgIGlmICghW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250
ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obUNvbnRleHQpXSkKKyAgICB7CisgICAgICAg
IEVSUigpIDw8ICJVbmFibGUgdG8gbWFrZSBnbCBjb250ZXh0IGN1cnJlbnQuIjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXb3JrZXJD
b250ZXh0RUFHTDo6dW5tYWtlQ3VycmVudCgpCit7CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJl
bnRDb250ZXh0Om5pbF07Cit9CisKK1dvcmtlckNvbnRleHQgKkRpc3BsYXlFQUdMOjpjcmVhdGVX
b3JrZXJDb250ZXh0KHN0ZDo6c3RyaW5nICppbmZvTG9nKQoreworICAgIEVBR0xDb250ZXh0T2Jq
IGNvbnRleHQgPSBudWxscHRyOworICAgIGNvbnRleHQgPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBp
bml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTM107CisgICAgaWYgKCFjb250ZXh0
KQorICAgIHsKKyAgICAgICAgKmluZm9Mb2cgKz0gIkNvdWxkIG5vdCBjcmVhdGUgdGhlIEVBR0wg
Y29udGV4dC4iOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
bmV3IFdvcmtlckNvbnRleHRFQUdMKGNvbnRleHQpOworfQorCit2b2lkIERpc3BsYXlFQUdMOjpp
bml0aWFsaXplRnJvbnRlbmRGZWF0dXJlcyhhbmdsZTo6RnJvbnRlbmRGZWF0dXJlcyAqZmVhdHVy
ZXMpIGNvbnN0Cit7CisgICAgbVJlbmRlcmVyLT5pbml0aWFsaXplRnJvbnRlbmRGZWF0dXJlcyhm
ZWF0dXJlcyk7Cit9CisKK3ZvaWQgRGlzcGxheUVBR0w6OnBvcHVsYXRlRmVhdHVyZUxpc3QoYW5n
bGU6OkZlYXR1cmVMaXN0ICpmZWF0dXJlcykKK3sKKyAgICBtUmVuZGVyZXItPmdldEZlYXR1cmVz
KCkucG9wdWxhdGVGZWF0dXJlTGlzdChmZWF0dXJlcyk7Cit9Cit9CisKKyNlbmRpZiAgLy8gZGVm
aW5lZChBTkdMRV9QTEFURk9STV9JT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wv
SU9TdXJmYWNlU3VyZmFjZUVBR0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzQwMDBhYzg0YTAxNWFkMDg0M2E0
YzAwZjlkOGU3NjRmMmJiNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wu
aApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9JT1NVUkZBQ0VTVVJG
QUNFRUFHTF9IXworI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdMX0lPU1VSRkFDRVNV
UkZBQ0VFQUdMX0hfCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdXJmYWNlR0wu
aCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgiCisK
K3N0cnVjdCBfX0lPU3VyZmFjZTsKK3R5cGVkZWYgX19JT1N1cmZhY2UgKklPU3VyZmFjZVJlZjsK
KworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgQXR0cmlidXRlTWFwOworfSAgLy8gbmFtZXNwYWNl
IGVnbAorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgRGlzcGxheUVBR0w7CitjbGFzcyBGdW5j
dGlvbnNHTDsKK2NsYXNzIFN0YXRlTWFuYWdlckdMOworCitjbGFzcyBJT1N1cmZhY2VTdXJmYWNl
RUFHTCA6IHB1YmxpYyBTdXJmYWNlR0wKK3sKKyAgcHVibGljOgorICAgIElPU3VyZmFjZVN1cmZh
Y2VFQUdMKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEVBR0xDb250ZXh0T2JqIGNnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOworICAgIH5JT1N1cmZhY2VTdXJmYWNlRUFHTCgp
IG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxh
eSAqZGlzcGxheSkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciB1bk1ha2VDdXJy
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJy
b3Igc3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpF
cnJvciBwb3N0U3ViQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7Cisg
ICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0ZSwg
dm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZSAqdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVm
ZmVyKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRT
d2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKSBvdmVycmlkZTsKKworICAgIEVHTGludCBnZXRX
aWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIEVHTGludCBpc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBFR0xpbnQgZ2V0U3dhcEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBzdGF0aWMgYm9vbCB2YWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwg
Y29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOworICAgIEZyYW1lYnVmZmVySW1wbCAq
Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFt
ZWJ1ZmZlclN0YXRlICZzdGF0ZSkgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc0VtdWxhdGVkQWxw
aGFDaGFubmVsKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBhbmdsZTo6UmVz
dWx0IGluaXRpYWxpemVBbHBoYUNoYW5uZWwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdM
dWludCB0ZXh0dXJlKTsKKworICAgIEVBR0xDb250ZXh0T2JqIG1FQUdMQ29udGV4dDsKKyAgICBJ
T1N1cmZhY2VSZWYgbUlPU3VyZmFjZTsKKyAgICBpbnQgbVdpZHRoOworICAgIGludCBtSGVpZ2h0
OworICAgIGludCBtUGxhbmU7CisgICAgaW50IG1Gb3JtYXRJbmRleDsKKworICAgIGJvb2wgbUFs
cGhhSW5pdGlhbGl6ZWQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcngKKworI2VuZGlmICAvLyBM
SUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdMX0lPU1VSRkFDRVNVUkZBQ0VFQUdMX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRhZjNlM2NlYmFmYTk5M2NkN2QzMTg5Mzc4OTgwZDVmN2I1ZDE5NGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbQpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbW1vbi9wbGF0
Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpCisKKyNpbXBvcnQgImxp
YkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wuaCIKKworI2ltcG9y
dCAiY29tbW9uL2RlYnVnLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9BdHRyaWJ1dGVNYXAuaCIKKyNp
bXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL0JsaXRHTC5oIgorI2ltcG9ydCAibGliQU5HTEUv
cmVuZGVyZXIvZ2wvRnJhbWVidWZmZXJHTC5oIgorI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIv
Z2wvRnVuY3Rpb25zR0wuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL1JlbmRlcmVy
R0wuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL1N0YXRlTWFuYWdlckdMLmgiCisj
aW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9UZXh0dXJlR0wuaCIKKyNpbXBvcnQgImxpYkFO
R0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCIKKworI2ltcG9ydCA8SU9TdXJmYWNl
L0lPU3VyZmFjZS5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdM
RVMvRUFHTElPU3VyZmFjZS5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+CisK
K25hbWVzcGFjZSByeAoreworCituYW1lc3BhY2UKK3sKKworc3RydWN0IElPU3VyZmFjZUZvcm1h
dEluZm8KK3sKKyAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisK
KyAgICBzaXplX3QgY29tcG9uZW50Qnl0ZXM7CisKKyAgICBHTGVudW0gbmF0aXZlSW50ZXJuYWxG
b3JtYXQ7CisgICAgR0xlbnVtIG5hdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbmF0aXZlVHlwZTsK
K307CisKKy8vIGNsYW5nLWZvcm1hdCBvZmYKKworc3RhdGljIGNvbnN0IElPU3VyZmFjZUZvcm1h
dEluZm8ga0lPU3VyZmFjZUZvcm1hdHNbXSA9IHsKKyAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAxLCBHTF9SRUQsICBHTF9SRUQsICBHTF9VTlNJR05FRF9CWVRFIH0sCisgICAg
e0dMX1IxNlVJLCAgICBHTF9VTlNJR05FRF9TSE9SVCwgMiwgR0xfUkVELCAgR0xfUkVELCAgR0xf
VU5TSUdORURfU0hPUlR9LAorICAgIHtHTF9SRywgICAgICAgR0xfVU5TSUdORURfQllURSwgIDIs
IEdMX1JHLCAgIEdMX1JHLCAgIEdMX1VOU0lHTkVEX0JZVEUgfSwKKyAgICB7R0xfUkdCLCAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICA0LCBHTF9SR0JBLCBHTF9CR1JBLCBHTF9VTlNJR05FRF9CWVRF
IH0sCisgICAge0dMX0JHUkFfRVhULCBHTF9VTlNJR05FRF9CWVRFLCAgNCwgR0xfUkdCQSwgR0xf
QkdSQSwgR0xfVU5TSUdORURfQllURSB9LAorICAgIHtHTF9SR0JBLCAgICAgR0xfSEFMRl9GTE9B
VCwgICAgIDgsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX0hBTEZfRkxPQVQgICAgfSwKK307CisKKy8v
IGNsYW5nLWZvcm1hdCBvbgorCitpbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDxpbnQ+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9ybWF0cykpOyArK2kpCisgICAg
eworICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNbaV07
CisgICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9ybWF0
ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK30gIC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworSU9TdXJmYWNlU3VyZmFjZUVBR0w6OklPU3VyZmFjZVN1cmZhY2VF
QUdMKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUFHTENvbnRleHRPYmogY2dsQ29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRy
aWJ1dGVNYXAgJmF0dHJpYnMpCisgICAgOiBTdXJmYWNlR0woc3RhdGUpLAorICAgICAgbUVBR0xD
b250ZXh0KGNnbENvbnRleHQpLAorICAgICAgbUlPU3VyZmFjZShudWxscHRyKSwKKyAgICAgIG1X
aWR0aCgwKSwKKyAgICAgIG1IZWlnaHQoMCksCisgICAgICBtUGxhbmUoMCksCisgICAgICBtRm9y
bWF0SW5kZXgoLTEpLAorICAgICAgbUFscGhhSW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgLy8g
S2VlcCByZWZlcmVuY2UgdG8gdGhlIElPU3VyZmFjZSBzbyBpdCBkb2Vzbid0IGdldCBkZWxldGVk
IHdoaWxlIHRoZSBwYnVmZmVyIGV4aXN0cy4KKyAgICBtSU9TdXJmYWNlID0gcmVpbnRlcnByZXRf
Y2FzdDxJT1N1cmZhY2VSZWY+KGJ1ZmZlcik7CisgICAgQ0ZSZXRhaW4obUlPU3VyZmFjZSk7CisK
KyAgICAvLyBFeHRyYWN0IGF0dHJpYnMgdXNlZnVsIGZvciB0aGUgY2FsbCB0byBFQUdMVGV4SW1h
Z2VJT1N1cmZhY2UyRAorICAgIG1XaWR0aCAgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0
KEVHTF9XSURUSCkpOworICAgIG1IZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0
KEVHTF9IRUlHSFQpKTsKKyAgICBtUGxhbmUgID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdl
dChFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKSk7CisKKyAgICBFR0xBdHRyaWIgaW50ZXJuYWxG
b3JtYXQgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOwor
ICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUpOworICAgIG1Gb3JtYXRJbmRleCA9CisgICAgICAgIEZpbmRJT1N1cmZhY2VGb3Jt
YXRJbmRleChzdGF0aWNfY2FzdDxHTGVudW0+KGludGVybmFsRm9ybWF0KSwgc3RhdGljX2Nhc3Q8
R0xlbnVtPih0eXBlKSk7CisgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKworICAgIG1B
bHBoYUluaXRpYWxpemVkID0gIWhhc0VtdWxhdGVkQWxwaGFDaGFubmVsKCk7Cit9CisKK0lPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjp+SU9TdXJmYWNlU3VyZmFjZUVBR0woKQoreworICAgIGlmIChtSU9T
dXJmYWNlICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBDRlJlbGVhc2UobUlPU3VyZmFjZSk7
CisgICAgICAgIG1JT1N1cmZhY2UgPSBudWxscHRyOworICAgIH0KK30KKworZWdsOjpFcnJvciBJ
T1N1cmZhY2VTdXJmYWNlRUFHTDo6aW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkpCit7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjptYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkK
K3sKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNl
U3VyZmFjZUVBR0w6OnVuTWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgR2V0RnVuY3Rpb25zR0woY29udGV4dCktPmZsdXNoKCk7CisgICAgcmV0dXJuIGVnbDo6
Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VFQUdMOjpzd2FwKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsK
K30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMaW50IGhlaWdodCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOwor
ICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJm
YWNlRUFHTDo6cXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQg
Kip2YWx1ZSkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3Io
KTsKK30KKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKworZWdsOjpFcnJvciBJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xpbnQgYnVmZmVyKQoreworI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFU
T1IpCisgICAgU3RhdGVNYW5hZ2VyR0wgKnN0YXRlTWFuYWdlciA9IEdldFN0YXRlTWFuYWdlckdM
KGNvbnRleHQpOworCisgICAgY29uc3QgVGV4dHVyZUdMICp0ZXh0dXJlR0wgPSBHZXRJbXBsQXM8
VGV4dHVyZUdMPih0ZXh0dXJlKTsKKyAgICBHTHVpbnQgdGV4dHVyZUlEICAgICAgICAgICA9IHRl
eHR1cmVHTC0+Z2V0VGV4dHVyZUlEKCk7CisgICAgc3RhdGVNYW5hZ2VyLT5iaW5kVGV4dHVyZShn
bDo6VGV4dHVyZVR5cGU6Ol8yRCwgdGV4dHVyZUlEKTsKKyAgICBjb25zdCBhdXRvICZmb3JtYXQg
PSBrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdOworCisgICAgaWYgKCFbbUVBR0xDb250
ZXh0IHRleEltYWdlSU9TdXJmYWNlOm1JT1N1cmZhY2UgdGFyZ2V0OkdMX1RFWFRVUkVfMkQgaW50
ZXJuYWxGb3JtYXQ6Zm9ybWF0Lm5hdGl2ZUludGVybmFsRm9ybWF0IHdpZHRoOm1XaWR0aCBoZWln
aHQ6bUhlaWdodCBmb3JtYXQ6Zm9ybWF0Lm5hdGl2ZUZvcm1hdCB0eXBlOmZvcm1hdC5uYXRpdmVU
eXBlIHBsYW5lOm1QbGFuZV0pIHsKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQ29udGV4dExvc3Qo
KSA8PCAiRUFHTENvbnRleHQgdGV4SW1hZ2VJT1N1cmZhY2UyRCBmYWlsZWQuIjsKKyAgICB9CisK
KyAgICBpZiAoSXNFcnJvcihpbml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnRleHQsIHRleHR1cmVJ
RCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQ29udGV4dExvc3QoKSA8PCAiRmFp
bGVkIHRvIGluaXRpYWxpemUgSU9TdXJmYWNlIGFscGhhIGNoYW5uZWwuIjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisjZWxzZQorICAgIHJldHVybiBlZ2w6OkVnbENvbnRl
eHRMb3N0KCkgPDwgIkVBR0xDb250ZXh0IElPU3VyZmFjZSBub3Qgc3VwcG9ydGVkIGluIHRoZSBz
aW11bGF0b3IuIjsKKyNlbmRpZgorfQorCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisK
K2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBjb25zdCBGdW5jdGlv
bnNHTCAqZnVuY3Rpb25zID0gR2V0RnVuY3Rpb25zR0woY29udGV4dCk7CisgICAgZnVuY3Rpb25z
LT5mbHVzaCgpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwordm9pZCBJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6c2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBV
TlJFQUNIQUJMRSgpOworfQorCitFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OmdldFdpZHRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitFR0xpbnQgSU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisK
K0VHTGludCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkg
Y29uc3QKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisK
K0VHTGludCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6Z2V0U3dhcEJlaGF2aW9yKCkgY29uc3QKK3sK
KyAgICAvLyBOL0EgYmVjYXVzZSB5b3UgY2FuJ3QgTWFrZUN1cnJlbnQgYW4gSU9TdXJmYWNlLCBy
ZXR1cm4gYW55IHZhbGlkIHZhbHVlLgorICAgIHJldHVybiBFR0xfQlVGRkVSX1BSRVNFUlZFRDsK
K30KKworLy8gc3RhdGljCitib29sIElPU3VyZmFjZVN1cmZhY2VFQUdMOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorewor
I2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisgICAgSU9TdXJmYWNl
UmVmIGlvU3VyZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9TdXJmYWNlUmVmPihidWZmZXIpOwor
CisgICAgLy8gVGhlIHBsYW5lIG11c3QgZXhpc3QgZm9yIHRoaXMgSU9TdXJmYWNlLiBJT1N1cmZh
Y2VHZXRQbGFuZUNvdW50IGNhbiByZXR1cm4gMCBmb3Igbm9uLXBsYW5hcgorICAgIC8vIGlvU3Vy
ZmFjZXMgYnV0IHdlIHdpbGwgdHJlYXQgbm9uLXBsYW5hciBsaWtlIGl0IGlzIGEgc2luZ2xlIHBs
YW5lLgorICAgIHNpemVfdCBzdXJmYWNlUGxhbmVDb3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwg
SU9TdXJmYWNlR2V0UGxhbmVDb3VudChpb1N1cmZhY2UpKTsKKyAgICBFR0xBdHRyaWIgcGxhbmUg
ICAgICAgICAgPSBhdHRyaWJzLmdldChFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKTsKKyAgICBp
ZiAocGxhbmUgPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4ocGxhbmUpID49IHN1cmZhY2VQbGFu
ZUNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRo
ZSB3aWR0aCBoZWlnaHQgc3BlY2lmaWVkIG11c3QgYmUgYXQgbGVhc3QgKDEsIDEpIGFuZCBhdCBt
b3N0IHRoZSBwbGFuZSBzaXplCisgICAgRUdMQXR0cmliIHdpZHRoICA9IGF0dHJpYnMuZ2V0KEVH
TF9XSURUSCk7CisgICAgRUdMQXR0cmliIGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQp
OworICAgIGlmICh3aWR0aCA8PSAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gSU9T
dXJmYWNlR2V0V2lkdGhPZlBsYW5lKGlvU3VyZmFjZSwgcGxhbmUpIHx8CisgICAgICAgIGhlaWdo
dCA8PSAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaGVpZ2h0KSA+IElPU3VyZmFjZUdldEhlaWdo
dE9mUGxhbmUoaW9TdXJmYWNlLCBwbGFuZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gRmluZCB0aGlzIElPU3VyZmFjZSBmb3JtYXQKKyAgICBFR0xBdHRy
aWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JN
QVRfQU5HTEUpOworICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVH
TF9URVhUVVJFX1RZUEVfQU5HTEUpOworCisgICAgaW50IGZvcm1hdEluZGV4ID0KKyAgICAgICAg
RmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3Jt
YXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKworICAgIGlmIChmb3JtYXRJbmRleCA8
IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sg
dGhhdCB0aGUgZm9ybWF0IG1hdGNoZXMgdGhpcyBJT1N1cmZhY2UgcGxhbmUKKyAgICBpZiAoSU9T
dXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSAhPQorICAg
ICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisjZWxz
ZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisvLyBXcmFwcyBhIEZyYW1lYnVmZmVy
R0wgdG8gaG9vayB0aGUgZGVzdHJveSBmdW5jdGlvbiB0byBkZWxldGUgdGhlIHRleHR1cmUgYXNz
b2NpYXRlZCB3aXRoIHRoZQorLy8gZnJhbWVidWZmZXIuCitjbGFzcyBJT1N1cmZhY2VGcmFtZWJ1
ZmZlciA6IHB1YmxpYyBGcmFtZWJ1ZmZlckdMCit7CisgIHB1YmxpYzoKKyAgICBJT1N1cmZhY2VG
cmFtZWJ1ZmZlcihjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHVpbnQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50
IHRleHR1cmVJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRGVmYXVsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGVtdWxhdGVkQWxwaGEpCisgICAgICAgIDogRnJh
bWVidWZmZXJHTChkYXRhLCBpZCwgaXNEZWZhdWx0LCBlbXVsYXRlZEFscGhhKSwgbVRleHR1cmVJ
ZCh0ZXh0dXJlSWQpCisgICAge30KKyAgICB2b2lkIGRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBHZXRGdW5jdGlvbnNHTChjb250ZXh0
KS0+ZGVsZXRlVGV4dHVyZXMoMSwgJm1UZXh0dXJlSWQpOworICAgICAgICBGcmFtZWJ1ZmZlckdM
OjpkZXN0cm95KGNvbnRleHQpOworICAgIH0KKworICBwcml2YXRlOgorICAgIEdMdWludCBtVGV4
dHVyZUlkOworfTsKKworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKworRnJhbWVidWZmZXJJ
bXBsICpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUg
JnN0YXRlKQoreworICAgIGNvbnN0IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBHZXRGdW5jdGlv
bnNHTChjb250ZXh0KTsKKyAgICBTdGF0ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2VyID0gR2V0U3Rh
dGVNYW5hZ2VyR0woY29udGV4dCk7CisKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZnVu
Y3Rpb25zLT5nZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgY29uc3QgYXV0byAmZm9ybWF0
ID0ga0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XTsKKyAgICBzdGF0ZU1hbmFnZXItPmJp
bmRUZXh0dXJlKGdsOjpUZXh0dXJlVHlwZTo6XzJELCB0ZXh0dXJlKTsKKworI2lmICFkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisgICAgaWYgKCFbbUVBR0xDb250ZXh0IHRl
eEltYWdlSU9TdXJmYWNlOm1JT1N1cmZhY2UgdGFyZ2V0OkdMX1RFWFRVUkVfMkQgaW50ZXJuYWxG
b3JtYXQ6Zm9ybWF0Lm5hdGl2ZUludGVybmFsRm9ybWF0IHdpZHRoOm1XaWR0aCBoZWlnaHQ6bUhl
aWdodCBmb3JtYXQ6Zm9ybWF0Lm5hdGl2ZUZvcm1hdCB0eXBlOmZvcm1hdC5uYXRpdmVUeXBlIHBs
YW5lOm1QbGFuZV0pIHsKKyAgICAgICAgRVJSKCkgPDwgIltFQUdMQ29udGV4dCB0ZXhJbWFnZUlP
U3VyZmFjZV0gZmFpbGVkIjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorI2Vsc2UK
KyAgICBFUlIoKSA8PCAiSU9TdXJmYWNlcyBub3Qgc3VwcG9ydGVkIG9uIGlPUyBTaW11bGF0b3Ii
OworI2VuZGlmCisKKyAgICBpZiAoSXNFcnJvcihpbml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnRl
eHQsIHRleHR1cmUpKSkKKyAgICB7CisgICAgICAgIEVSUigpIDw8ICJGYWlsZWQgdG8gaW5pdGlh
bGl6ZSBJT1N1cmZhY2UgYWxwaGEgY2hhbm5lbC4iOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGZ1bmN0aW9ucy0+Z2Vu
RnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CisgICAgc3RhdGVNYW5hZ2VyLT5iaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKKyAgICBzdGF0ZU1hbmFnZXIt
PmJpbmRUZXh0dXJlKGdsOjpUZXh0dXJlVHlwZTo6XzJELCB0ZXh0dXJlKTsKKyAgICBmdW5jdGlv
bnMtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hN
RU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7CisKKyAgICByZXR1cm4gbmV3IElPU3Vy
ZmFjZUZyYW1lYnVmZmVyKHN0YXRlLCBmcmFtZWJ1ZmZlciwgdGV4dHVyZSwgdHJ1ZSwgaGFzRW11
bGF0ZWRBbHBoYUNoYW5uZWwoKSk7Cit9CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
KworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aW5pdGlhbGl6ZUFscGhhQ2hh
bm5lbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSkKK3sKKyAg
ICBpZiAobUFscGhhSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CisgICAgfQorCisgICAgQmxpdEdMICpibGl0dGVyID0gR2V0QmxpdEdM
KGNvbnRleHQpOworICAgIEFOR0xFX1RSWShibGl0dGVyLT5jbGVhclJlbmRlcmFibGVUZXh0dXJl
QWxwaGFUb09uZShjb250ZXh0LCB0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZVRhcmdldDo6UmVjdGFuZ2xl
LCAwKSk7CisgICAgbUFscGhhSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKK30KKworYm9vbCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aGFzRW11
bGF0ZWRBbHBoYUNoYW5uZWwoKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gJmZvcm1hdCA9IGtJ
T1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF07CisgICAgcmV0dXJuIGZvcm1hdC5pbnRlcm5h
bEZvcm1hdCA9PSBHTF9SR0I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8v
IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdM
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9l
YWdsL1BidWZmZXJTdXJmYWNlRUFHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThlODYxZTI1ZjQzNTNkZTE3
NjBhYTQ3MGFiNjNjYWU2MTIyZDE5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1BidWZmZXJTdXJmYWNlRUFH
TC5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBQQnVmZmVyU3VyZmFjZUVBR0wuY3BwOiBhbiBpbXBsZW1lbnRhdGlv
biBvZiBlZ2w6OlN1cmZhY2UgZm9yIFBCdWZmZXJzIGZvciB0aGUgQ0xHIGJhY2tlbmQsCisvLyAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdXNpbmcgcmVuZGVyYnVm
ZmVycworCisjaW1wb3J0ICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fSU9TKQorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9QYnVm
ZmVyU3VyZmFjZUVBR0wuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL2dsL0Z1bmN0aW9uc0dMLmgiCisjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvZ2wvRnJhbWVidWZmZXJHTC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L2dsL1JlbmRlcmVyR0wuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdGF0ZU1h
bmFnZXJHTC5oIgorCituYW1lc3BhY2UgcngKK3sKKworUGJ1ZmZlclN1cmZhY2VFQUdMOjpQYnVm
ZmVyU3VyZmFjZUVBR0woY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcmVyR0wgKnJlbmRlcmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KQorICAgIDogU3VyZmFjZUdM
KHN0YXRlKSwKKyAgICAgIG1XaWR0aCh3aWR0aCksCisgICAgICBtSGVpZ2h0KGhlaWdodCksCisg
ICAgICBtRnVuY3Rpb25zKHJlbmRlcmVyLT5nZXRGdW5jdGlvbnMoKSksCisgICAgICBtU3RhdGVN
YW5hZ2VyKHJlbmRlcmVyLT5nZXRTdGF0ZU1hbmFnZXIoKSksCisgICAgICBtQ29sb3JSZW5kZXJi
dWZmZXIoMCksCisgICAgICBtRFNSZW5kZXJidWZmZXIoMCkKK3sKK30KKworUGJ1ZmZlclN1cmZh
Y2VFQUdMOjp+UGJ1ZmZlclN1cmZhY2VFQUdMKCkKK3sKKyAgICBpZiAobUNvbG9yUmVuZGVyYnVm
ZmVyICE9IDApCisgICAgeworICAgICAgICBtRnVuY3Rpb25zLT5kZWxldGVSZW5kZXJidWZmZXJz
KDEsICZtQ29sb3JSZW5kZXJidWZmZXIpOworICAgICAgICBtQ29sb3JSZW5kZXJidWZmZXIgPSAw
OworICAgIH0KKyAgICBpZiAobURTUmVuZGVyYnVmZmVyICE9IDApCisgICAgeworICAgICAgICBt
RnVuY3Rpb25zLT5kZWxldGVSZW5kZXJidWZmZXJzKDEsICZtRFNSZW5kZXJidWZmZXIpOworICAg
ICAgICBtRFNSZW5kZXJidWZmZXIgPSAwOworICAgIH0KK30KKworZWdsOjpFcnJvciBQYnVmZmVy
U3VyZmFjZUVBR0w6OmluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQorewor
ICAgIG1GdW5jdGlvbnMtPmdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1Db2xvclJlbmRlcmJ1ZmZlcik7
CisgICAgbVN0YXRlTWFuYWdlci0+YmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1D
b2xvclJlbmRlcmJ1ZmZlcik7CisgICAgbUZ1bmN0aW9ucy0+cmVuZGVyYnVmZmVyU3RvcmFnZShH
TF9SRU5ERVJCVUZGRVIsIEdMX1JHQkE4LCBtV2lkdGgsIG1IZWlnaHQpOworCisgICAgbUZ1bmN0
aW9ucy0+Z2VuUmVuZGVyYnVmZmVycygxLCAmbURTUmVuZGVyYnVmZmVyKTsKKyAgICBtU3RhdGVN
YW5hZ2VyLT5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbURTUmVuZGVyYnVmZmVy
KTsKKyAgICBtRnVuY3Rpb25zLT5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwg
R0xfREVQVEgyNF9TVEVOQ0lMOCwgbVdpZHRoLCBtSGVpZ2h0KTsKKworICAgIHJldHVybiBlZ2w6
Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBQYnVmZmVyU3VyZmFjZUVBR0w6Om1ha2VDdXJy
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBlZ2w6Ok5vRXJy
b3IoKTsKK30KKworZWdsOjpFcnJvciBQYnVmZmVyU3VyZmFjZUVBR0w6OnN3YXAoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitl
Z2w6OkVycm9yIFBidWZmZXJTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVHTGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVHTGludCBoZWlnaHQpCit7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6
OkVycm9yIFBidWZmZXJTdXJmYWNlRUFHTDo6cXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGlu
dCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1ZSkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
cmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIFBidWZmZXJTdXJmYWNlRUFH
TDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBidWZmZXIpCit7
CisgICAgRVJSKCkgPDwgIlBidWZmZXJTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlIjsKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVy
cm9yIFBidWZmZXJTdXJmYWNlRUFHTDo6cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICBy
ZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK3ZvaWQgUGJ1ZmZlclN1cmZhY2VFQUdMOjpzZXRT
d2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQoreworfQorCitFR0xpbnQgUGJ1ZmZlclN1cmZh
Y2VFQUdMOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdM
aW50IFBidWZmZXJTdXJmYWNlRUFHTDo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUhlaWdodDsKK30KKworRUdMaW50IFBidWZmZXJTdXJmYWNlRUFHTDo6aXNQb3N0U3ViQnVmZmVy
U3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIEVH
TF9GQUxTRTsKK30KKworRUdMaW50IFBidWZmZXJTdXJmYWNlRUFHTDo6Z2V0U3dhcEJlaGF2aW9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Cit9CisKK0ZyYW1l
YnVmZmVySW1wbCAqUGJ1ZmZlclN1cmZhY2VFQUdMOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZmZXIo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3Rh
dGUgJnN0YXRlKQoreworICAgIGNvbnN0IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBHZXRGdW5j
dGlvbnNHTChjb250ZXh0KTsKKyAgICBTdGF0ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2VyID0gR2V0
U3RhdGVNYW5hZ2VyR0woY29udGV4dCk7CisKKyAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAwOwor
ICAgIGZ1bmN0aW9ucy0+Z2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CisgICAgc3Rh
dGVNYW5hZ2VyLT5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsK
KyAgICBmdW5jdGlvbnMtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbUNvbG9yUmVuZGVyYnVmZmVyKTsKKyAgICBmdW5jdGlvbnMt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1EU1JlbmRlcmJ1ZmZlcik7CisKKyAgICByZXR1cm4gbmV3IEZyYW1lYnVm
ZmVyR0woc3RhdGUsIGZyYW1lYnVmZmVyLCB0cnVlLCBmYWxzZSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSByeAorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9QYnVmZmVyU3VyZmFjZUVBR0wuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
Y2Q3MWViODM3ODNmMTMzMjVhNjg3NjA4MjI4OTYxZWFjODBmYTI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wv
UGJ1ZmZlclN1cmZhY2VFQUdMLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFBCdWZmZXJTdXJmYWNlRUFHTC5oOiBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBlZ2w6OlN1cmZhY2UgZm9yIFBCdWZmZXJzIGZvciB0aGUgQ0xHIGJh
Y2tlbmQsCisvLyAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdXNp
bmcgcmVuZGVyYnVmZmVycworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUEJV
RkZFUlNVUkZBQ0VFQUdMX0hfCisjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUEJV
RkZFUlNVUkZBQ0VFQUdMX0hfCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdXJm
YWNlR0wuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK2NsYXNzIEZ1bmN0aW9uc0dMOworY2xhc3Mg
UmVuZGVyZXJHTDsKK2NsYXNzIFN0YXRlTWFuYWdlckdMOworCitjbGFzcyBQYnVmZmVyU3VyZmFj
ZUVBR0wgOiBwdWJsaWMgU3VyZmFjZUdMCit7CisgIHB1YmxpYzoKKyAgICBQYnVmZmVyU3VyZmFj
ZUVBR0woY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlcmVyR0wgKnJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KTsKKyAgICB+UGJ1ZmZl
clN1cmZhY2VFQUdMKCkgb3ZlcnJpZGU7CisKKyAgICBlZ2w6OkVycm9yIGluaXRpYWxpemUoY29u
c3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIG1ha2VD
dXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKworICAgIGVnbDo6
RXJyb3Igc3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWds
OjpFcnJvciBwb3N0U3ViQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7
CisgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0
ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQg
YnVmZmVyKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKSBvdmVycmlkZTsKKworICAgIEVHTGludCBn
ZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIEVHTGludCBpc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBFR0xpbnQgZ2V0U3dhcEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBGcmFtZWJ1ZmZlckltcGwgKmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpIG92ZXJyaWRlOworCisg
IHByaXZhdGU6CisgICAgdW5zaWduZWQgbVdpZHRoOworICAgIHVuc2lnbmVkIG1IZWlnaHQ7CisK
KyAgICAvLyBUT0RPKGdlb2ZmbGFuZyk6IERvbid0IHN0b3JlIHRoZXNlLCB0aGV5IGFyZSBwb3Rl
bnRpYWxseSBzcGVjaWZpYyB0byBhIHNpbmdsZSBHTCBjb250ZXh0LgorICAgIC8vIGh0dHA6Ly9h
bmdsZWJ1Zy5jb20vMjQ2NAorICAgIGNvbnN0IEZ1bmN0aW9uc0dMICptRnVuY3Rpb25zOworICAg
IFN0YXRlTWFuYWdlckdMICptU3RhdGVNYW5hZ2VyOworCisgICAgR0x1aW50IG1Db2xvclJlbmRl
cmJ1ZmZlcjsKKyAgICBHTHVpbnQgbURTUmVuZGVyYnVmZmVyOworfTsKKworfSAgLy8gbmFtZXNw
YWNlIHJ4CisKKyNlbmRpZiAgLy8gTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9QQlVGRkVSU1VS
RkFDRUVBR0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcyNmM4NmY2MTBhYjJjNTliZGY3OGI4ZWNiYjZlOGRiYzM2ZjM1ZTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBSZW5kZXJlckVBR0wubW06IElt
cGxlbWVudHMgdGhlIGNsYXNzIG1ldGhvZHMgZm9yIFJlbmRlcmVyRUFHTC4KKworI2ltcG9ydCAi
Y29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKwor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5oIgorCituYW1lc3Bh
Y2UgcngKK3sKKworUmVuZGVyZXJFQUdMOjpSZW5kZXJlckVBR0woc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uc0dMPiBmdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWds
OjpBdHRyaWJ1dGVNYXAgJmF0dHJpYk1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEaXNw
bGF5RUFHTCAqZGlzcGxheSkKKyAgICA6IFJlbmRlcmVyR0woc3RkOjptb3ZlKGZ1bmN0aW9ucyks
IGF0dHJpYk1hcCwgZGlzcGxheSksIG1EaXNwbGF5KGRpc3BsYXkpCit7fQorCitSZW5kZXJlckVB
R0w6On5SZW5kZXJlckVBR0woKSB7fQorCitXb3JrZXJDb250ZXh0ICpSZW5kZXJlckVBR0w6OmNy
ZWF0ZVdvcmtlckNvbnRleHQoc3RkOjpzdHJpbmcgKmluZm9Mb2cpCit7CisgICAgcmV0dXJuIG1E
aXNwbGF5LT5jcmVhdGVXb3JrZXJDb250ZXh0KGluZm9Mb2cpOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcngKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWds
L1JlbmRlcmVyRUFHTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL2VhZ2wvUmVuZGVyZXJFQUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE1NjdiOGZkMjA4OWNm
MTQ0NzMwODI5NWY3ZjkwY2MxMzU0NzkwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5o
CkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBSZW5kZXJlckVBR0wuaDogaW1wbGVtZW50cyBjcmVhdGVXb3JrZXJDb250ZXh0
IGZvciBSZW5kZXJlckdMLgorCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUkVO
REVSRVJFQUdMX0hfCisjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUkVOREVSRVJF
QUdMX0hfCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9SZW5kZXJlckdMLmgiCisK
K25hbWVzcGFjZSByeAoreworCitjbGFzcyBEaXNwbGF5RUFHTDsKKworY2xhc3MgUmVuZGVyZXJF
QUdMIDogcHVibGljIFJlbmRlcmVyR0wKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmVyRUFHTChz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25zR0w+IGZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICBj
b25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmliTWFwLAorICAgICAgICAgICAgICAgIERpc3Bs
YXlFQUdMICpkaXNwbGF5KTsKKyAgICB+UmVuZGVyZXJFQUdMKCkgb3ZlcnJpZGU7CisKKyAgcHJp
dmF0ZToKKyAgICBXb3JrZXJDb250ZXh0ICpjcmVhdGVXb3JrZXJDb250ZXh0KHN0ZDo6c3RyaW5n
ICppbmZvTG9nKSBvdmVycmlkZTsKKworICAgIERpc3BsYXlFQUdMICptRGlzcGxheTsKK307CisK
K30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0dM
WF9SRU5ERVJFUkdMWF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1dpbmRvd1N1cmZh
Y2VFQUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBkNzdiM2RiOGZlNzY3ZjVhMzFlZjU0ZjM3NGY1YjZlOWYw
OTNkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL1dpbmRvd1N1cmZhY2VFQUdMLmgKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBXaW5k
b3dTdXJmYWNlRUFHTC5oOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6U3VyZmFjZQorCisj
aWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfV0lORE9XU1VSRkFDRUVBR0xfSF8KKyNk
ZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9XSU5ET1dTVVJGQUNFRUFHTF9IXworCisj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU3VyZmFjZUdMLmgiCisKKyNpZmRlZiBfX09C
SkNfXworQGNsYXNzIEVBR0xDb250ZXh0OwordHlwZWRlZiBFQUdMQ29udGV4dCogRUFHTENvbnRl
eHRPYmo7CisjZWxzZQordHlwZWRlZiB2b2lkKiBFQUdMQ29udGV4dE9iajsKKyNlbmRpZgorQGNs
YXNzIENBTGF5ZXI7CitzdHJ1Y3QgX19JT1N1cmZhY2U7Cit0eXBlZGVmIF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7CisKKy8vIFdlYktpdCdzIGJ1aWxkIHByb2Nlc3MgcmVxdWlyZXMgdGhhdCBl
dmVyeSBPYmplY3RpdmUtQyBjbGFzcyBuYW1lIGhhcyB0aGUgcHJlZml4ICJXZWIiLgorQGNsYXNz
IFdlYlN3YXBMYXllcjsKKworbmFtZXNwYWNlIHJ4Cit7CisKK2NsYXNzIERpc3BsYXlFQUdMOwor
Y2xhc3MgRnJhbWVidWZmZXJHTDsKK2NsYXNzIEZ1bmN0aW9uc0dMOworY2xhc3MgUmVuZGVyZXJH
TDsKK2NsYXNzIFN0YXRlTWFuYWdlckdMOworCitzdHJ1Y3QgU2hhcmVkU3dhcFN0YXRlCit7Cisg
ICAgc3RydWN0IFN3YXBUZXh0dXJlCisgICAgeworICAgICAgICBHTHVpbnQgdGV4dHVyZTsKKyAg
ICAgICAgdW5zaWduZWQgaW50IHdpZHRoOworICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0Owor
ICAgICAgICB1aW50NjRfdCBzd2FwSWQ7CisgICAgfTsKKworICAgIFN3YXBUZXh0dXJlIHRleHR1
cmVzWzNdOworCisgICAgLy8gVGhpcyBjb2RlIHBhdGggaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQg
YnkgQ2hyb21lIHNvIHdlIHRha2UgdGhlIGxpYmVydHkKKyAgICAvLyB0byB1c2UgcHRocmVhZHMg
ZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVz
CisgICAgLy8gdmlhIHRoZSBQbGF0Zm9ybSBBUEkuCisgICAgcHRocmVhZF9tdXRleF90IG11dGV4
OworICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBzaG91bGQgYmUgYWNjZXNzZWQgb25seSB3
aGVuIGhvbGRpbmcgdGhlIG11dGV4CisgICAgLy8gKG9yIGRvaW5nIGNvbnN0cnVjdGlvbiAvIGRl
c3RydWN0aW9uKQorICAgIFN3YXBUZXh0dXJlICpiZWluZ1JlbmRlcmVkOworICAgIFN3YXBUZXh0
dXJlICpsYXN0UmVuZGVyZWQ7CisgICAgU3dhcFRleHR1cmUgKmJlaW5nUHJlc2VudGVkOworfTsK
KworY2xhc3MgV2luZG93U3VyZmFjZUVBR0wgOiBwdWJsaWMgU3VyZmFjZUdMCit7CisgIHB1Ymxp
YzoKKyAgICBXaW5kb3dTdXJmYWNlRUFHTChjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICBSZW5kZXJlckdMICpyZW5kZXJlciwKKyAgICAgICAgICAg
ICAgICAgICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAg
ICBFQUdMQ29udGV4dE9iaiBjb250ZXh0KTsKKyAgICB+V2luZG93U3VyZmFjZUVBR0woKSBvdmVy
cmlkZTsKKworICAgIGVnbDo6RXJyb3IgaW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgbWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBzd2FwKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHBvc3RTdWJCdWZm
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHF1
ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpIG92
ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgYmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOwor
ICAgIGVnbDo6RXJyb3IgcmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xp
bnQgaW50ZXJ2YWwpIG92ZXJyaWRlOworCisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRUdM
aW50IGlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEVHTGlu
dCBnZXRTd2FwQmVoYXZpb3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZyYW1lYnVmZmVySW1w
bCAqY3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpG
cmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSkgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBXZWJT
d2FwTGF5ZXIgKm1Td2FwTGF5ZXI7CisgICAgU2hhcmVkU3dhcFN0YXRlIG1Td2FwU3RhdGU7Cisg
ICAgdWludDY0X3QgbUN1cnJlbnRTd2FwSWQ7CisKKyAgICBDQUxheWVyICptTGF5ZXI7CisgICAg
RUFHTENvbnRleHRPYmogbUNvbnRleHQ7CisgICAgY29uc3QgRnVuY3Rpb25zR0wgKm1GdW5jdGlv
bnM7CisgICAgU3RhdGVNYW5hZ2VyR0wgKm1TdGF0ZU1hbmFnZXI7CisKKyAgICBHTHVpbnQgbURT
UmVuZGVyYnVmZmVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElC
QU5HTEVfUkVOREVSRVJfR0xfRUFHTF9XSU5ET1dTVVJGQUNFRUFHTF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2lu
ZG93U3VyZmFjZUVBR0wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2wvZWFnbC9XaW5kb3dTdXJmYWNlRUFHTC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjZlODJj
NDA3ODRmZmI1ODM4NWU4OTk2YTg0NzUzN2YxMWY1OGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93
U3VyZmFjZUVBR0wubW0KQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBXaW5kb3dTdXJmYWNlRUFHTC5jcHA6IEVBR0wgaW1w
bGVtZW50YXRpb24gb2YgZWdsOjpTdXJmYWNlCisKKyNpbXBvcnQgImNvbW1vbi9wbGF0Zm9ybS5o
IgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpCisKKyNpbXBvcnQgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wuaCIKKworI2ltcG9ydCAiY29tbW9u
L2RlYnVnLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9Db250ZXh0LmgiCisjaW1wb3J0ICJsaWJBTkdM
RS9yZW5kZXJlci9nbC9GcmFtZWJ1ZmZlckdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJl
ci9nbC9SZW5kZXJlckdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdGF0ZU1h
bmFnZXJHTC5oIgorI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFH
TC5oIgorCisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KKworLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoeSB0aGlzIG5lZWRzIHRv
IGJlIGFuIEVBR0xMYXllci4KKworQGludGVyZmFjZSBXZWJTd2FwTGF5ZXIgOiBDQUVBR0xMYXll
ciB7CisgICAgRUFHTENvbnRleHRPYmogbURpc3BsYXlDb250ZXh0OworCisgICAgYm9vbCBpbml0
aWFsaXplZDsKKyAgICByeDo6U2hhcmVkU3dhcFN0YXRlICptU3dhcFN0YXRlOworICAgIGNvbnN0
IHJ4OjpGdW5jdGlvbnNHTCAqbUZ1bmN0aW9uczsKKworICAgIEdMdWludCBtUmVhZEZyYW1lYnVm
ZmVyOworfQorLSAoaWQpaW5pdFdpdGhTaGFyZWRTdGF0ZToocng6OlNoYXJlZFN3YXBTdGF0ZSAq
KXN3YXBTdGF0ZQorICAgICAgICAgICAgICB3aXRoQ29udGV4dDooRUFHTENvbnRleHRPYmopZGlz
cGxheUNvbnRleHQKKyAgICAgICAgICAgIHdpdGhGdW5jdGlvbnM6KGNvbnN0IHJ4OjpGdW5jdGlv
bnNHTCAqKWZ1bmN0aW9uczsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlN3YXBMYXllcgor
LSAoaWQpaW5pdFdpdGhTaGFyZWRTdGF0ZToocng6OlNoYXJlZFN3YXBTdGF0ZSAqKXN3YXBTdGF0
ZQorICAgICAgICAgICAgICB3aXRoQ29udGV4dDooRUFHTENvbnRleHRPYmopZGlzcGxheUNvbnRl
eHQKKyAgICAgICAgICAgIHdpdGhGdW5jdGlvbnM6KGNvbnN0IHJ4OjpGdW5jdGlvbnNHTCAqKWZ1
bmN0aW9ucworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYgIT0gbmls
KQorICAgIHsKKyAgICAgICAgbURpc3BsYXlDb250ZXh0ICAgPSBkaXNwbGF5Q29udGV4dDsKKwor
ICAgICAgICBpbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICBtU3dhcFN0YXRlICA9IHN3YXBT
dGF0ZTsKKyAgICAgICAgbUZ1bmN0aW9ucyAgPSBmdW5jdGlvbnM7CisKKyAgICAgICAgW3NlbGYg
c2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBtU3dhcFN0YXRlLT50ZXh0dXJlc1swXS53aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3dhcFN0YXRlLT50ZXh0dXJlc1sw
XS5oZWlnaHQpXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlzcGxh
eQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbVN3YXBTdGF0ZS0+bXV0ZXgpOworICAgIHsK
KyAgICAgICAgaWYgKG1Td2FwU3RhdGUtPmxhc3RSZW5kZXJlZC0+c3dhcElkID4gbVN3YXBTdGF0
ZS0+YmVpbmdQcmVzZW50ZWQtPnN3YXBJZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpz
d2FwKG1Td2FwU3RhdGUtPmxhc3RSZW5kZXJlZCwgbVN3YXBTdGF0ZS0+YmVpbmdQcmVzZW50ZWQp
OworICAgICAgICB9CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtU3dhcFN0YXRl
LT5tdXRleCk7CisKKyAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bURpc3BsYXlD
b250ZXh0XTsKKworICAgIGlmICghaW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7CisKKyAgICAgICAgbUZ1bmN0aW9ucy0+Z2VuRnJhbWVidWZmZXJzKDEsICZt
UmVhZEZyYW1lYnVmZmVyKTsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvICZ0ZXh0dXJlID0gKm1T
d2FwU3RhdGUtPmJlaW5nUHJlc2VudGVkOworCisgICAgaWYgKFtzZWxmIGZyYW1lXS5zaXplLndp
ZHRoICE9IHRleHR1cmUud2lkdGggfHwgW3NlbGYgZnJhbWVdLnNpemUuaGVpZ2h0ICE9IHRleHR1
cmUuaGVpZ2h0KQorICAgIHsKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCB0ZXh0dXJlLndpZHRoLCB0ZXh0dXJlLmhlaWdodCldOworCisgICAgICAgIC8vIEZJWE1FOiBJ
ZiB0aGlzIGNvbnRpbnVlcyB0byByZW1haW4gYW4gRUFHTExheWVyLCB0aGVuIHRoaXMgaXMgd2hl
cmUgd2UnZAorICAgICAgICAvLyBwcm9iYWJseSB3YW50IHRvIGNyZWF0ZSB0aGUgcmVuZGVyYnVm
ZmVyIHN0b3JhZ2UuCisgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorCisg
ICAgLy8gVE9ETyhjd2FsbGV6KSBzdXBwb3J0IDIuMSBjb250ZXh0cyB0b28gdGhhdCBkb24ndCBo
YXZlIGJsaXRGcmFtZWJ1ZmZlciBub3IgdGhlCisgICAgLy8gR0xfRFJBV19GUkFNRUJVRkZFUl9C
SU5ESU5HIHF1ZXJ5CisgICAgR0xpbnQgZHJhd0ZCTzsKKyAgICBtRnVuY3Rpb25zLT5nZXRJbnRl
Z2VydihHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkcmF3RkJPKTsKKworICAgIG1GdW5j
dGlvbnMtPmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbVJlYWRGcmFtZWJ1ZmZlcik7
CisgICAgbUZ1bmN0aW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUudGV4dHVyZSwgMCk7CisKKyAgICBtRnVuY3Rpb25zLT5i
aW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbVJlYWRGcmFtZWJ1ZmZlcik7Cisg
ICAgbUZ1bmN0aW9ucy0+YmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIGRyYXdG
Qk8pOworICAgIG1GdW5jdGlvbnMtPmJsaXRGcmFtZWJ1ZmZlcigwLCAwLCB0ZXh0dXJlLndpZHRo
LCB0ZXh0dXJlLmhlaWdodCwgMCwgMCwgdGV4dHVyZS53aWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05F
QVJFU1QpOworCisgICAgbUZ1bmN0aW9ucy0+YmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZG
RVIsIHRleHR1cmUudGV4dHVyZSk7CisgICAgW21EaXNwbGF5Q29udGV4dCBwcmVzZW50UmVuZGVy
YnVmZmVyOkdMX1JFTkRFUkJVRkZFUl07CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250
ZXh0Om5pbF07Cit9CitAZW5kCisKK25hbWVzcGFjZSByeAoreworCitXaW5kb3dTdXJmYWNlRUFH
TDo6V2luZG93U3VyZmFjZUVBR0woY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJlckdMICpyZW5kZXJlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSBsYXll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFHTENvbnRleHRPYmogY29u
dGV4dCkKKyAgICA6IFN1cmZhY2VHTChzdGF0ZSksCisgICAgICBtU3dhcExheWVyKG5pbCksCisg
ICAgICBtQ3VycmVudFN3YXBJZCgwKSwKKyAgICAgIG1MYXllcihyZWludGVycHJldF9jYXN0PENB
TGF5ZXIgKj4obGF5ZXIpKSwKKyAgICAgIG1Db250ZXh0KGNvbnRleHQpLAorICAgICAgbUZ1bmN0
aW9ucyhyZW5kZXJlci0+Z2V0RnVuY3Rpb25zKCkpLAorICAgICAgbVN0YXRlTWFuYWdlcihyZW5k
ZXJlci0+Z2V0U3RhdGVNYW5hZ2VyKCkpLAorICAgICAgbURTUmVuZGVyYnVmZmVyKDApCit7Cisg
ICAgcHRocmVhZF9tdXRleF9pbml0KCZtU3dhcFN0YXRlLm11dGV4LCBudWxscHRyKTsKK30KKwor
V2luZG93U3VyZmFjZUVBR0w6On5XaW5kb3dTdXJmYWNlRUFHTCgpCit7CisgICAgcHRocmVhZF9t
dXRleF9kZXN0cm95KCZtU3dhcFN0YXRlLm11dGV4KTsKKworICAgIGlmIChtRFNSZW5kZXJidWZm
ZXIgIT0gMCkKKyAgICB7CisgICAgICAgIG1GdW5jdGlvbnMtPmRlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1EU1JlbmRlcmJ1ZmZlcik7CisgICAgICAgIG1EU1JlbmRlcmJ1ZmZlciA9IDA7CisgICAg
fQorCisgICAgaWYgKG1Td2FwTGF5ZXIgIT0gbmlsKQorICAgIHsKKyAgICAgICAgW21Td2FwTGF5
ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICBbbVN3YXBMYXllciByZWxlYXNlXTsK
KyAgICAgICAgbVN3YXBMYXllciA9IG5pbDsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IEFycmF5U2l6ZShtU3dhcFN0YXRlLnRleHR1cmVzKTsgKytpKQorICAgIHsKKyAgICAg
ICAgaWYgKG1Td2FwU3RhdGUudGV4dHVyZXNbaV0udGV4dHVyZSAhPSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRnVuY3Rpb25zLT5kZWxldGVUZXh0dXJlcygxLCAmbVN3YXBTdGF0ZS50ZXh0
dXJlc1tpXS50ZXh0dXJlKTsKKyAgICAgICAgICAgIG1Td2FwU3RhdGUudGV4dHVyZXNbaV0udGV4
dHVyZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2VnbDo6RXJyb3IgV2luZG93U3VyZmFj
ZUVBR0w6OmluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIHVu
c2lnbmVkIHdpZHRoICA9IGdldFdpZHRoKCk7CisgICAgdW5zaWduZWQgaGVpZ2h0ID0gZ2V0SGVp
Z2h0KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6ZShtU3dhcFN0YXRl
LnRleHR1cmVzKTsgKytpKQorICAgIHsKKyAgICAgICAgbUZ1bmN0aW9ucy0+Z2VuVGV4dHVyZXMo
MSwgJm1Td2FwU3RhdGUudGV4dHVyZXNbaV0udGV4dHVyZSk7CisgICAgICAgIG1TdGF0ZU1hbmFn
ZXItPmJpbmRUZXh0dXJlKGdsOjpUZXh0dXJlVHlwZTo6XzJELCBtU3dhcFN0YXRlLnRleHR1cmVz
W2ldLnRleHR1cmUpOworICAgICAgICBtRnVuY3Rpb25zLT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIEdMX1JHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgbnVsbHB0cik7CisgICAgICAgIG1T
d2FwU3RhdGUudGV4dHVyZXNbaV0ud2lkdGggID0gd2lkdGg7CisgICAgICAgIG1Td2FwU3RhdGUu
dGV4dHVyZXNbaV0uaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtU3dhcFN0YXRlLnRleHR1cmVz
W2ldLnN3YXBJZCA9IDA7CisgICAgfQorICAgIG1Td2FwU3RhdGUuYmVpbmdSZW5kZXJlZCAgPSAm
bVN3YXBTdGF0ZS50ZXh0dXJlc1swXTsKKyAgICBtU3dhcFN0YXRlLmxhc3RSZW5kZXJlZCAgID0g
Jm1Td2FwU3RhdGUudGV4dHVyZXNbMV07CisgICAgbVN3YXBTdGF0ZS5iZWluZ1ByZXNlbnRlZCA9
ICZtU3dhcFN0YXRlLnRleHR1cmVzWzJdOworCisgICAgbVN3YXBMYXllciA9IFtbV2ViU3dhcExh
eWVyIGFsbG9jXSBpbml0V2l0aFNoYXJlZFN0YXRlOiZtU3dhcFN0YXRlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb250ZXh0Om1Db250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRnVuY3Rpb25z
Om1GdW5jdGlvbnNdOworICAgIFttTGF5ZXIgYWRkU3VibGF5ZXI6bVN3YXBMYXllcl07CisKKyAg
ICBtRnVuY3Rpb25zLT5nZW5SZW5kZXJidWZmZXJzKDEsICZtRFNSZW5kZXJidWZmZXIpOworICAg
IG1TdGF0ZU1hbmFnZXItPmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtRFNSZW5k
ZXJidWZmZXIpOworICAgIG1GdW5jdGlvbnMtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVS
QlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVy
biBlZ2w6OkVycm9yKEVHTF9TVUNDRVNTKTsKK30KKworZWdsOjpFcnJvciBXaW5kb3dTdXJmYWNl
RUFHTDo6bWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0
dXJuIGVnbDo6RXJyb3IoRUdMX1NVQ0NFU1MpOworfQorCitlZ2w6OkVycm9yIFdpbmRvd1N1cmZh
Y2VFQUdMOjpzd2FwKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGNvbnN0IEZ1
bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBHZXRGdW5jdGlvbnNHTChjb250ZXh0KTsKKyAgICBTdGF0
ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2VyID0gR2V0U3RhdGVNYW5hZ2VyR0woY29udGV4dCk7CisK
KyAgICBmdW5jdGlvbnMtPmZsdXNoKCk7CisgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT5z
d2FwSWQgPSArK21DdXJyZW50U3dhcElkOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtU3dh
cFN0YXRlLm11dGV4KTsKKyAgICB7CisgICAgICAgIHN0ZDo6c3dhcChtU3dhcFN0YXRlLmJlaW5n
UmVuZGVyZWQsIG1Td2FwU3RhdGUubGFzdFJlbmRlcmVkKTsKKyAgICB9CisgICAgcHRocmVhZF9t
dXRleF91bmxvY2soJm1Td2FwU3RhdGUubXV0ZXgpOworCisgICAgdW5zaWduZWQgd2lkdGggID0g
Z2V0V2lkdGgoKTsKKyAgICB1bnNpZ25lZCBoZWlnaHQgPSBnZXRIZWlnaHQoKTsKKyAgICBhdXRv
ICZ0ZXh0dXJlICAgPSAqbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkOworCisgICAgaWYgKHRleHR1
cmUud2lkdGggIT0gd2lkdGggfHwgdGV4dHVyZS5oZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAg
ICAgICAgc3RhdGVNYW5hZ2VyLT5iaW5kVGV4dHVyZShnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgdGV4
dHVyZS50ZXh0dXJlKTsKKyAgICAgICAgZnVuY3Rpb25zLT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIEdMX1JHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBudWxscHRyKTsKKworICAgICAgICBz
dGF0ZU1hbmFnZXItPmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtRFNSZW5kZXJi
dWZmZXIpOworICAgICAgICBmdW5jdGlvbnMtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVS
QlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICB0
ZXh0dXJlLndpZHRoICA9IHdpZHRoOworICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGhlaWdodDsK
KyAgICB9CisKKyAgICBGcmFtZWJ1ZmZlckdMICpmcmFtZWJ1ZmZlckdMID0gR2V0SW1wbEFzPEZy
YW1lYnVmZmVyR0w+KGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKHswfSkpOworICAgIHN0YXRlTWFu
YWdlci0+YmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlckdMLT5nZXRG
cmFtZWJ1ZmZlcklEKCkpOworICAgIGZ1bmN0aW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT50
ZXh0dXJlLCAwKTsKKworICAgIHJldHVybiBlZ2w6OkVycm9yKEVHTF9TVUNDRVNTKTsKK30KKwor
ZWdsOjpFcnJvciBXaW5kb3dTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xp
bnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGhlaWdodCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RXJy
b3IoRUdMX1NVQ0NFU1MpOworfQorCitlZ2w6OkVycm9yIFdpbmRvd1N1cmZhY2VFQUdMOjpxdWVy
eVN1cmZhY2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKQorewor
ICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpFcnJvcihFR0xfU1VDQ0VTUyk7
Cit9CisKK2VnbDo6RXJyb3IgV2luZG93U3VyZmFjZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgcmV0dXJuIGVnbDo6RXJyb3IoRUdMX1NVQ0NFU1MpOworfQorCitlZ2w6OkVycm9yIFdpbmRv
d1N1cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
IEVHTGludCBidWZmZXIpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6
OkVycm9yKEVHTF9TVUNDRVNTKTsKK30KKwordm9pZCBXaW5kb3dTdXJmYWNlRUFHTDo6c2V0U3dh
cEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICAvLyBUT0RPKGN3YWxsZXopIGludmVz
dGlnYXRlIGltcGxlbWVudGluZyBzd2FwIGludGVydmFscyBvdGhlciB0aGFuIDAKK30KKworRUdM
aW50IFdpbmRvd1N1cmZhY2VFQUdMOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChF
R0xpbnQpQ0dSZWN0R2V0V2lkdGgoW21MYXllciBmcmFtZV0pOworfQorCitFR0xpbnQgV2luZG93
U3VyZmFjZUVBR0w6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChFR0xpbnQpQ0dS
ZWN0R2V0SGVpZ2h0KFttTGF5ZXIgZnJhbWVdKTsKK30KKworRUdMaW50IFdpbmRvd1N1cmZhY2VF
QUdMOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAoreworICAgIFVOSU1QTEVNRU5U
RUQoKTsKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xpbnQgV2luZG93U3VyZmFjZUVB
R0w6OmdldFN3YXBCZWhhdmlvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVHTF9CVUZGRVJfREVT
VFJPWUVEOworfQorCitGcmFtZWJ1ZmZlckltcGwgKldpbmRvd1N1cmZhY2VFQUdMOjpjcmVhdGVE
ZWZhdWx0RnJhbWVidWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpCit7CisgICAgY29uc3QgRnVuY3Rpb25zR0wgKmZ1
bmN0aW9ucyA9IEdldEZ1bmN0aW9uc0dMKGNvbnRleHQpOworICAgIFN0YXRlTWFuYWdlckdMICpz
dGF0ZU1hbmFnZXIgPSBHZXRTdGF0ZU1hbmFnZXJHTChjb250ZXh0KTsKKworICAgIEdMdWludCBm
cmFtZWJ1ZmZlciA9IDA7CisgICAgZnVuY3Rpb25zLT5nZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1l
YnVmZmVyKTsKKyAgICBzdGF0ZU1hbmFnZXItPmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgZnJhbWVidWZmZXIpOworICAgIGZ1bmN0aW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT50
ZXh0dXJlLCAwKTsKKyAgICBmdW5jdGlvbnMtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EU1JlbmRlcmJ1ZmZlcik7
CisKKyAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyR0woc3RhdGUsIGZyYW1lYnVmZmVyLCB0cnVl
LCBmYWxzZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMu
Y3BwCmluZGV4IGY2ZGExMDUzZjZhNjQ0MGU1Yzk1MjFhNzc1OTUwMmMxMDI2N2Y5YmMuLjYwMjBh
NjBiMTNkM2VjZTY1YTE5MjRhNWZlZjY2NzJmYWRmOTdjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvcmVuZGVyZXJnbF91dGlscy5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIHZvaWQgR2VuZXJh
dGVDYXBzKGNvbnN0IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMsCiAgICAgZXh0ZW5zaW9ucy0+dGV4
dHVyZVNSR0JEZWNvZGUgPSBmdW5jdGlvbnMtPmhhc0dMRXh0ZW5zaW9uKCJHTF9FWFRfdGV4dHVy
ZV9zUkdCX2RlY29kZSIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbnMtPmhhc0dMRVNFeHRlbnNpb24oIkdMX0VYVF90ZXh0dXJlX3NSR0JfZGVjb2RlIik7
CiAKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDT1MpCiAgICAgVmVuZG9ySUQgdmVuZG9yID0gR2V0VmVuZG9ySUQoZnVuY3Rp
b25zKTsKICAgICBpZiAoKElzQU1EKHZlbmRvcikgfHwgSXNJbnRlbCh2ZW5kb3IpKSAmJiAqbWF4
U3VwcG9ydGVkRVNWZXJzaW9uID49IGdsOjpWZXJzaW9uKDMsIDApKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNw
cAppbmRleCBhZmFiNWVlODA3NmIwMTgwYWJlNzc3ZWQxZWIyYmQ2NDE2M2ViMmY4Li43MTc0NTg4
YmM4YTM2ZjM2YTgxZDI1ZmU4NzAwZDY3ZmE2OWJjNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMi5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzIuY3BwCkBAIC02Mzg3
LDcgKzYzODcsMTIgQEAgYm9vbCBWYWxpZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZTJEKENvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnZhbGlkYXRpb25FcnJvcihH
TF9JTlZBTElEX1ZBTFVFLCBrSW52YWxpZE1pcExldmVsKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGV4
LT5nZXRUeXBlKCkgIT0gVGV4dHVyZVR5cGU6OlJlY3RhbmdsZSkKKyNpZiBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX0lPUykKKyAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlVHlwZSBleHBlY3Rl
ZFR5cGUgeyBUZXh0dXJlVHlwZTo6XzJEIH07CisjZWxzZQorICAgICAgICAgICAgICAgIGNvbnN0
IFRleHR1cmVUeXBlIGV4cGVjdGVkVHlwZSB7IFRleHR1cmVUeXBlOjpSZWN0YW5nbGUgfTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFR5cGUoKSAhPSBleHBlY3RlZFR5cGUp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT52YWxpZGF0
aW9uRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGtUZXh0dXJlVGFyZ2V0TWlzbWF0Y2gpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2xfZXh0LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQu
Y3BwCmluZGV4IDY0MTQyZGFlOTJjZDAzNDRlOGYwNWZjZGI3YzY1ZTgzMzU2MDk5NWYuLjM2NmFl
NzJjNjcxNmE2NjhkYzAwMmQ2YWY0NjdjNzhiZGMwYmI3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2Vn
bF9leHQuY3BwCkBAIC0zMDEsNiArMzAxLDE1IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdM
X1F1ZXJ5RGV2aWNlQXR0cmliRVhUKEVHTERldmljZUVYVCBkZXZpY2UsCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlcnJvciA9IGRldi0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUdMX0VBR0xfQ09OVEVYVF9BTkdM
RToKKyAgICAgICAgICAgIGlmICghZGV2LT5nZXRFeHRlbnNpb25zKCkuZGV2aWNlRUFHTCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJlYWQtPnNldEVycm9yKEVnbEJhZEF0dHJp
YnV0ZSgpLCBHZXREZWJ1ZygpLCAiZWdsUXVlcnlEZXZpY2VBdHRyaWJFWFQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGV2aWNlSWZWYWxpZChkZXYpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJy
b3IgPSBkZXYtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVHTF9DR0xfQ09OVEVYVF9BTkdMRToKICAgICAgICAgY2FzZSBF
R0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdMRToKICAgICAgICAgICAgIGlmICghZGV2LT5nZXRFeHRl
bnNpb25zKCkuZGV2aWNlQ0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAxNGE3MDk1NjAwMWNiYjk5
NzJiNmU2MDdiZDcwNzE1NmJkYjljMDVhLi5mNzU0MDc2NzIxYjAxNWU1ZDQ1OWVjZmE3MGQ1ZmQ2
ZGQxM2RkNjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMjA1OSw3ICsyMDU5LDEwIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNE
c2l6ZWkgY291bnQsIEdDM0RlCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJp
bWl0aXZlQ291bnQpCiB7Ci0jaWYgIVVTRShBTkdMRSkKKyNpZiBVU0UoQU5HTEUpCisgICAgVU5V
U0VEX1BBUkFNKGVsZW1lbnRDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZUNvdW50
KTsKKyNlbHNlCiAgICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTIxMjcsOSArMjEzMCw2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGVsZW1lbnRDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZUNvdW50KTsK
ICNlbmRpZgogICAgIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IGE2NGEwYTkyMzg4MWRj
OGExNjZlMmM0NTAzZjcyNzVmYmQ3NDIwMzguLjRmNjAzYmRmYmUzZWMwODk5NTM2MmQ4NWEwOWJl
ZmRkYzA5ZjA1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Nv
cmVWaWRlb1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5jcHAKQEAgLTcyLDEwICs3Miw4IEBAIFNPRlRfTElOS19GVU5DVElP
Tl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZUNy
ZWF0ZVRlCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8s
IENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVGbHVzaCwgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJlQ2Fj
aGVSZWYgdGV4dHVyZUNhY2hlLCBDVk9wdGlvbkZsYWdzIG9wdGlvbnMpLCAodGV4dHVyZUNhY2hl
LCBvcHRpb25zKSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVW
aWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQsIEdMZW51bSwgKENWT3BlbkdMRVNUZXh0
dXJlUmVmIGltYWdlKSwgKGltYWdlKSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdl
YkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXROYW1lLCBHTHVpbnQsIChDVk9w
ZW5HTEVTVGV4dHVyZVJlZiBpbWFnZSksIChpbWFnZSkpCi1TT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJu
LCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQs
IE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVs
QnVmZmVyT3V0KSkKLVNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVW
aWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVs
Rm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVsZWFz
ZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZE
aWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4
ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUs
IGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5DVElPTl9G
T1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRl
eENvb3Jkcywgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJlUmVmIGltYWdlLCBHTGZsb2F0IGxvd2Vy
TGVmdFsyXSwgR0xmbG9hdCBsb3dlclJpZ2h0WzJdLCBHTGZsb2F0IHVwcGVyTGVmdFsyXSwgR0xm
bG9hdCB1cHBlclJpZ2h0WzJdKSwgKGltYWdlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVy
TGVmdCwgdXBwZXJSaWdodCkpCi0jZWxzZQorI2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElOS19G
VU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2Fj
aGVDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25h
cnlSZWYgY2FjaGVBdHRyaWJ1dGVzLCBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBpeGVs
Rm9ybWF0T2JqIGNnbFBpeGVsRm9ybWF0LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJpYnV0
ZXMsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmKiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNhY2hl
QXR0cmlidXRlcywgY2dsQ29udGV4dCwgY2dsUGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1dGVz
LCBjYWNoZU91dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3Jl
VmlkZW8sIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlVGV4dHVyZUZyb21JbWFnZSwgQ1ZSZXR1
cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmIHRl
eHR1cmVDYWNoZSwgQ1ZJbWFnZUJ1ZmZlclJlZiBzb3VyY2VJbWFnZSwgQ0ZEaWN0aW9uYXJ5UmVm
IGF0dHJpYnV0ZXMsIENWT3BlbkdMVGV4dHVyZVJlZiogdGV4dHVyZU91dCksIChhbGxvY2F0b3Is
IHRleHR1cmVDYWNoZSwgc291cmNlSW1hZ2UsIGF0dHJpYnV0ZXMsIHRleHR1cmVPdXQpKQogU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRl
eHR1cmVDYWNoZUZsdXNoLCB2b2lkLCAoQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVSZWYgdGV4dHVyZUNh
Y2hlLCBDVk9wdGlvbkZsYWdzIG9wdGlvbnMpLCAodGV4dHVyZUNhY2hlLCBvcHRpb25zKSkKQEAg
LTkxLDYgKzg5LDggQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29y
ZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8KIFNPRlRfTElOS19DT05TVEFO
VF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21w
YXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05f
Rk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0
dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWln
aHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwg
d2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBp
eGVsQnVmZmVyT3V0KSkKK1NPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9j
YXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBp
eGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVs
ZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwg
Q0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAq
cGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5
cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBw
aXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5DVElP
Tl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJ
T1N1cmZhY2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1cmZhY2VS
ZWYgc3VyZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhl
bEJ1ZmZlclJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwgcGl4ZWxC
dWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCiAKICNlbmRpZiAvLyBIQVZFKENPUkVf
VklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29m
dExpbmsuaAppbmRleCA2ZDBiZjRmODViNGVhZDllNzk2NjFlNDFhOTYyMDc4YzYwMDY5NTQ1Li5j
ZjVmODlhZTEzNDFlYTg4MDZkMjU2MTg4ZTY4NmQzZGUyOWVkMDZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKQEAgLTkzLDYgKzkz
LDEwIEBAIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfSEVBREVSKFdlYkNvcmUsIENv
cmVWaWRlbywga0NWSW1hZ2VCdWZmZXJZQ2JDck1hCiAjZGVmaW5lIGtDVkltYWdlQnVmZmVyWUNi
Q3JNYXRyaXhfUDNfRDY1IGdldF9Db3JlVmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9Q
M19ENjUoKQogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIoV2ViQ29yZSwg
Q29yZVZpZGVvLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAsIENGU3RyaW5n
UmVmKQogI2RlZmluZSBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAgZ2V0X0Nv
cmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAoKQorU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckNH
Qml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQ
aXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19r
Q1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxpdHlLZXkoKQorU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckNH
SW1hZ2VDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga0NWUGl4ZWxCdWZm
ZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyQ0dJ
bWFnZUNvbXBhdGliaWxpdHlLZXkoKQogCiAjaWYgVVNFKE9QRU5HTF9FUykKIFNPRlRfTElOS19G
VU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVD
YWNoZUNyZWF0ZSwgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGljdGlv
bmFyeVJlZiBjYWNoZUF0dHJpYnV0ZXMsIENWRUFHTENvbnRleHQgZWFnbENvbnRleHQsIENGRGlj
dGlvbmFyeVJlZiB0ZXh0dXJlQXR0cmlidXRlcywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJlZiog
Y2FjaGVPdXQpLCAoYWxsb2NhdG9yLCBjYWNoZUF0dHJpYnV0ZXMsIGVhZ2xDb250ZXh0LCB0ZXh0
dXJlQXR0cmlidXRlcywgY2FjaGVPdXQpKQpAQCAtMTA1LDIwICsxMDksMTIgQEAgU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4dHVy
ZUdldFRhcmdldCwgR0wKICNkZWZpbmUgQ1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQgc29mdExp
bmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNUZXh0dXJlR2V0VGFyZ2V0CiBTT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlR2V0TmFt
ZSwgR0x1aW50LCAoQ1ZPcGVuR0xFU1RleHR1cmVSZWYgaW1hZ2UpLCAoaW1hZ2UpKQogI2RlZmlu
ZSBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUgc29mdExpbmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNU
ZXh0dXJlR2V0TmFtZQotU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29y
ZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRU
eXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVy
UmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9y
bWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCi0jZGVmaW5l
IENWUGl4ZWxCdWZmZXJDcmVhdGUgc29mdExpbmtfQ29yZVZpZGVvX0NWUGl4ZWxCdWZmZXJDcmVh
dGUKLVNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQ
aXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxv
Y2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlw
ZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVsZWFzZUNhbGxiYWNr
KSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZEaWN0aW9uYXJ5
UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJP
dXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIGRhdGEsIGJ5
dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKLSNkZWZpbmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdp
dGhCeXRlcyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcwog
U09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5H
TEVTVGV4dHVyZUdldENsZWFuVGV4Q29vcmRzLCB2b2lkLCAoQ1ZPcGVuR0xFU1RleHR1cmVSZWYg
aW1hZ2UsIEdMZmxvYXQgbG93ZXJMZWZ0WzJdLCBHTGZsb2F0IGxvd2VyUmlnaHRbMl0sIEdMZmxv
YXQgdXBwZXJMZWZ0WzJdLCBHTGZsb2F0IHVwcGVyUmlnaHRbMl0pLCAoaW1hZ2UsIGxvd2VyTGVm
dCwgbG93ZXJSaWdodCwgdXBwZXJMZWZ0LCB1cHBlclJpZ2h0KSkKICNkZWZpbmUgQ1ZPcGVuR0xF
U1RleHR1cmVHZXRDbGVhblRleENvb3JkcyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZPcGVuR0xFU1Rl
eHR1cmVHZXRDbGVhblRleENvb3JkcwogCi1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihX
ZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyQ0dCaXRtYXBDb250ZXh0Q29tcGF0aWJp
bGl0eUtleSwgQ0ZTdHJpbmdSZWYpCi0jZGVmaW5lIGtDVlBpeGVsQnVmZmVyQ0dCaXRtYXBDb250
ZXh0Q29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyQ0dCaXRtYXBD
b250ZXh0Q29tcGF0aWJpbGl0eUtleSgpCi1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihX
ZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXks
IENGU3RyaW5nUmVmKQotI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5
S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSgp
CiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBp
eGVsQnVmZmVySU9TdXJmYWNlT3BlbkdMRVNGQk9Db21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1Jl
ZikKICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xFU0ZCT0NvbXBhdGliaWxp
dHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEVTRkJPQ29t
cGF0aWJpbGl0eUtleSgpCi0jZWxzZQorI2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElOS19GVU5D
VElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVD
cmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25hcnlS
ZWYgY2FjaGVBdHRyaWJ1dGVzLCBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBpeGVsRm9y
bWF0T2JqIGNnbFBpeGVsRm9ybWF0LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJpYnV0ZXMs
IENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmKiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNhY2hlQXR0
cmlidXRlcywgY2dsQ29udGV4dCwgY2dsUGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1dGVzLCBj
YWNoZU91dCkpCiAjZGVmaW5lIENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlIHNvZnRMaW5rX0Nv
cmVWaWRlb19DVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZP
Ul9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZVRl
eHR1cmVGcm9tSW1hZ2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDVk9w
ZW5HTFRleHR1cmVDYWNoZVJlZiB0ZXh0dXJlQ2FjaGUsIENWSW1hZ2VCdWZmZXJSZWYgc291cmNl
SW1hZ2UsIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBDVk9wZW5HTFRleHR1cmVSZWYqIHRl
eHR1cmVPdXQpLCAoYWxsb2NhdG9yLCB0ZXh0dXJlQ2FjaGUsIHNvdXJjZUltYWdlLCBhdHRyaWJ1
dGVzLCB0ZXh0dXJlT3V0KSkKQEAgLTE0NSw2ICsxNDEsMTAgQEAgU09GVF9MSU5LX0NPTlNUQU5U
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBh
dGliaWwKICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9D
b3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgog
CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4
ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlv
bmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVm
ZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKKyNkZWZpbmUgQ1ZQaXhlbEJ1ZmZl
ckNyZWF0ZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZQorU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3Jl
YXRlV2l0aEJ5dGVzLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgc2l6ZV90
IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlLCB2b2lkKiBkYXRh
LCBzaXplX3QgYnl0ZXNQZXJSb3csIHZvaWQgKCpyZWxlYXNlQ2FsbGJhY2spKHZvaWQqLCBjb25z
dCB2b2lkKiksIHZvaWQqIHJlbGVhc2VQb2ludGVyLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0
b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0VHlwZSwgZGF0YSwgYnl0ZXNQZXJSb3csIHJl
bGVhc2VDYWxsYmFjaywgcmVsZWFzZVBvaW50ZXIsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4
ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzIHNvZnRM
aW5rX0NvcmVWaWRlb19DVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENW
UGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBp
eGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQogI2RlZmluZSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNjM3YmM3NGM3YmEzYjk2Yjk2MmMwOTNh
Y2RmMjIwM2FhYjk1NGI1Yy4uNmNmMWE4YTBiYzU3ZmUyMzEyZTg4ZGMwYThjYTk0MDdiY2ZkMDZm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC0xMTk4LDcgKzExOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFD
KQorI2lmIFVTRShBTkdMRSkKICAgICB2b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3Jl
KEludFNpemUpOwogICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3Jl
RnJvbUxheWVyKCk7CiAjZW5kaWYKQEAgLTEzNjAsNyArMTM2MCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhl
bHNTaXplKTsKICAgICB2b2lkIHJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3Nhcnko
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVs
cyk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFVTRShPUEVOR0xfRVMpCiAgICAg
dm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xF
LmNwcAppbmRleCA3Y2JkZmZlOGVjZDBmMzY1NmQwOGExYTA5OTlhMWIzNTg4MDVlY2ZiLi5mMTYx
ZWE1OTQwYWUxZmU5YzExNDc2ODAxZjZhYzU5MDJhZjU2ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHQzREFOR0xFLmNwcApAQCAtMTg2LDI0ICsxODYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAvLyByZXNpemUgcmVn
dWxhciBGQk8KICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAKLSNpZiBQTEFU
Rk9STShNQUMpCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNr
aW5nU3RvcmUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgdXBkYXRlRnJhbWVidWZmZXJU
ZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7Ci0jZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIC8vIEZJWE1FIChrYnIpOiBpbXBsZW1lbnQgaU9TIHBhdGgsIGlkZWFsbHkgdXNpbmcgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlLgotICAgIC8vIGdsOjpCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKLSAgICAvLyBnbDo6RnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5E
RVJCVUZGRVIsIG1fdGV4dHVyZSk7Ci0gICAgLy8gc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21E
cmF3YWJsZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKICNlbHNlCi0jZXJyb3Ig
VW5rbm93biBDb2NvYSBwbGF0Zm9ybQotI2VuZGlmCi0jZWxzZQotCi0jZXJyb3IgTXVzdCBwb3J0
IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMKLQorI2Vycm9yIEZJWE1FOiBQb3J0IHRvIG5vbi1Db2Nv
YSBwbGF0Zm9ybXMuCiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKICAgICBhdHRhY2hEZXB0
aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQppbmRleCBhMmVlYWI0
Mjg1NzU3OTI3NDYzZTM3YjU5OTlmZGEwOTM5OGQxZjIxLi41ZDQ4ODkyNzU1NzcwZjg0NGE5Yjc5
OTMxMzI1ZTQ0MjdlNTMxZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KQEAg
LTY5LDYgKzY5LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7CiAjaW5jbHVkZSA8QU5H
TEUvZWdsZXh0Lmg+CiAjaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+CiAjaW5jbHVkZSA8
QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19l
Z2xfZXh0Lmg+CiAjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4u
aD4KICNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgogI2lu
Y2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgpAQCAtMjg2LDYgKzI4Nyw3IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kCiAgICAgICAgIDo6Z2xFbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElW
RV9SRVNUQVJUKTsKIAogI2VsaWYgVVNFKEFOR0xFKQorCiAgICAgVU5VU0VEX1BBUkFNKGhvc3RX
aW5kb3cpOwogICAgIFVOVVNFRF9QQVJBTShzaGFyZWRDb250ZXh0KTsKIApAQCAtMzM3LDYgKzMz
OSw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAgICAgfQogICAgIGNvbnRleHRBdHRyaWJ1
dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKICAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOworCiAgICAgaWYgKHN0cnN0
cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKICAg
ICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FO
R0xFKTsKICAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hh
bmdlIHRvCkBAIC0zNTQsMzAgKzM1NywyMyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogCiAg
ICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19T
VVJGQUNFLCBtX2NvbnRleHRPYmopOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFy
KiByZXF1aXJlZEV4dGVuc2lvbnNbXSA9IHsKLSAgICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVj
dGFuZ2xlIiwgLy8gRm9yIElPU3VyZmFjZS1iYWNrZWQgdGV4dHVyZXMKLSAgICAgICAgIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZh
Y2UgZnJvbSBhbiBJT1N1cmZhY2UKLSAgICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBFeHRl
bnNpb25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CiAKLSAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IGNoYXIqIG9wdGlvbmFsRXh0ZW5zaW9uc1tdID0gewotICAgICAgICAiR0xf
RVhUX2RlYnVnX21hcmtlciIsCisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiByZXF1
aXJlZEV4dGVuc2lvbnNbXSA9IHsKKyAgICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xl
IiwgLy8gRm9yIElPU3VyZmFjZS1iYWNrZWQgdGV4dHVyZXMuCisgICAgICAgICJHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODgiLCAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZy
b20gYW4gSU9TdXJmYWNlLgogICAgIH07CiAKLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMg
PSBnZXRFeHRlbnNpb25zKCk7Ci0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgocmVxdWlyZWRFeHRlbnNpb25zKTsgKytpKSB7CiAgICAgICAgIGlmICghZXh0ZW5z
aW9ucy5zdXBwb3J0cyhyZXF1aXJlZEV4dGVuc2lvbnNbaV0pKSB7Ci0gICAgICAgICAgICBMT0co
V2ViR0wsICJNaXNzaW5nIHJlcXVpcmVkIGV4dGVuc2lvbi4iKTsKKyAgICAgICAgICAgIExPRyhX
ZWJHTCwgIk1pc3NpbmcgcmVxdWlyZWQgZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVkRXh0ZW5zaW9u
c1tpXSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBleHRlbnNp
b25zLmVuc3VyZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ldKTsKICAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgob3B0aW9uYWxFeHRlbnNpb25z
KTsgKytpKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKG9wdGlvbmFsRXh0ZW5z
aW9uc1tpXSkpCi0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQob3B0aW9uYWxF
eHRlbnNpb25zW2ldKTsKLSAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAjZW5kaWYg
Ly8gI2VsaWYgVVNFKEFOR0xFKQogCkBAIC0zOTAsNyArMzg2LDcgQEAgR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywg
SG9zdFdpbmQKICAgICAgICAgW21fd2ViR0xMYXllciBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsK
ICNlbmRpZgogI2lmIFVTRShBTkdMRSkKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNw
bGF5Om1fZGlzcGxheU9iaiBhbmRDb25maWc6Y29uZmlnXTsKKyAgICAgICAgW21fd2ViR0xMYXll
ciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxheU9iaiBjb25maWc6Y29uZmlnXTsKICNlbmRpZgogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIApAQCAtNDEzLDEzICs0MDksMjAgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRl
cyBhdHRycywgSG9zdFdpbmQKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9FWFQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCAwKTsKICNlbGlmIFVTRShBTkdM
RSkKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBHTGVudW0gdGV4dHVyZVR5cGUgPSBHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRTsKKyNlbHNlCisgICAgR0xlbnVtIHRleHR1cmVUeXBlID0gR0xf
VEVYVFVSRV8yRDsKKyNlbmRpZgorCiAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0
dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgMCk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUeXBlLCBtX3RleHR1cmUpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJl
VHlwZSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQ
YXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUeXBlLCAwKTsKICNlbHNlCiAjZXJyb3Ig
VW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC03MTMsMTQgKzcxNiwyMCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJs
ZSkKICNpZiBVU0UoQU5HTEUpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3Vy
ZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplIHNpemUpCiB7CisjaWYgSEFWRShJT1NVUkZBQ0UpCiAg
ICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRo
aXMpOwogICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRo
U2l6ZTpzaXplIHVzaW5nQWxwaGE6bV9hdHRycy5hbHBoYV07CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzaXplKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVG
cmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQogeworI2lmIEhBVkUoSU9T
VVJGQUNFKQogICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1
ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwogICAgIFtt
X3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07CisjZW5k
aWYKIH0KICNlbmRpZiAvLyBVU0UoQU5HTEUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaAppbmRleCAxZDNiNmQ1YWM4YTgxYThj
MjFmMjc0Y2FhNjQ4M2EzZGUxNGJlNWRkLi5lNmM0NWZiNTcwNWQ2MjA0OWU0YmIxOTc2ZWRhODgz
MDc5Yjg3MjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5oCkBAIC00MCwyNCArNDAsMjIgQEAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KIEBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBTGF5ZXIKICNlbGlm
IFVTRShPUEVOR0xfRVMpCiBAaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQUVBR0xMYXllcgotI2Vs
aWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjZWxpZiBVU0UoQU5HTEUpCiBAaW50ZXJm
YWNlIFdlYkdMTGF5ZXIgOiBDQUxheWVyCi0jZWxpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi1AaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQUVBR0xMYXllcgogI2Vsc2UKICNl
cnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybQogI2VuZGlmCiB7CiAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0QqIF9jb250ZXh0OwogICAgIGZsb2F0IF9kZXZpY2VQaXhlbFJhdGlvOwotI2lm
IFVTRShPUEVOR0wpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjaWYgSEFWRShJ
T1NVUkZBQ0UpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfZHJhd2luZ0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfc3BhcmVCdWZmZXI7CiAgICAgV2ViQ29yZTo6SW50
U2l6ZSBfYnVmZmVyU2l6ZTsKICAgICBCT09MIF91c2luZ0FscGhhOwogI2VuZGlmCi0jaWYgVVNF
KEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFOR0xFKQogICAgIHZvaWQqIF9lZ2xE
aXNwbGF5OwogICAgIHZvaWQqIF9lZ2xDb25maWc7CiAgICAgdm9pZCogX2NvbnRlbnRzUGJ1ZmZl
cjsKQEAgLTczLDEzICs3MSwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29s
b3JTcGFjZVJlZiljb2xvclNwYWNlOwogCi0jaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkg
JiYgUExBVEZPUk0oTUFDKSkKKyNpZiBIQVZFKElPU1VSRkFDRSkgJiYgKFVTRShPUEVOR0wpIHx8
IFVTRShBTkdMRSkpCiAtICh2b2lkKWFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNp
emU6KFdlYkNvcmU6OkludFNpemUpc2l6ZSB1c2luZ0FscGhhOihCT09MKXVzaW5nQWxwaGE7CiAt
ICh2b2lkKWJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2U7CiAjZW5kaWYKIAot
I2lmIChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCi0tICh2b2lkKXNldEVHTERpc3BsYXk6
KHZvaWQqKWVnbERpc3BsYXkgYW5kQ29uZmlnOih2b2lkKillZ2xDb25maWc7CisjaWYgVVNFKEFO
R0xFKQorLSAodm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKillZ2xEaXNwbGF5IGNvbmZpZzoodm9p
ZCopZWdsQ29uZmlnOwogLSAodm9pZClkZWFsbG9jOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IDg3
ODA4NjAyNzAyNWYzMDkwODgzYWJlYzQ3ZGJlY2FkNTZhMjUwZDkuLmU3MDE3ZGViNGJlYjg4NmRj
MGU5ODVkNzg5NTk0N2YzNTVlYzMzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpAQCAtNTUsNiArNTUsMTEgQEAKICNk
ZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAogI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5o
PgogI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKK2Nv
bnN0IEdMZW51bSBpb1N1cmZhY2VUZXh0dXJlVHlwZSA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FO
R0xFOworI2Vsc2UKK2NvbnN0IEdMZW51bSBpb1N1cmZhY2VUZXh0dXJlVHlwZSA9IEdMX1RFWFRV
UkVfMkQ7CisjZW5kaWYKICNlbmRpZgogCiBAaW1wbGVtZW50YXRpb24gV2ViR0xMYXllcgpAQCAt
NjYsNyArNzEsNyBAQAogICAgIF9jb250ZXh0ID0gY29udGV4dDsKICAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwogICAgIF9kZXZpY2VQaXhlbFJhdGlvID0gY29udGV4dC0+Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKS5kZXZpY2VQaXhlbFJhdGlvOwotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkg
JiYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKICAgICBzZWxm
LmNvbnRlbnRzT3BhcXVlID0gIWNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGE7
CiAgICAgc2VsZi50cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CiAgICAgc2VsZi5j
b250ZW50c1NjYWxlID0gX2RldmljZVBpeGVsUmF0aW87CkBAIC03Niw3ICs4MSw3IEBACiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKLSNpZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFU
Rk9STShNQUMpKQorI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKIC8vIFdoZW4gdXNpbmcg
YW4gSU9TdXJmYWNlIGFzIGxheWVyIGNvbnRlbnRzLCB3ZSBuZWVkIHRvIGZsaXAgdGhlCiAvLyBs
YXllciB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBJT1N1cmZhY2UgcHJvdmlkZXMgY29u
dGVudAogLy8gaW4gWS11cC4gVGhpcyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyB0cmFuc2Zvcm0g
KHVubGlrZWx5LCBzaW5jZQpAQCAtOTIsNyArOTcsNyBAQAogewogICAgIFtzdXBlciBzZXRBbmNo
b3JQb2ludDpDR1BvaW50TWFrZShwLngsIDEuMCAtIHAueSldOwogfQotI2VuZGlmIC8vIFVTRShP
UEVOR0wpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKE1BQykpCisjZW5kaWYgLy8gVVNFKE9Q
RU5HTCkgfHwgVVNFKEFOR0xFKQogCiAjaWYgVVNFKE9QRU5HTCkKIHN0YXRpYyB2b2lkIGZyZWVE
YXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCkBAIC0xNTUs
MTIgKzE2MCwxMyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRh
dGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIH0KICNlbGlmIFVTRShPUEVOR0xfRVMpCiAgICAg
X2NvbnRleHQtPnByZXNlbnRSZW5kZXJidWZmZXIoKTsKLSNlbGlmIFVTRShBTkdMRSkKKyNlbGlm
IEhBVkUoSU9TVVJGQUNFKSAmJiBVU0UoQU5HTEUpCiAgICAgX2NvbnRleHQtPnByZXBhcmVUZXh0
dXJlKCk7CiAgICAgaWYgKF9kcmF3aW5nQnVmZmVyKSB7CiAgICAgICAgIGlmIChfbGF0Y2hlZFBi
dWZmZXIpIHsKKwogICAgICAgICAgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0
Zm9ybVRleHR1cmUoKTsKLSAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRSwgdGV4dHVyZSk7CisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoaW9T
dXJmYWNlVGV4dHVyZVR5cGUsIHRleHR1cmUpOwogICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFz
ZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgogICAgICAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0xODEsOCArMTg3LDggQEAgc3RhdGljIHZvaWQgZnJl
ZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAg
ICAgbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllcik7
CiB9CiAKLSNpZiAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQotLSAodm9pZClzZXRFR0xE
aXNwbGF5Oih2b2lkKilkaXNwbGF5IGFuZENvbmZpZzoodm9pZCopY29uZmlnCisjaWYgVVNFKEFO
R0xFKQorLSAodm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKilkaXNwbGF5IGNvbmZpZzoodm9pZCop
Y29uZmlnCiB7CiAgICAgX2VnbERpc3BsYXkgPSBkaXNwbGF5OwogICAgIF9lZ2xDb25maWcgPSBj
b25maWc7CkBAIC0xOTcsNyArMjAzLDcgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBj
b25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKIH0KICNlbmRpZgogCi0jaWYgVVNF
KE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKSkKKyNpZiBIQVZFKElPU1VS
RkFDRSkgJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKIC0gKHZvaWQpYWxsb2NhdGVJT1N1
cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50U2l6ZSlzaXplIHVzaW5nQWxw
aGE6KEJPT0wpdXNpbmdBbHBoYQogewogICAgIF9idWZmZXJTaXplID0gc2l6ZTsKQEAgLTIxNCwx
MyArMjIwLDEzIEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0
YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgX2RyYXdpbmdCdWZmZXItPm1pZ3JhdGVDb2xvclNw
YWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAgX3NwYXJlQnVmZmVyLT5taWdyYXRlQ29sb3JTcGFjZVRv
UHJvcGVydGllcygpOwogCi0jaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNF
KEFOR0xFKQogICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0cmlidXRlc1tdID0gewogICAgICAg
ICBFR0xfV0lEVEgsIHNpemUud2lkdGgoKSwKICAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5oZWln
aHQoKSwKICAgICAgICAgRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSwgMCwKICAgICAgICAgRUdM
X1RFWFRVUkVfVEFSR0VULCBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsCi0gICAgICAgIEVH
TF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhU
IDogR0xfUkdCLAorICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIEdM
X0JHUkFfRVhULAogICAgICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEs
CiAgICAgICAgIEVHTF9URVhUVVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCiAgICAg
ICAgIEVHTF9OT05FLCBFR0xfTk9ORQpAQCAtMjQ5LDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGZy
ZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAg
QVNTRVJUX1VOVVNFRChlcnJvciwgZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwogI2VsaWYgVVNFKEFO
R0xFKQogICAgIEdDM0RlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCB0ZXh0dXJl
KTsKKworICAgIGdsOjpCaW5kVGV4dHVyZShpb1N1cmZhY2VUZXh0dXJlVHlwZSwgdGV4dHVyZSk7
CiAKICAgICBpZiAoX2xhdGNoZWRQYnVmZmVyKSB7CiAgICAgICAgIGlmICghRUdMX1JlbGVhc2VU
ZXhJbWFnZShfZWdsRGlzcGxheSwgX2xhdGNoZWRQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7
CkBAIC0yNzIsNyArMjc5LDcgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2
b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICBfbGF0Y2hlZFBidWZmZXIgPSBfZHJh
d2luZ1BidWZmZXI7CiAjZW5kaWYKIH0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCAoVVNFKEFO
R0xFKSAmJiBQTEFURk9STShNQUMpKQorI2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8IFVTRShBTkdM
RSkKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9UZXh0dXJlQ2FjaGVDVi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L1RleHR1cmVDYWNoZUNWLm1tCmluZGV4IDlmMWY2NmIzYmQ1OWY1OWIxYWQzY2I3MDVjODU2
NTQ0MjI3ZWMzOTguLjAxOWQyMzk1MTdkODJiYzJlYmYzZGI2NTY2YzNmYWQzYTU4MGZkYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNo
ZUNWLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVD
YWNoZUNWLm1tCkBAIC02MSw2ICs2MSwxNiBAQCBUZXh0dXJlQ2FjaGVDVjo6VGV4dHVyZUNhY2hl
Q1YoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQsIFJldGFpblB0cjxUZXh0dXJlQ2FjaAogCiBS
ZXRhaW5QdHI8VGV4dHVyZUNhY2hlQ1Y6OlRleHR1cmVUeXBlPiBUZXh0dXJlQ2FjaGVDVjo6dGV4
dHVyZUZyb21JbWFnZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBHQzNEZW51bSBvdXRwdXRUYXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUpCiB7CisjaWYgVVNFKEFOR0xFKQorICAgIC8vIEZJWE1FOiBmaWd1
cmUgb3V0IGhvdyB0byBkbyB0aGlzIGludGVncmF0aW5nIHZpYSBBTkdMRS4KKyAgICBVTlVTRURf
UEFSQU0oaW1hZ2UpOworICAgIFVOVVNFRF9QQVJBTShvdXRwdXRUYXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BBUkFNKGludGVybmFsRm9ybWF0KTsKKyAgICBV
TlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgcmV0dXJu
IG51bGxwdHI7CisjZWxzZQogICAgIFRleHR1cmVUeXBlIGJhcmVWaWRlb1RleHR1cmUgPSBudWxs
cHRyOwogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZl
ckdldFdpZHRoKGltYWdlKTsKQEAgLTc1LDE1ICs4NSw2IEBAIFJldGFpblB0cjxUZXh0dXJlQ2Fj
aGVDVjo6VGV4dHVyZVR5cGU+IFRleHR1cmVDYWNoZUNWOjp0ZXh0dXJlRnJvbUltYWdlKENWUGl4
ZWxCCiAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwogICAgIGlmIChrQ1ZSZXR1cm5TdWNjZXNzICE9
IENWT3BlbkdMVGV4dHVyZUNhY2hlQ3JlYXRlVGV4dHVyZUZyb21JbWFnZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBtX2NhY2hlLmdldCgpLCBpbWFnZSwgbnVsbHB0ciwgJmJhcmVWaWRlb1RleHR1cmUp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAvLyBGSVhN
RTogZmlndXJlIG91dCBob3cgdG8gZG8gdGhpcyBpbnRlZ3JhdGluZyB2aWEgQU5HTEUuCi0gICAg
VU5VU0VEX1BBUkFNKGltYWdlKTsKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0VGFyZ2V0KTsKLSAg
ICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAg
IHJldHVybiBudWxscHRyOwogI2VuZGlmCiAgICAgUmV0YWluUHRyPFRleHR1cmVUeXBlPiB2aWRl
b1RleHR1cmUgPSBhZG9wdENGKGJhcmVWaWRlb1RleHR1cmUpOwogCkBAIC05MSwxNiArOTIsMTcg
QEAgUmV0YWluUHRyPFRleHR1cmVDYWNoZUNWOjpUZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hlQ1Y6
OnRleHR1cmVGcm9tSW1hZ2UoQ1ZQaXhlbEIKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbd2Vha1RoaXNdIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGF1dG8gY2FjaGUgPSB3
ZWFrVGhpcy0+bV9jYWNoZS5nZXQoKSkKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgICAgICAgICAg
Q1ZPcGVuR0xFU1RleHR1cmVDYWNoZUZsdXNoKGNhY2hlLCAwKTsKLSNlbHNlCisjZWxpZiBVU0Uo
T1BFTkdMKQogICAgICAgICAgICAgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVGbHVzaChjYWNoZSwgMCk7
CiAjZW5kaWYKICAgICB9KTsKIAogICAgIHJldHVybiB2aWRlb1RleHR1cmU7CisjZW5kaWYKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlk
ZW9UZXh0dXJlQ29waWVyQ1YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCmluZGV4IDc1YWQ0ODc3MDRmZjdiNDhlNTM2MWU1
YzUzZjhiYTQxOGFkYjIyM2IuLjFmNmQxMWM0NTNlMzNiNGZlZjI4MTk0ZjlhODgyYWE1NzNkOGE3
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVv
VGV4dHVyZUNvcGllckNWLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKQEAgLTg3NCwyMCArODc0LDM2IEBAIGJvb2wg
VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShU
ZXh0dXJlVHlwZSBpbnB1dFZpCiAgICAgR0xmbG9hdCBsb3dlclJpZ2h0WzJdID0geyAwLCAwIH07
CiAgICAgR0xmbG9hdCB1cHBlclJpZ2h0WzJdID0geyAwLCAwIH07CiAgICAgR0xmbG9hdCB1cHBl
ckxlZnRbMl0gPSB7IDAsIDAgfTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5h
bWU7CisgICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0OworCiAjaWYgVVNFKE9QRU5HTF9F
UykKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTEVTVGV4
dHVyZUdldE5hbWUoaW5wdXRWaWRlb1RleHR1cmUpOwotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVy
ZVRhcmdldCA9IENWT3BlbkdMRVNUZXh0dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsK
KyAgICB2aWRlb1RleHR1cmVOYW1lID0gQ1ZPcGVuR0xFU1RleHR1cmVHZXROYW1lKGlucHV0Vmlk
ZW9UZXh0dXJlKTsKKyAgICB2aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTEVTVGV4dHVyZUdl
dFRhcmdldChpbnB1dFZpZGVvVGV4dHVyZSk7CiAgICAgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVh
blRleENvb3JkcyhpbnB1dFZpZGVvVGV4dHVyZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1cHBl
clJpZ2h0LCB1cHBlckxlZnQpOwogI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTFRleHR1cmVHZXROYW1lKGlucHV0VmlkZW9U
ZXh0dXJlKTsKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1
cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1RleHR1cmUpOworICAgIHZpZGVvVGV4dHVyZU5hbWUgPSBD
Vk9wZW5HTFRleHR1cmVHZXROYW1lKGlucHV0VmlkZW9UZXh0dXJlKTsKKyAgICB2aWRlb1RleHR1
cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1RleHR1cmUpOwog
ICAgIENWT3BlbkdMVGV4dHVyZUdldENsZWFuVGV4Q29vcmRzKGlucHV0VmlkZW9UZXh0dXJlLCBs
b3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVyUmlnaHQsIHVwcGVyTGVmdCk7CiAjZWxpZiBVU0Uo
QU5HTEUpCi0gICAgUGxhdGZvcm0zRE9iamVjdCB2aWRlb1RleHR1cmVOYW1lID0gQ1ZPcGVuR0xU
ZXh0dXJlR2V0TmFtZShpbnB1dFZpZGVvVGV4dHVyZSk7Ci0gICAgR0MzRGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gQ1ZPcGVuR0xUZXh0dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsK
LSAgICBDVk9wZW5HTFRleHR1cmVHZXRDbGVhblRleENvb3JkcyhpbnB1dFZpZGVvVGV4dHVyZSwg
bG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1cHBlclJpZ2h0LCB1cHBlckxlZnQpOworICAgIFVOVVNF
RF9QQVJBTShsb3dlckxlZnQpOworICAgIFVOVVNFRF9QQVJBTShsb3dlclJpZ2h0KTsKKyAgICBV
TlVTRURfUEFSQU0odXBwZXJMZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0odXBwZXJSaWdodCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBV
TlVTRURfUEFSQU0ob3V0cHV0VGV4dHVyZSk7CisgICAgVU5VU0VEX1BBUkFNKG91dHB1dFRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxG
b3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBl
KTsKKyAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7CisgICAgVU5VU0VEX1BBUkFN
KGZsaXBZKTsKKyAgICBVTlVTRURfUEFSQU0oc3dhcENvbG9yQ2hhbm5lbHMpOwogICAgIC8vIEZJ
WE1FOiBkZXRlcm1pbmUgaG93IHRvIGFjY2VzcyByZWN0YW5ndWxhciB0ZXh0dXJlcyB2aWEgQU5H
TEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgogCiAgICAgaWYgKGxvd2VyTGVmdFsxXSA8IHVwcGVyUmln
aHRbMV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKaW5kZXggMmZmYTZiNzc2
NzM3M2NiNzc4YjBhNTA0ZjUzOTVmMGU4NGVjYzc2ZS4uYmNkNzI0NjhlMDVjNzI0YjMwZmU1ZWY0
ZDFjMjM5YmI3YTU3ZjRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcApA
QCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVT
RShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQogI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcuaCIKIAogI2lmIFVTRShMSUJFUE9YWSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2lmIFVT
RShPUEVOR0xfRVMpCiAjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsLmg+Ci0jZWxzZQorI2VsaWYg
VVNFKE9QRU5HTCkKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdM
U2V0dGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBv
cmFyeU9wZW5HTFNldHRpbmcuaAppbmRleCBjYjUxNjk1YjcxZGI3NTI3NmFiMTQzODYzY2VhYjdj
N2I3YzE2N2RlLi4zYjg1NDMxMjk2YzM4MWFkNGI1ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKQEAgLTI0LDExICsyNCwxMiBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFRlbXBvcmFyeU9wZW5HTFNldHRpbmdfaAotI2RlZmluZSBU
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCiAKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShP
UEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQorCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383082</attachid>
            <date>2019-11-07 15:17:02 -0800</date>
            <delta_ts>2019-11-08 11:03:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202159-20191108101659.patch</filename>
            <type>text/plain</type>
            <size>168663</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNDFlZTllMGFhMWE5YTVmNjc3NWE2NzFmZTY3Njk2MzBlY2RjZjkyNS4uODY5YjA1YzRlMTJi
MGE0ZTQ1NmE3MzBhYTQzNGQwMWZjYjc0N2Y1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2NyBAQAorMjAxOS0xMS0wNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIEFOR0xFIGJhY2tlbmQgZm9yIGlPUyBkZXZpY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE1OQorICAgICAg
ICA8cmRhcjovLzU3MDAwMTY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhbiBPcGVuR0xFUyBiYWNrZW5kIG92ZXIgRUFHTCBmb3IgaU9TIHRv
IEFOR0xFLgorCisgICAgICAgIFRoaXMgaXMgYmFzaWNhbGx5IGEgY29weSBvZiBhbGwgdGhlIGZp
bGVzIGluCisgICAgICAgIGxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbCBpbnRvIGxpYkFOR0xFL3Jl
bmRlcmVyL2dsL2VhZ2wsIHRoZW4gd2l0aAorICAgICAgICBtb2RpZmljYXRpb25zIHRvIG1ha2Ug
aXQgd29yayBvbiBpT1MncyBPcGVuR0wgRVMuIE1vc3Qgbm90YWJseSwKKyAgICAgICAgc29tZSBm
b3JtYXQgZW51bXMgYW5kIHRoZSBtYW5uZXIgaW4gd2hpY2ggeW91IGJpbmQgYW4gSU9TdXJmYWNl
IHRvCisgICAgICAgIGEgR0wgdGV4dHVyZSBhcmUgZGlmZmVyZW50LgorCisgICAgICAgIFRoaXMg
aW50cm9kdWNlcyBhIGZldyBwbGFjZXMgd2hlcmUgd2UgaGF2ZSB0byBkbyBhIGNvbXBpbGUgdGlt
ZQorICAgICAgICBzd2l0Y2ggZm9yIGlPUywgc29tZSBvZiB3aGljaCBtaWdodCBhY3R1YWxseSBi
ZSBhcHBsaWNhYmxlIHRvCisgICAgICAgIG90aGVyIE9wZW5HTCBFUyBiYWNrZW5kcy4KKworICAg
ICAgICBUaGUgYmlnZ2VzdCBtaXNzaW5nIHBpZWNlIGlzIHN1cHBvcnQgZm9yIHRoZSBpT1Mgc2lt
dWxhdG9yLiBBdCB0aGUgbW9tZW50CisgICAgICAgIHRoaXMgYmFja2VuZCByZWxpZXMgb24gYW4g
SU9TdXJmYWNlIGJpbmRpbmcgYXMgYSByZW5kZXJpbmcgdGFyZ2V0LgorICAgICAgICBCdXQgdGhl
IGlPUyBTaW11bGF0b3IgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWlyZWQgYWJpbGl0eSB0byBoYXZl
IGEKKyAgICAgICAgR0wgRVMgdGV4dHVyZSBiYWNrZWQgYnkgYW4gSU9TdXJmYWNlLgorCisgICAg
ICAgIFRoZSBXaW5kb3dTdXJmYWNlRUFHTCBjb2RlIGlzIGluY29tcGxldGUsIGJ1dCB3YXMgbm90
IG5lY2Vzc2FyeQorICAgICAgICBpbiBvcmRlciB0byBnZXQgV2ViR0wgb3BlcmF0aW9uYWwuIEFu
ZCBldmVuIGlmIHlvdSBhcmUgdXNpbmcgQU5HTEUKKyAgICAgICAgZGlyZWN0bHksIHlvdSBjYW4g
aGF2ZSB0aGUgY2xpZW50IGNvZGUgcmVuZGVyIGludG8gYSBDQUxheWVyIHdpdGhvdXQKKyAgICAg
ICAgZ29pbmcgdGhyb3VnaCB0aGUgV2luZG93U3VyZmFjZS4KKworICAgICAgICAqIEFOR0xFLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9FR0wvZWdsZXh0X2Fu
Z2xlLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9QYWNrZWRFbnVtcy5jcHA6CisgICAgICAgIChl
Z2xfZ2w6OkVHTFRleHR1cmVUYXJnZXRUb1RleHR1cmVUeXBlKToKKyAgICAgICAgKiBzcmMvY29t
bW9uL3BsYXRmb3JtLmg6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKToKKyAgICAgICAg
KiBzcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjLmNw
cC4KKyAgICAgICAgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKToKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvQ2Fwcy5oOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9EaXNwbGF5LmNwcDoKKyAgICAgICAg
KiBzcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwOgorICAgICAgICAoZ2w6OkJ1aWxkSW50ZXJu
YWxGb3JtYXRJbmZvTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2ds
L0RldmljZUNHTC5jcHA6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvSU9T
dXJmYWNlU3VyZmFjZUNHTC5jcHA6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUNHTDo6
YmluZFRleEltYWdlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1Bi
dWZmZXJTdXJmYWNlQ0dMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL1JlbmRlcmVyQ0dMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL1dpbmRvd1N1cmZhY2VDR0wubW06CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2VhZ2wvQ29udGV4dEVBR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ4OjpDb250ZXh0RUFH
TDo6Q29udGV4dEVBR0wpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWds
L0NvbnRleHRFQUdMLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0RldmljZUVBR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ4OjpEZXZpY2VFQUdMOjpE
ZXZpY2VFQUdMKToKKyAgICAgICAgKHJ4OjpEZXZpY2VFQUdMOjp+RGV2aWNlRUFHTCk6CisgICAg
ICAgIChyeDo6RGV2aWNlRUFHTDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6RGV2aWNlRUFH
TDo6Z2V0QXR0cmlidXRlKToKKyAgICAgICAgKHJ4OjpEZXZpY2VFQUdMOjpnZXRUeXBlKToKKyAg
ICAgICAgKHJ4OjpEZXZpY2VFQUdMOjpnZW5lcmF0ZUV4dGVuc2lvbnMgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wu
bW06IEFkZGVkLgorICAgICAgICAocng6OkZ1bmN0aW9uc0dMRUFHTDo6RnVuY3Rpb25zR0xFQUdM
KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6RGlzcGxheUVBR0wpOgorICAgICAgICAocng6
OkRpc3BsYXlFQUdMOjp+RGlzcGxheUVBR0wpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjpp
bml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6dGVybWluYXRlKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5RUFHTDo6Y3JlYXRlV2luZG93U3VyZmFjZSk6CisgICAgICAgIChyeDo6
RGlzcGxheUVBR0w6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5
RUFHTDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlFQUdMOjpjcmVhdGVQaXhtYXBTdXJmYWNlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6
Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmNyZWF0ZURldmljZSk6
CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlQ29uZmlncyk6CisgICAgICAgIChy
eDo6RGlzcGxheUVBR0w6OnRlc3REZXZpY2VMb3N0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6cmVzdG9yZUxvc3REZXZpY2UpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjppc1ZhbGlk
TmF0aXZlV2luZG93IGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6dmFsaWRhdGVD
bGllbnRCdWZmZXIgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjpnZXRWZW5kb3JT
dHJpbmcgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdMOjpnZXRFQUdMQ29udGV4dCBj
b25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdldEVBR0xQaXhlbEZvcm1hdCBjb25z
dCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyBjb25zdCk6
CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlQ2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6RGlzcGxheUVBR0w6OndhaXRDbGllbnQpOgorICAgICAgICAocng6OkRpc3BsYXlFQUdM
Ojp3YWl0TmF0aXZlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6Z2V0TWF4U3VwcG9ydGVk
RVNWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6bWFrZUN1cnJlbnRT
dXJmYWNlbGVzcyk6CisgICAgICAgIChyeDo6V29ya2VyQ29udGV4dEVBR0w6OldvcmtlckNvbnRl
eHRFQUdMKToKKyAgICAgICAgKHJ4OjpXb3JrZXJDb250ZXh0RUFHTDo6fldvcmtlckNvbnRleHRF
QUdMKToKKyAgICAgICAgKHJ4OjpXb3JrZXJDb250ZXh0RUFHTDo6bWFrZUN1cnJlbnQpOgorICAg
ICAgICAocng6OldvcmtlckNvbnRleHRFQUdMOjp1bm1ha2VDdXJyZW50KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5RUFHTDo6Y3JlYXRlV29ya2VyQ29udGV4dCk6CisgICAgICAgIChyeDo6RGlzcGxh
eUVBR0w6OmluaXRpYWxpemVGcm9udGVuZEZlYXR1cmVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjpE
aXNwbGF5RUFHTDo6cG9wdWxhdGVGZWF0dXJlTGlzdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wubW06
IENvcGllZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9jZ2wvSU9TdXJmYWNlU3VyZmFjZUNHTC5jcHAuCisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZUVBR0w6OklPU3VyZmFjZVN1cmZhY2VFQUdMKToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6fklPU3VyZmFjZVN1cmZhY2VFQUdMKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlRUFHTDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFH
TDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6OnN3
YXApOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpwb3N0U3ViQnVmZmVyKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6cXVlcnlTdXJmYWNlUG9pbnRlckFO
R0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6cmVsZWFzZVRleEltYWdlKToKKyAg
ICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6c2V0U3dhcEludGVydmFsKToKKyAgICAg
ICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlRUFHTDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAo
cng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpnZXRIZWlnaHQgY29uc3QpOgorICAgICAgICAocng6
OklPU3VyZmFjZVN1cmZhY2VFQUdMOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgY29uc3QpOgor
ICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpnZXRTd2FwQmVoYXZpb3IgY29uc3Qp
OgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMp
OgorICAgICAgICAocng6OklPU3VyZmFjZUZyYW1lYnVmZmVyOjpJT1N1cmZhY2VGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6OmNyZWF0ZURlZmF1bHRGcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZUVBR0w6OmluaXRpYWxpemVB
bHBoYUNoYW5uZWwpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VFQUdMOjpoYXNFbXVs
YXRlZEFscGhhQ2hhbm5lbCBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9QYnVmZmVyU3VyZmFjZUNH
TC5jcHAuCisgICAgICAgIChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjpQYnVmZmVyU3VyZmFjZUVB
R0wpOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6flBidWZmZXJTdXJmYWNlRUFH
TCk6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjppbml0aWFsaXplKToKKyAgICAg
ICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKHJ4OjpQ
YnVmZmVyU3VyZmFjZUVBR0w6OnN3YXApOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFH
TDo6cG9zdFN1YkJ1ZmZlcik6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjpxdWVy
eVN1cmZhY2VQb2ludGVyQU5HTEUpOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6
YmluZFRleEltYWdlKToKKyAgICAgICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6OnJlbGVhc2VU
ZXhJbWFnZSk6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjpzZXRTd2FwSW50ZXJ2
YWwpOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6Z2V0V2lkdGggY29uc3QpOgor
ICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6Z2V0SGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKHJ4OjpQYnVmZmVyU3VyZmFjZUVBR0w6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCBjb25z
dCk6CisgICAgICAgIChyeDo6UGJ1ZmZlclN1cmZhY2VFQUdMOjpnZXRTd2FwQmVoYXZpb3IgY29u
c3QpOgorICAgICAgICAocng6OlBidWZmZXJTdXJmYWNlRUFHTDo6Y3JlYXRlRGVmYXVsdEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9QYnVmZmVy
U3VyZmFjZUVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2VhZ2wvUmVuZGVyZXJFQUdMLmNwcDogQWRkZWQuCisgICAgICAgIChyeDo6UmVuZGVyZXJFQUdM
OjpSZW5kZXJlckVBR0wpOgorICAgICAgICAocng6OlJlbmRlcmVyRUFHTDo6flJlbmRlcmVyRUFH
TCk6CisgICAgICAgIChyeDo6UmVuZGVyZXJFQUdMOjpjcmVhdGVXb3JrZXJDb250ZXh0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFj
ZUVBR0wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wv
V2luZG93U3VyZmFjZUVBR0wubW06IENvcGllZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvV2luZG93U3VyZmFjZUNHTC5tbS4KKyAgICAg
ICAgKC1bV2ViU3dhcExheWVyIGluaXRXaXRoU2hhcmVkU3RhdGU6d2l0aENvbnRleHQ6d2l0aEZ1
bmN0aW9uczpdKToKKyAgICAgICAgKC1bV2ViU3dhcExheWVyIGRpc3BsYXldKToKKyAgICAgICAg
KHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6V2luZG93U3VyZmFjZUVBR0wpOgorICAgICAgICAocng6
OldpbmRvd1N1cmZhY2VFQUdMOjp+V2luZG93U3VyZmFjZUVBR0wpOgorICAgICAgICAocng6Oldp
bmRvd1N1cmZhY2VFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNl
RUFHTDo6bWFrZUN1cnJlbnQpOgorICAgICAgICAocng6OldpbmRvd1N1cmZhY2VFQUdMOjpzd2Fw
KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcik6CisgICAg
ICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6OnF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRSk6Cisg
ICAgICAgIChyeDo6V2luZG93U3VyZmFjZUVBR0w6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChy
eDo6V2luZG93U3VyZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChyeDo6V2lu
ZG93U3VyZmFjZUVBR0w6OnNldFN3YXBJbnRlcnZhbCk6CisgICAgICAgIChyeDo6V2luZG93U3Vy
ZmFjZUVBR0w6OmdldFdpZHRoIGNvbnN0KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFH
TDo6Z2V0SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNlRUFHTDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNl
RUFHTDo6Z2V0U3dhcEJlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKHJ4OjpXaW5kb3dTdXJmYWNl
RUFHTDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHA6CisgICAgICAgIChyeDo6bmF0aXZlZ2xf
Z2w6OkdlbmVyYXRlQ2Fwcyk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzIu
Y3BwOgorICAgICAgICAoZ2w6OlZhbGlkYXRlRnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuY3BwOgorCiAyMDE5LTExLTA2
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbQU5HTEVdIElPU3Vy
ZmFjZVN1cmZhY2VDR0wgaGFzIGZvcm1hdCBhbmQgaW50ZXJuYWxGb3JtYXQgZmxpcHBlZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGQwYTE4MTBjNWFiYjU1M2U1NTExOWFlNTEyNzZiZDQyYzA0NmI5YWEuLmNjNDM3
MjlmN2E2MGNkMjEwMTZmZmRjYmEzOWMxNmFkMDQzOGRlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NSBAQAorMjAxOS0xMS0wNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIEFOR0xFIGJhY2tlbmQgZm9yIGlPUyBkZXZpY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE1OQorICAgICAgICA8cmRhcjovLzU3
MDAwMTY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSB0aGUgQU5HTEUgZm9yIGlPUyBiYWNrZW5kLgorCisgICAgICAgIE1vc3RseSB0aGlzIHdh
cyBqdXN0IG1vdmluZyBzb21lIGNvZGUgYXJvdW5kIHNvIHRoYXQgaXQgd291bGQgY29tcGlsZQor
ICAgICAgICBvbiBpT1Mgd2hlbiBVU0UoQU5HTEUpIGlzIHRydWUuIFRoZSBhY3R1YWwgY29kZSB0
byByZW5kZXIgV2ViR0wgaXMKKyAgICAgICAgc2ltaWxhciBiZXR3ZWVuIG1hY09TIGFuZCBpT1Mg
LSBib3RoIG5vdyB1c2luZyBhIENBTGF5ZXIgd2l0aAorICAgICAgICBhIHNldCBvZiBJT1N1cmZh
Y2VzIHRoYXQgYXJlIHVzZWQgYXMgc3dhcCB0ZXh0dXJlcy4KKworICAgICAgICBUaGUgbWFpbiBk
aWZmZXJlbmNlIGlzIHRoYXQgbWFjT1MgKE9wZW5HTCkgYmluZHMgdG8gVEVYVFVSRV9SRUNUQU5H
TEUsCisgICAgICAgIGFuZCBpT1MgKE9wZW5HTCBFUykgYmluZHMgdG8gdGhlIHJlZ3VsYXIgVEVY
VFVSRV8yRC4KKworICAgICAgICBUaGUgcmVtYWluaW5nIG1pc3NpbmcgcGllY2UgaXMgZ2V0dGlu
ZyB2aWRlbyB0ZXh0dXJlcyBpbnRvIEFOR0xFCisgICAgICAgIGVmZmljaWVudGx5ICh3aXRob3V0
IGxlYXZpbmcgdGhlIEdQVSkuIFdlIGNhbiBhc2sgQ29yZVZpZGVvCisgICAgICAgIHRvIGdpdmUg
dXMgcmF3IEdMIHRleHR1cmVzLCBidXQgd2l0aCBBTkdMRSB3ZSBubyBsb25nZXIgaGF2ZSBkaXJl
Y3QgYWNjZXNzCisgICAgICAgIHRvIHRoZSB1bmRlcmx5aW5nIE9wZW5HTCBjb250ZXh0LgorCisg
ICAgICAgIFRoaXMgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGJ1aWxkcyB5ZXQsIHNvIG5vIHRlc3Rz
LiBIb3dldmVyLCB3aGVuCisgICAgICAgIGVuYWJsZWQgaXQgd2lsbCBiZSB0ZXN0ZWQgYWdhaW5z
dCB0aGUgb2ZmaWNpYWwgV2ViR0wgY29uZm9ybWFuY2Ugc3VpdGUuCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJh
Y2tpbmdTdG9yZUZyb21MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDpd
KToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5XSk6CisgICAgICAgICgtW1dlYkdMTGF5
ZXIgc2V0RUdMRGlzcGxheTpjb25maWc6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgYWxsb2Nh
dGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTp1c2luZ0FscGhhOl0pOgorICAgICAgICAo
LVtXZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdKToKKyAg
ICAgICAgKC1bV2ViR0xMYXllciBzZXRFR0xEaXNwbGF5OmFuZENvbmZpZzpdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVDYWNoZUNWOjp0ZXh0dXJlRnJvbUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
bXBvcmFyeU9wZW5HTFNldHRpbmcuaDoKKwogMjAxOS0xMS0wNyAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRmFjdG9yIG1hdGNoZWQgZGVjbGFyYXRpb25zIGNh
Y2hlIGludG8gYSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmRhMDVmZTZiZjE4OWI4OGQ2YzAx
YTM0NGJjMGJlMmFlYzdhMmFkYS4uNzcyNGEzMGRmMDZjMzBjMmRjY2VhY2Y3NmU0Mzk0MmUzYTdm
ZjYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MCw2ICs2MCwxOSBAQAogCQkzMTAxMkU4MDE4Qjk3
QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTExMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xT
TC5oICovOyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4g
Q29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVG
RUM5MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAw
OTdFQkM3IC8qIExJQ0VOU0UgaW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAvKiBMSUNFTlNFICovOyB9OworCQkz
MTNCQ0U1NDIzNjExMzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0JDRTQ2MjM2MTEzMzgwMEZDMzlFNSAv
KiBEaXNwbGF5RUFHTC5oICovOyB9OworCQkzMTNCQ0U1NTIzNjExMzNBMDBGQzM5RTUgLyogSU9T
dXJmYWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxM0JDRTQ3MjM2MTEzMzgwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFH
TC5oICovOyB9OworCQkzMTNCQ0U1NjIzNjExMzNBMDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VF
QUdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
M0JDRTQ4MjM2MTEzMzgwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wuY3BwICovOyB9Owor
CQkzMTNCQ0U1NzIzNjExMzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0OTIzNjExMzM5MDBGQzM5
RTUgLyogUmVuZGVyZXJFQUdMLmggKi87IH07CisJCTMxM0JDRTU4MjM2MTEzM0EwMEZDMzlFNSAv
KiBDb250ZXh0RUFHTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTNCQ0U0QTIzNjExMzM5MDBGQzM5RTUgLyogQ29udGV4dEVBR0wuY3BwICovOyB9
OworCQkzMTNCQ0U1OTIzNjExMzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0JDRTRCMjM2MTEzMzkw
MEZDMzlFNSAvKiBSZW5kZXJlckVBR0wuY3BwICovOyB9OworCQkzMTNCQ0U1QTIzNjExMzNBMDBG
QzM5RTUgLyogRGV2aWNlRUFHTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTNCQ0U0QzIzNjExMzM5MDBGQzM5RTUgLyogRGV2aWNlRUFHTC5jcHAg
Ki87IH07CisJCTMxM0JDRTVCMjM2MTEzM0EwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0RDIzNjExMzM5
MDBGQzM5RTUgLyogRGV2aWNlRUFHTC5oICovOyB9OworCQkzMTNCQ0U1QzIzNjExMzNBMDBGQzM5
RTUgLyogSU9TdXJmYWNlU3VyZmFjZUVBR0wubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U0RTIzNjExMzM5MDBGQzM5RTUgLyogSU9TdXJmYWNl
U3VyZmFjZUVBR0wubW0gKi87IH07CisJCTMxM0JDRTVEMjM2MTEzM0EwMEZDMzlFNSAvKiBQYnVm
ZmVyU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxM0JDRTRGMjM2MTEzMzkwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wuaCAq
LzsgfTsKKwkJMzEzQkNFNUUyMzYxMTMzQTAwRkMzOUU1IC8qIFdpbmRvd1N1cmZhY2VFQUdMLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U1MDIz
NjExMzM5MDBGQzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCAqLzsgfTsKKwkJMzEzQkNFNUYy
MzYxMTMzQTAwRkMzOUU1IC8qIENvbnRleHRFQUdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0U1MTIzNjExMzM5MDBGQzM5RTUgLyogQ29udGV4
dEVBR0wuaCAqLzsgfTsKKwkJMzEzQkNFNjEyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdM
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNF
NTMyMzYxMTMzOTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1tICovOyB9OwogCQkzMTVFQkQzRjFG
Q0U0M0JEMDBBQzdBODkgLyogdW5pZm9ybV90eXBlX2luZm9fYXV0b2dlbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTVFQkQzRTFGQ0U0M0JEMDBB
QzdBODkgLyogdW5pZm9ybV90eXBlX2luZm9fYXV0b2dlbi5jcHAgKi87IH07CiAJCTMxNUVCRDc4
MUZDRTQ0MzYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVsa2FuLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAv
KiBUcmFuc2xhdG9yVnVsa2FuLmNwcCAqLzsgfTsKIAkJMzE1RUJEN0IxRkNFNDQzNjAwQUM3QTg5
IC8qIFV0aWxzSExTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTVFQkQ0MzFGQ0U0NDI3MDBBQzdBODkgLyogVXRpbHNITFNMLmNwcCAqLzsgfTsK
QEAgLTEzOSw2ICsxNTIsOSBAQAogCQkzMUEzMzFDODFFQTVFRDVGMDBGRDIyMDMgLyogdmVjdG9y
X3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MUEzMzFDNTFFQTVFRDVGMDBGRDIyMDMgLyogdmVjdG9yX3V0aWxzLmggKi87IH07CiAJCTMxQTMz
MURDMUVBNUVEREEwMEZEMjIwMyAvKiBTZXZlcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBMzMxRDExRUE1RUREQTAwRkQyMjAzIC8qIFNldmVy
aXR5LmggKi87IH07CiAJCTMxQTMzMUUyMUVBNUVGQjgwMEZEMjIwMyAvKiB0cmFjZV9ldmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBMzMxRTEx
RUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggKi87IH07CisJCTMxQjE1NzIwMjM2QjdG
QUYwMENBQTRGRCAvKiBTeXN0ZW1JbmZvX2lvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIxNTcxRjIzNkI3RkFFMDBDQUE0RkQgLyogU3lzdGVt
SW5mb19pb3MuY3BwICovOyB9OworCQkzMUIxNTcyMjIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVt
SW5mb19pbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzFCMTU3MjEyMzZCODAzMzAwQ0FBNEZEIC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCAq
LzsgfTsKKwkJMzFCMTU3MjMyMzZCODJCQjAwQ0FBNEZEIC8qIFdpbmRvd1N1cmZhY2VFQUdMLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFNTIy
MzYxMTMzOTAwRkMzOUU1IC8qIFdpbmRvd1N1cmZhY2VFQUdMLm1tICovOyB9OwogCQk1QzFCQUE5
QTFERkI2MEZGMDAyOTA2QkIgLyogZ2wzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzFCQUE5NjFERkI2MEZGMDAyOTA2QkIgLyogZ2wzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk1QzFCQUE5QjFERkI2
MEZGMDAyOTA2QkIgLyogZ2wzcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDMUJBQTk3MURGQjYwRkYwMDI5MDZCQiAvKiBnbDNwbGF0Zm9y
bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNUMx
QkFBOUMxREZCNjBGRjAwMjkwNkJCIC8qIGdsMzEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMUJBQTk4MURGQjYwRkYwMDI5MDZCQiAvKiBnbDMxLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwpAQCAtNTQyLDcg
KzU1OCw3IEBACiAJCTVDQ0Q1OTkzMjI4NEZDNDAwMDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQ0Q1OThCMjI4
NEZDNDAwMDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCAqLzsgfTsKIAkJNUNDRDU5OTQyMjg0RkM0
MDAwMThGMkQ4IC8qIGdlbmVyYXRlbWlwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0NENTk4QzIyODRGQzQwMDAxOEYyRDggLyogZ2VuZXJhdGVtaXAu
aCAqLzsgfTsKIAkJNUNDRDU5OTUyMjg0RkM0MDAwMThGMkQ4IC8qIGxvYWRpbWFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0NENTk4RDIyODRG
QzQwMDAxOEYyRDggLyogbG9hZGltYWdlLmNwcCAqLzsgfTsKLQkJNUNDRDU5OUEyMjg0RkM3NTAw
MThGMkQ4IC8qIFN5c3RlbUluZm9fbWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDQ0Q1OTk3MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZv
X21hYy5jcHAgKi87IH07CisJCTVDQ0Q1OTlBMjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZv
X21hY29zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQ0Q1OTk3MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvX21hY29zLmNwcCAqLzsgfTsK
IAkJNUNDRDU5OUIyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDRDU5OTgyMjg0RkM3NTAwMThG
MkQ4IC8qIFN5c3RlbUluZm8uY3BwICovOyB9OwogCQk1Q0NENTk5QzIyODRGQzc1MDAxOEYyRDgg
LyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNDRDU5OTkyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uaCAqLzsgfTsKIAkJ
NUNDRDU5OUUyMjg0RkNERTAwMThGMkQ4IC8qIENvbnRleHRfZ2xlc18xXzAuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDRDU5OUQyMjg0RkNERDAw
MThGMkQ4IC8qIENvbnRleHRfZ2xlc18xXzAuY3BwICovOyB9OwpAQCAtODAxLDYgKzgxNywyMCBA
QAogCQkzMTAxMkUxMTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIExJQ0VOU0UgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTElDRU5TRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEzQkNFNDYyMzYxMTMzODAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlFQUdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxM0JDRTQ3MjM2MTEzMzgwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJT1N1cmZhY2VTdXJmYWNlRUFHTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTNCQ0U0ODIzNjExMzM4MDBGQzM5RTUg
LyogUGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBidWZmZXJTdXJmYWNlRUFHTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxM0JDRTQ5MjM2MTEzMzkwMEZDMzlFNSAvKiBSZW5kZXJlckVBR0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyZXJFQUdMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxM0JDRTRBMjM2MTEzMzkwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZXh0RUFHTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxM0JDRTRCMjM2MTEzMzkwMEZDMzlFNSAvKiBS
ZW5kZXJlckVBR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyZXJFQUdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEzQkNFNEMyMzYx
MTMzOTAwRkMzOUU1IC8qIERldmljZUVBR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGV2aWNlRUFHTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxM0JDRTREMjM2MTEzMzkwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZUVBR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEzQkNFNEUyMzYxMTMzOTAwRkMzOUU1IC8qIElPU3VyZmFjZVN1cmZhY2VFQUdMLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFj
ZUVBR0wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxM0JDRTRGMjM2MTEzMzkw
MEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVBR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGJ1ZmZlclN1cmZhY2VFQUdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxM0JDRTUwMjM2MTEzMzkwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5kb3dTdXJmYWNlRUFHTC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTNCQ0U1MTIzNjExMzM5MDBGQzM5RTUgLyogQ29udGV4
dEVBR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGV4dEVBR0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEzQkNFNTIyMzYxMTMzOTAwRkMzOUU1IC8q
IFdpbmRvd1N1cmZhY2VFQUdMLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2luZG93U3VyZmFjZUVBR0wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxM0JDRTUzMjM2MTEzMzkwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlFQUdMLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTVFQkQzRTFGQ0U0M0JEMDBBQzdBODkgLyogdW5pZm9ybV90eXBl
X2luZm9fYXV0b2dlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1
bmlmb3JtX3R5cGVfaW5mb19hdXRvZ2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzE1RUJENDAxRkNFNDQyNjAwQUM3QTg5IC8qIFRyYW5zbGF0b3JWdWxrYW4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvclZ1bGthbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNUVCRDQzMUZDRTQ0MjcwMEFDN0E4OSAvKiBV
dGlsc0hMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXRpbHNI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4MSw2ICs5MTEsOCBAQAog
CQkzMUEzMzFDNTFFQTVFRDVGMDBGRDIyMDMgLyogdmVjdG9yX3V0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHZlY3Rvcl91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMUEzMzFEMTFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V2ZXJpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFBMzMxRTExRUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHRyYWNlX2V2ZW50Lmg7IHBhdGggPSB0cmFj
ZV9ldmVudC90cmFjZV9ldmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUIx
NTcxRjIzNkI3RkFFMDBDQUE0RkQgLyogU3lzdGVtSW5mb19pb3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtSW5mb19pb3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMUIxNTcyMTIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVtSW5mb19p
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1JbmZvX2lu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMUJBQTk2MURGQjYwRkYw
MDI5MDZCQiAvKiBnbDMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZ2wzLmg7
IHBhdGggPSBpbmNsdWRlL0dMRVMzL2dsMy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1QzFCQUE5NzFERkI2MEZGMDAyOTA2QkIgLyogZ2wzcGxhdGZvcm0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gZ2wzcGxhdGZvcm0uaDsgcGF0aCA9IGluY2x1ZGUvR0xFUzMv
Z2wzcGxhdGZvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxQkFBOTgxREZC
NjBGRjAwMjkwNkJCIC8qIGdsMzEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Z2wzMS5oOyBwYXRoID0gaW5jbHVkZS9HTEVTMy9nbDMxLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjg1LDcgKzEzMTcsNyBAQAogCQk1Q0NENTk4QjIyODRGQzQwMDAxOEYyRDgg
LyogaW1hZ2Vmb3JtYXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGltYWdl
Zm9ybWF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0NENTk4QzIyODRGQzQw
MDAxOEYyRDggLyogZ2VuZXJhdGVtaXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gZ2VuZXJhdGVtaXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDRDU5OEQy
Mjg0RkM0MDAwMThGMkQ4IC8qIGxvYWRpbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsb2FkaW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1Q0NENTk5NzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mb19tYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtSW5mb19tYWMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1Q0NENTk5NzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVt
SW5mb19tYWNvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeXN0
ZW1JbmZvX21hY29zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNDRDU5OTgy
Mjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3lzdGVtSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDQ0Q1OTk5MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUNDRDU5OUQyMjg0RkNERDAwMThGMkQ4IC8qIENvbnRleHRfZ2xlc18xXzAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGV4dF9nbGVzXzFfMC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIzLDYgKzE2NTUsMjcgQEAKIAkJ
CW5hbWUgPSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMzEzQkNF
MjcyMzYwRjc4OTAwRkMzOUU1IC8qIGVhZ2wgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTMxM0JDRTRBMjM2MTEzMzkwMEZDMzlFNSAvKiBDb250ZXh0RUFH
TC5jcHAgKi8sCisJCQkJMzEzQkNFNTEyMzYxMTMzOTAwRkMzOUU1IC8qIENvbnRleHRFQUdMLmgg
Ki8sCisJCQkJMzEzQkNFNEMyMzYxMTMzOTAwRkMzOUU1IC8qIERldmljZUVBR0wuY3BwICovLAor
CQkJCTMxM0JDRTREMjM2MTEzMzkwMEZDMzlFNSAvKiBEZXZpY2VFQUdMLmggKi8sCisJCQkJMzEz
QkNFNDYyMzYxMTMzODAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLmggKi8sCisJCQkJMzEzQkNFNTMy
MzYxMTMzOTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1tICovLAorCQkJCTMxM0JDRTQ3MjM2MTEz
MzgwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5oICovLAorCQkJCTMxM0JDRTRFMjM2
MTEzMzkwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSAqLywKKwkJCQkzMTNCQ0U0
ODIzNjExMzM4MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCAqLywKKwkJCQkzMTNC
Q0U0RjIzNjExMzM5MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmggKi8sCisJCQkJMzEz
QkNFNEIyMzYxMTMzOTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5jcHAgKi8sCisJCQkJMzEzQkNF
NDkyMzYxMTMzOTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5oICovLAorCQkJCTMxM0JDRTUwMjM2
MTEzMzkwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5oICovLAorCQkJCTMxM0JDRTUyMjM2
MTEzMzkwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5tbSAqLywKKwkJCSk7CisJCQlwYXRo
ID0gZWFnbDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTMxNUVCRTBCMUZD
RTQ1QUMwMEFDN0E4OSAvKiB0aGlyZF9wYXJ0eSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC0yMzMzLDggKzIzODYsOSBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJNUNDRDU5OTgyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uY3BwICovLAogCQkJCTVD
Q0Q1OTk5MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmggKi8sCi0JCQkJMzEzQkNFNDQy
MzYwRjlBRDAwRkMzOUU1IC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCAqLywKLQkJCQk1Q0NENTk5
NzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mb19tYWMuY3BwICovLAorCQkJCTMxQjE1NzIx
MjM2QjgwMzMwMENBQTRGRCAvKiBTeXN0ZW1JbmZvX2ludGVybmFsLmggKi8sCisJCQkJMzFCMTU3
MUYyMzZCN0ZBRTAwQ0FBNEZEIC8qIFN5c3RlbUluZm9faW9zLmNwcCAqLywKKwkJCQk1Q0NENTk5
NzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mb19tYWNvcy5jcHAgKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGdwdWluZm91dGlsOwogCQkJcGF0aCA9IGdwdV9pbmZvX3V0aWw7CkBAIC0yNTQzLDcg
KzI1OTcsNyBAQAogCQkJCTVDMURCREUzMUIwNDM4RDMwMDIzNTU1MiAvKiBDb250ZXh0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcyNzIzMDVGN0M0MDAyREE5NzIgLyogQ29udGV4dC5pbmwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTdCMjI4NEZBODMwMDE4RjJEOCAvKiBDb250ZXh0
Q0dMLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTNCQ0UzRDIzNjBGNzhBMDBGQzM5RTUgLyogQ29u
dGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxM0JDRTVGMjM2MTEzM0EwMEZDMzlFNSAv
KiBDb250ZXh0RUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMUQxREUzOUYxQTAwRDJD
NDA1IC8qIENvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REUxREU0MTY0ODAw
RDJDNDA1IC8qIENvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk4RTIyODRG
QzQwMDAxOEYyRDggLyogY29weWltYWdlLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTQsNyArMjYw
OCw3IEBACiAJCQkJNUM1NUQ2ODkyMjgyNkI5RjAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlh
bGl6ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRFNzFCMDQzOEQzMDAyMzU1NTIgLyog
RGV2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTMxQTBBNDIzNEVFRUQ0MDBDODQ3ODQgLyog
RGV2aWNlQ0dMLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTNCQ0U0MzIzNjBGNzhBMDBGQzM5RTUg
LyogRGV2aWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEzQkNFNUIyMzYxMTMzQTAwRkMz
OUU1IC8qIERldmljZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEUwMURFNDE2NDgw
MEQyQzQwNSAvKiBEZXZpY2VJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyNzE4Qjk3
QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFE
MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLApAQCAt
MjU2NCw3ICsyNjE4LDcgQEAKIAkJCQkzMTVFQkRCQzFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0
Y2hUYWJsZUdMX2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREU5MUIwNDM4RDMw
MDIzNTU1MiAvKiBEaXNwbGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDE0RjFERTM5RjQ3
MDBEMkM0MDUgLyogRGlzcGxheUNHTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzEzQkNFM0IyMzYw
Rjc4QTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTNCQ0U1
NDIzNjExMzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
QjMwMTFGMURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQjMwNEUyMURFNDE2NDgwMEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE1RUJEQzkxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNjYzLDcgKzI3MTcsNyBAQAogCQkJCTVDNTVENzA4MjI4MjZDQjMwMEI1QkEy
QyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
NzAxMjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1UcmF2ZXJzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDRDU5NzcyMjg0RkE4MzAwMThGMkQ4IC8qIElPU3VyZmFjZVN1cmZhY2VDR0wuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTMxM0JDRTQxMjM2MEY3OEEwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJm
YWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEzQkNFNTUyMzYxMTMzQTAwRkMzOUU1IC8q
IElPU3VyZmFjZVN1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkQ4RTFGQ0U0
NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEyNjRGOENEMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJDMzIxQjA0Mzc1RjAwMjM1NTUyIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjcwNCw3ICsyNzU4LDcgQEAKIAkJCQk1Q0IzMDEyRTFERTM5RjFBMDBEMkM0
MDUgLyogUGF0aEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGMTFERTQxNjQ4MDBEMkM0
MDUgLyogUGF0aEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTUxMURFMzlGNDcwMEQy
QzQwNSAvKiBQYnVmZmVyU3VyZmFjZUNHTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzEzQkNFM0My
MzYwRjc4QTAwRkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzEzQkNFNUQyMzYxMTMzQTAwRkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJCRjUxQjA0MzZFQzAwMjM1NTUyIC8qIHBsYXRmb3JtLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTVFQkUyOTFGQ0Y4MDhDMDBBQzdBODkgLyogUE11ckhhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNTVENzI3MjI4Mjc0NzcwMEI1QkEyQyAvKiBQb29sQWxsb2Mu
aCBpbiBIZWFkZXJzICovLApAQCAtMjc0Myw3ICsyNzk3LDcgQEAKIAkJCQk1Q0IzMDRGNTFERTQx
NjQ4MDBEMkM0MDUgLyogUmVuZGVyYnVmZmVySW1wbF9tb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1Q0IzMDRGODFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDQ0Q1OTdDMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5kZXJlckNHTC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMzEzQkNFM0UyMzYwRjc4QTAwRkMzOUU1IC8qIFJlbmRlcmVyRUFHTC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8qIFJlbmRlcmVy
RUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzgxREUzOUYxQTAwRDJDNDA1IC8qIFJl
bmRlcmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM2MURFMzlGMUEwMEQyQzQwNSAv
KiByZW5kZXJlcmdsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcwNzIzMDVGNjM2
MDAyREE5NzIgLyogUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yODA4LDcgKzI4NjIsNyBAQAogCQkJCTMxQTMzMUM3MUVBNUVENUYwMEZEMjIwMyAvKiBzeXN0
ZW1fdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzJCMjI4Mjc0NzcwMEI1QkEyQyAv
KiBzeXN0ZW1fdXRpbHNfdW5pdHRlc3RfaGVscGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NE
NTk5QzIyODRGQzc1MDAxOEYyRDggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzEzQkNFNDUyMzYwRjlBRDAwRkMzOUU1IC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxQjE1NzIyMjM2QjgwMzMwMENBQTRGRCAvKiBTeXN0ZW1JbmZvX2ludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkYzMTFCMDQzOEQzMDAyMzU1NTIgLyogVGV4
dHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEOUUxRkNFNDQzNjAwQUM3QTg5IC8qIFRl
eHR1cmVGdW5jdGlvbkhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTQyMURFMzlGMUEw
MEQyQzQwNSAvKiBUZXh0dXJlR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMjg4Niw3ICsyOTQwLDcg
QEAKIAkJCQk1QzFEQkY0MjFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzU1RDcwMDIyODI2Q0IzMDBCNUJBMkMgLyogVmlzaXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEzMUI2MTgzMjMwQjc0N0YwMDE2MTBENyAvKiBXaW5kb3dTdXJmYWNl
Q0dMLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTNCQ0UzNzIzNjBGNzhBMDBGQzM5RTUgLyogV2lu
ZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxM0JDRTVFMjM2MTEzM0EwMEZD
MzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJERkEx
RkNFNDUyRDAwQUM3QTg5IC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NzUyMjgyNkI5RjAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTUxMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2guaCBp
biBIZWFkZXJzICovLApAQCAtMzAwNyw2ICszMDYxLDcgQEAKIAkJCQlBMzAzMDcyNDIzMDVGN0M0
MDAyREE5NzIgLyogQ29udGV4dF9nbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk5RTIy
ODRGQ0RFMDAxOEYyRDggLyogQ29udGV4dF9nbGVzXzFfMC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0NENTk3ODIyODRGQTgzMDAxOEYyRDggLyogQ29udGV4dENHTC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTNCQ0U1ODIzNjExMzNBMDBGQzM5RTUgLyogQ29udGV4dEVBR0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNCMzAxMUMxREUzOUYxQTAwRDJDNDA1IC8qIENvbnRleHRHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERDFERTQxNjQ4MDBEMkM0MDUgLyogQ29udGV4dElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5OEYyMjg0RkM0MDAwMThGMkQ4IC8qIGNv
cHlpbWFnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMTcsNiArMzA3Miw3IEBACiAJCQkJNUM1
NUQ2QUYyMjgyNkJDODAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDMURCREU2MUIwNDM4RDMwMDIzNTU1MiAvKiBEZXZpY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNkUzMUEwQTMyMzRFRUVENDAwQzg0Nzg0IC8qIERldmljZUNHTC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTNCQ0U1QTIzNjExMzNBMDBGQzM5RTUgLyogRGV2aWNl
RUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERjFERTQxNjQ4MDBEMkM0MDUgLyog
RGV2aWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUyNjE4Qjk3QjlCMDAzOTA2
MkYgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QUMxNjk3NERF
RDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMjYs
NiArMzA4Miw3IEBACiAJCQkJMzE1RUJEQkUxRkNFNDRCRjAwQUM3QTg5IC8qIERpc3BhdGNoVGFi
bGVHTF9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREU4MUIwNDM4RDMwMDIz
NTU1MiAvKiBEaXNwbGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZFMjI4NEY5NTEw
MDE4RjJEOCAvKiBEaXNwbGF5Q0dMLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzEzQkNFNjEyMzYx
MTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAx
MUUxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
Q0IzMDRFMTFERTQxNjQ4MDBEMkM0MDUgLyogRGlzcGxheUltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzE1RUJEQ0MxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTMwOTUsNiArMzE1Miw3IEBACiAJCQkJNUM1NUQ3MDQyMjgyNkNCMzAwQjVC
QTJDIC8qIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDcwMjIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNDRDU5NzkyMjg0RkE4MzAwMThGMkQ4IC8qIElPU3VyZmFjZVN1cmZhY2VDR0wu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEzQkNFNUMyMzYxMTMzQTAwRkMzOUU1IC8qIElPU3Vy
ZmFjZVN1cmZhY2VFQUdMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEOUMxRkNFNDQzNjAw
QUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEy
NjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
Q0IzMDRFRjFERTQxNjQ4MDBEMkM0MDUgLyogbG9hZF9mdW5jdGlvbnNfdGFibGVfYXV0b2dlbi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMxMjksNiArMzE4Nyw3IEBACiAJCQkJNUNDRDgxN0ExREJG
RTk5OTAwNjA2NkI4IC8qIFBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkQxREUz
OUYxQTAwRDJDNDA1IC8qIFBhdGhHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2RjIy
ODRGOTU1MDAxOEYyRDggLyogUGJ1ZmZlclN1cmZhY2VDR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzEzQkNFNTYyMzYxMTMzQTAwRkMzOUU1IC8qIFBidWZmZXJTdXJmYWNlRUFHTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1QzFEQkRGRTFCMDQzOEQzMDAyMzU1NTIgLyogUGxhdGZvcm0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJFMjgxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29s
QWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTYwLDYgKzMyMTksNyBAQAogCQkJCTVDQjMw
MTMzMURFMzlGMUEwMEQyQzQwNSAvKiBSZW5kZXJidWZmZXJHTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1Q0IzMDRGNzFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRpbHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNDRDU5N0EyMjg0RkE4MzAwMThGMkQ4IC8qIFJlbmRlcmVyQ0dMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxM0JDRTU5MjM2MTEzM0EwMEZDMzlFNSAvKiBSZW5kZXJl
ckVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMzcxREUzOUYxQTAwRDJDNDA1IC8q
IFJlbmRlcmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMzUxREUzOUYxQTAwRDJD
NDA1IC8qIHJlbmRlcmVyZ2xfdXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA3MDUy
MzA1RjYzNjAwMkRBOTcyIC8qIFJlcGxhY2VTaGFkb3dpbmdWYXJpYWJsZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0zMjEyLDcgKzMyNzIsOCBAQAogCQkJCTVDNTVENzMwMjI4Mjc0NzcwMEI1QkEy
QyAvKiBzeXN0ZW1fdXRpbHNfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MjAy
MjgyNzQ3NzAwQjVCQTJDIC8qIHN5c3RlbV91dGlsc191bml0dGVzdF9oZWxwZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNDRDU5OUIyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNUNDRDU5OUEyMjg0RkM3NTAwMThGMkQ4IC8qIFN5c3RlbUlu
Zm9fbWFjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxQjE1NzIwMjM2QjdGQUYwMENBQTRGRCAv
KiBTeXN0ZW1JbmZvX2lvcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0NENTk5QTIyODRGQzc1
MDAxOEYyRDggLyogU3lzdGVtSW5mb19tYWNvcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFE
QkYzMDFCMDQzOEQzMDAyMzU1NTIgLyogVGV4dHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTVFQkQ5OTFGQ0U0NDM2MDBBQzdBODkgLyogVGV4dHVyZUZ1bmN0aW9uSExTTC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0IzMDE0MTFERTM5RjFBMDBEMkM0MDUgLyogVGV4dHVyZUdMLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzI3NSw2ICszMzM2LDcgQEAKIAkJCQk1Q0IzMDE0NTFERTM5RjFB
MDBEMkM0MDUgLyogVmVydGV4QXJyYXlHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkY0
MTFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUEzMUI2MTg0MjMwQjc0N0YwMDE2MTBENyAvKiBXaW5kb3dTdXJmYWNlQ0dMLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJMzFCMTU3MjMyMzZCODJCQjAwQ0FBNEZEIC8qIFdpbmRvd1N1cmZhY2VF
QUdMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERTcxRkNFNDUyRDAwQUM3QTg5IC8qIFdv
cmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZENTIyODI2QkM4MDBCNUJB
MkMgLyogV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0NENTk1MDIyODRFQ0QxMDAxOEYyRDggLyogeHhoYXNoLmMgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dF9hbmds
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0X2FuZ2xlLmgK
aW5kZXggYWI1Y2I4ZDdjMGVhOWYxOWMyMjk0NmM1NzY2MDYyODgzNGYwMjQ1ZS4uZDNkZDIzZDEz
MTJjYTE0NDI5YTM0NjUzZDA5MTlmMzJiYTA3MGE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0X2FuZ2xlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0X2FuZ2xlLmgKQEAgLTI1OSw2ICsyNTksMTMg
QEAgRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlEaXNwbGF5QXR0cmliQU5H
TEUoRUdMRGlzcGxheSBkcHksIEVHTGludAogI2RlZmluZSBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9B
TkdMRSAweDM0ODYKICNlbmRpZgogCisjaWZuZGVmIEVHTF9BTkdMRV9kZXZpY2VfZWFnbAorI2Rl
ZmluZSBFR0xfQU5HTEVfZGV2aWNlX2VhZ2wgMQorI2RlZmluZSBFR0xfRUFHTF9DT05URVhUX0FO
R0xFIDB4MzQ4NworLy8gRklYTUU6IERvIHdlIG5lZWQgYW4gRUdMX1BJWEVMX0ZPUk1BVF9BTkdM
RT8KKy8vICNkZWZpbmUgRUdMX0VBR0xfUElYRUxfRk9STUFUX0FOR0xFIDB4MzQ4OAorI2VuZGlm
CisKIC8vIGNsYW5nLWZvcm1hdCBvbgogCiAjZW5kaWYgIC8vIElOQ0xVREVfRUdMX0VHTEVYVF9B
TkdMRV8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUGFj
a2VkRW51bXMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9QYWNrZWRF
bnVtcy5jcHAKaW5kZXggZDRiZDAyODExNjFmZTNlN2I4NzVlZmY0ODlmNjg5ODU1YTg0MmI3NS4u
OGNiOWU1MGRlNWFkMmZhNDgyNWQ0OWQ0YTczYzMwMDVjZTcxZWE5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9QYWNrZWRFbnVtcy5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9QYWNrZWRFbnVtcy5jcHAKQEAgLTM3NCw3
ICszNzQsMTEgQEAgZ2w6OlRleHR1cmVUeXBlIEVHTFRleHR1cmVUYXJnZXRUb1RleHR1cmVUeXBl
KEVHTGVudW0gZWdsVGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuIGdsOjpUZXh0dXJlVHlwZTo6
XzJEOwogCiAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOgorI2lmIGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQorICAgICAgICAgICAgcmV0dXJuIGdsOjpUZXh0dXJl
VHlwZTo6XzJEOworI2Vsc2UKICAgICAgICAgICAgIHJldHVybiBnbDo6VGV4dHVyZVR5cGU6OlJl
Y3RhbmdsZTsKKyNlbmRpZgogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9w
bGF0Zm9ybS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5o
CmluZGV4IGM0ZTFmOGY2ZDQxODhiZGZhNzFhNTk3YjRhMGEzN2M1ODkxOGYwY2YuLmU5NTdkMTJi
MTJmNmQ0YWJhYjJiZDdkNTc5M2NmM2U5MWIxZWIxNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vcGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3JtLmgKQEAgLTExNyw2ICsxMTcsMTAgQEAKICMgICAg
ICAgIGRlZmluZSBBTkdMRV9QTEFURk9STV9NQUNPUyAxCiAjICAgIGVsaWYgVEFSR0VUX09TX0lP
UwogIyAgICAgICAgZGVmaW5lIEFOR0xFX1BMQVRGT1JNX0lPUyAxCisjICAgICAgICBkZWZpbmUg
R0xFU19TSUxFTkNFX0RFUFJFQ0FUSU9OCisjICAgICAgICBpZiBUQVJHRVRfT1NfU0lNVUxBVE9S
CisjICAgICAgICAgICAgZGVmaW5lIEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IgMQorIyAg
ICAgICAgZW5kaWYKICMgICAgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGFjZTc0YTRjYWExMDVlNjc2ZWUwMzc3NjRkYjM4YzBkMGExN2MyZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGls
L1N5c3RlbUluZm9faW9zLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKy8vIFN5c3RlbUluZm9faW9zLmNwcDogaW1wbGVtZW50YXRpb24gb2YgdGhlIGlPUy1zcGVj
aWZpYyBwYXJ0cyBvZiBTeXN0ZW1JbmZvLmgKKworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5o
IgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpCisKKyNpbmNsdWRlICJncHVfaW5m
b191dGlsL1N5c3RlbUluZm9faW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIGFuZ2xlCit7CisKK2Jv
b2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1JbmZvICppbmZvKQoreworICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJzaW9uLgorICAgICAgICBpbmZvLT5tYWNo
aW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBhbmdsZQorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZv
X3V0aWwvU3lzdGVtSW5mb19tYWMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5MTJlZmVhOTBmMTRjMGNkMjRmMzZhMzAxMjFlY2YzZjkzNGQ2YzI1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTeXN0ZW1JbmZvX21hYy5jcHA6IGltcGxl
bWVudGF0aW9uIG9mIHRoZSBNYWMtc3BlY2lmaWMgcGFydHMgb2YgU3lzdGVtSW5mby5oCi0KLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KLSNp
ZiBUQVJHRVRfT1NfT1NYCi0KLSNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW50
ZXJuYWwuaCIKLQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0RpcmVjdERpc3BsYXkuaD4KLSNp
bmNsdWRlIDxJT0tpdC9JT0tpdExpYi5oPgotI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLQot
bmFtZXNwYWNlIGFuZ2xlCi17Ci0KLW5hbWVzcGFjZQotewotCi11c2luZyBQbGF0Zm9ybURpc3Bs
YXlJRCA9IHVpbnQzMl90OwotCi1jb25zdGV4cHIgQ0dMUmVuZGVyZXJQcm9wZXJ0eSBrQ0dMUlBS
ZWdpc3RyeUlETG93ICA9IHN0YXRpY19jYXN0PENHTFJlbmRlcmVyUHJvcGVydHk+KDE0MCk7Ci1j
b25zdGV4cHIgQ0dMUmVuZGVyZXJQcm9wZXJ0eSBrQ0dMUlBSZWdpc3RyeUlESGlnaCA9IHN0YXRp
Y19jYXN0PENHTFJlbmRlcmVyUHJvcGVydHk+KDE0MSk7Ci0KLS8vIENvZGUgZnJvbSBXZWJLaXQg
dG8gZ2V0IHRoZSBhY3RpdmUgR1BVJ3MgSUQgZ2l2ZW4gYSBkaXNwbGF5IElELgotdWludDY0X3Qg
R2V0R3B1SURGcm9tRGlzcGxheUlEKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKLXsKLSAg
ICBHTHVpbnQgZGlzcGxheU1hc2sgICAgICAgICAgICAgID0gQ0dEaXNwbGF5SURUb09wZW5HTERp
c3BsYXlNYXNrKGRpc3BsYXlJRCk7Ci0gICAgR0xpbnQgbnVtUmVuZGVyZXJzICAgICAgICAgICAg
ICA9IDA7Ci0gICAgQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmRlcmVySW5mbyA9IG51bGxwdHI7Ci0g
ICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xRdWVyeVJlbmRlcmVySW5mbyhkaXNwbGF5TWFzaywgJnJl
bmRlcmVySW5mbywgJm51bVJlbmRlcmVycyk7Ci0gICAgaWYgKCFudW1SZW5kZXJlcnMgfHwgIXJl
bmRlcmVySW5mbyB8fCBlcnJvciAhPSBrQ0dMTm9FcnJvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBUaGUgMHRoIHJlbmRlcmVyIHNob3VsZCBub3QgYmUgdGhlIHNvZnR3YXJlIHJlbmRl
cmVyLgotICAgIEdMaW50IGlzQWNjZWxlcmF0ZWQ7Ci0gICAgZXJyb3IgPSBDR0xEZXNjcmliZVJl
bmRlcmVyKHJlbmRlcmVySW5mbywgMCwga0NHTFJQQWNjZWxlcmF0ZWQsICZpc0FjY2VsZXJhdGVk
KTsKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWQgfHwgZXJyb3IgIT0ga0NHTE5vRXJyb3IpCi0gICAg
ewotICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvKHJlbmRlcmVySW5mbyk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIEdMaW50IGdwdUlETG93ICA9IDA7Ci0gICAgR0xpbnQg
Z3B1SURIaWdoID0gMDsKLQotICAgIGVycm9yID0gQ0dMRGVzY3JpYmVSZW5kZXJlcihyZW5kZXJl
ckluZm8sIDAsIGtDR0xSUFJlZ2lzdHJ5SURMb3csICZncHVJRExvdyk7Ci0KLSAgICBpZiAoZXJy
b3IgIT0ga0NHTE5vRXJyb3IgfHwgZ3B1SURMb3cgPCAwKQotICAgIHsKLSAgICAgICAgQ0dMRGVz
dHJveVJlbmRlcmVySW5mbyhyZW5kZXJlckluZm8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBlcnJvciA9IENHTERlc2NyaWJlUmVuZGVyZXIocmVuZGVyZXJJbmZvLCAwLCBrQ0dM
UlBSZWdpc3RyeUlESGlnaCwgJmdwdUlESGlnaCk7Ci0gICAgaWYgKGVycm9yICE9IGtDR0xOb0Vy
cm9yIHx8IGdwdUlESGlnaCA8IDApCi0gICAgewotICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJ
bmZvKHJlbmRlcmVySW5mbyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIENHTERl
c3Ryb3lSZW5kZXJlckluZm8ocmVuZGVyZXJJbmZvKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGdwdUlESGlnaCkgPDwgMzIgfCBncHVJRExvdzsKLX0KLQotc3RkOjpzdHJpbmcg
R2V0TWFjaGluZU1vZGVsKCkKLXsKLSAgICBpb19zZXJ2aWNlX3QgcGxhdGZvcm1FeHBlcnQgPSBJ
T1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2UoCi0gICAgICAgIGtJT01hc3RlclBvcnREZWZhdWx0
LCBJT1NlcnZpY2VNYXRjaGluZygiSU9QbGF0Zm9ybUV4cGVydERldmljZSIpKTsKLQotICAgIGlm
IChwbGF0Zm9ybUV4cGVydCA9PSBJT19PQkpFQ1RfTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAiIjsKLSAgICB9Ci0KLSAgICBDRkRhdGFSZWYgbW9kZWxEYXRhID0gc3RhdGljX2Nhc3Q8Q0ZE
YXRhUmVmPigKLSAgICAgICAgSU9SZWdpc3RyeUVudHJ5Q3JlYXRlQ0ZQcm9wZXJ0eShwbGF0Zm9y
bUV4cGVydCwgQ0ZTVFIoIm1vZGVsIiksIGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBp
ZiAobW9kZWxEYXRhID09IG51bGxwdHIpCi0gICAgewotICAgICAgICBJT09iamVjdFJlbGVhc2Uo
cGxhdGZvcm1FeHBlcnQpOwotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgc3RkOjpz
dHJpbmcgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KENGRGF0YUdldEJ5
dGVQdHIobW9kZWxEYXRhKSk7Ci0KLSAgICBJT09iamVjdFJlbGVhc2UocGxhdGZvcm1FeHBlcnQp
OwotICAgIENGUmVsZWFzZShtb2RlbERhdGEpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ly8gRXh0cmFjdHMgb25lIGludGVnZXIgcHJvcGVydHkgZnJvbSBhIHJlZ2lzdHJ5IGVudHJ5Lgot
Ym9vbCBHZXRFbnRyeVByb3BlcnR5KGlvX3JlZ2lzdHJ5X2VudHJ5X3QgZW50cnksIENGU3RyaW5n
UmVmIG5hbWUsIHVpbnQzMl90ICp2YWx1ZSkKLXsKLSAgICAqdmFsdWUgPSAwOwotCi0gICAgQ0ZE
YXRhUmVmIGRhdGEgPSBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+KAotICAgICAgICBJT1JlZ2lzdHJ5
RW50cnlTZWFyY2hDRlByb3BlcnR5KGVudHJ5LCBrSU9TZXJ2aWNlUGxhbmUsIG5hbWUsIGtDRkFs
bG9jYXRvckRlZmF1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0lPUmVnaXN0cnlJdGVyYXRlUmVjdXJzaXZlbHkgfCBrSU9SZWdpc3RyeUl0ZXJhdGVQYXJlbnRz
KSk7Ci0KLSAgICBpZiAoZGF0YSA9PSBudWxscHRyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGNvbnN0IHVpbnQzMl90ICp2YWx1ZVB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSk7Ci0KLSAgICBp
ZiAodmFsdWVQdHIgPT0gbnVsbHB0cikKLSAgICB7Ci0gICAgICAgIENGUmVsZWFzZShkYXRhKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgICp2YWx1ZSA9ICp2YWx1ZVB0cjsK
LSAgICBDRlJlbGVhc2UoZGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEdhdGhlcnMg
dGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIFBDSSBHUFVzCi1ib29sIEdldFBDSURl
dmljZXMoc3RkOjp2ZWN0b3I8R1BVRGV2aWNlSW5mbz4gKmRldmljZXMpCi17Ci0gICAgLy8gbWF0
Y2hEaWN0aW9uYXJ5IHdpbGwgYmUgY29uc3VtZWQgYnkgSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2
aWNlcywgbm8gbmVlZCB0byByZWxlYXNlIGl0LgotICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
bWF0Y2hEaWN0aW9uYXJ5ID0gSU9TZXJ2aWNlTWF0Y2hpbmcoIklPUENJRGV2aWNlIik7Ci0KLSAg
ICBpb19pdGVyYXRvcl90IGVudHJ5SXRlcmF0b3I7Ci0gICAgaWYgKElPU2VydmljZUdldE1hdGNo
aW5nU2VydmljZXMoa0lPTWFzdGVyUG9ydERlZmF1bHQsIG1hdGNoRGljdGlvbmFyeSwgJmVudHJ5
SXRlcmF0b3IpICE9Ci0gICAgICAgIGtJT1JldHVyblN1Y2Nlc3MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW9fcmVnaXN0cnlfZW50cnlfdCBlbnRyeSA9IElP
X09CSkVDVF9OVUxMOwotCi0gICAgd2hpbGUgKChlbnRyeSA9IElPSXRlcmF0b3JOZXh0KGVudHJ5
SXRlcmF0b3IpKSAhPSBJT19PQkpFQ1RfTlVMTCkKLSAgICB7Ci0gICAgICAgIGNvbnN0ZXhwciB1
aW50MzJfdCBrQ2xhc3NDb2RlRGlzcGxheVZHQSA9IDB4MzAwMDA7Ci0gICAgICAgIHVpbnQzMl90
IGNsYXNzQ29kZTsKLSAgICAgICAgR1BVRGV2aWNlSW5mbyBpbmZvOwotCi0gICAgICAgIGlmIChH
ZXRFbnRyeVByb3BlcnR5KGVudHJ5LCBDRlNUUigiY2xhc3MtY29kZSIpLCAmY2xhc3NDb2RlKSAm
JgotICAgICAgICAgICAgY2xhc3NDb2RlID09IGtDbGFzc0NvZGVEaXNwbGF5VkdBICYmCi0gICAg
ICAgICAgICBHZXRFbnRyeVByb3BlcnR5KGVudHJ5LCBDRlNUUigidmVuZG9yLWlkIiksICZpbmZv
LnZlbmRvcklkKSAmJgotICAgICAgICAgICAgR2V0RW50cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIo
ImRldmljZS1pZCIpLCAmaW5mby5kZXZpY2VJZCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
dmljZXMtPnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIElPT2JqZWN0UmVs
ZWFzZShlbnRyeSk7Ci0gICAgfQotICAgIElPT2JqZWN0UmVsZWFzZShlbnRyeUl0ZXJhdG9yKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNldEFjdGl2ZUdQVUluZGV4KFN5c3RlbUlu
Zm8gKmluZm8pCi17Ci0gICAgVmVuZG9ySUQgYWN0aXZlVmVuZG9yOwotICAgIERldmljZUlEIGFj
dGl2ZURldmljZTsKLQotICAgIHVpbnQ2NF90IGdwdUlEID0gR2V0R3B1SURGcm9tRGlzcGxheUlE
KGtDR0RpcmVjdE1haW5EaXNwbGF5KTsKLQotICAgIGlmIChncHVJRCA9PSAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIG1hdGNoRGljdGlvbmFyeSA9IElP
UmVnaXN0cnlFbnRyeUlETWF0Y2hpbmcoZ3B1SUQpOwotICAgIGlvX3NlcnZpY2VfdCBncHVFbnRy
eSA9IElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZShrSU9NYXN0ZXJQb3J0RGVmYXVsdCwgbWF0
Y2hEaWN0aW9uYXJ5KTsKLQotICAgIGlmIChncHVFbnRyeSA9PSBJT19PQkpFQ1RfTlVMTCkKLSAg
ICB7Ci0gICAgICAgIElPT2JqZWN0UmVsZWFzZShncHVFbnRyeSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIShHZXRFbnRyeVByb3BlcnR5KGdwdUVudHJ5LCBDRlNUUigidmVu
ZG9yLWlkIiksICZhY3RpdmVWZW5kb3IpICYmCi0gICAgICAgICAgR2V0RW50cnlQcm9wZXJ0eShn
cHVFbnRyeSwgQ0ZTVFIoImRldmljZS1pZCIpLCAmYWN0aXZlRGV2aWNlKSkpCi0gICAgewotICAg
ICAgICBJT09iamVjdFJlbGVhc2UoZ3B1RW50cnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSU9PYmplY3RSZWxlYXNlKGdwdUVudHJ5KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaW5mby0+Z3B1cy5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmZvLT5n
cHVzW2ldLnZlbmRvcklkID09IGFjdGl2ZVZlbmRvciAmJiBpbmZvLT5ncHVzW2ldLmRldmljZUlk
ID09IGFjdGl2ZURldmljZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mby0+YWN0aXZlR1BV
SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotYm9vbCBHZXRTeXN0
ZW1JbmZvKFN5c3RlbUluZm8gKmluZm8pCi17Ci0gICAgewotICAgICAgICBpbnQzMl90IG1ham9y
ID0gMDsKLSAgICAgICAgaW50MzJfdCBtaW5vciA9IDA7Ci0gICAgICAgIFBhcnNlTWFjTWFjaGlu
ZU1vZGVsKEdldE1hY2hpbmVNb2RlbCgpLCAmaW5mby0+bWFjaGluZU1vZGVsTmFtZSwgJm1ham9y
LCAmbWlub3IpOwotICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gc3RkOjp0b19z
dHJpbmcobWFqb3IpICsgIi4iICsgc3RkOjp0b19zdHJpbmcobWlub3IpOwotICAgIH0KLQotICAg
IGlmICghR2V0UENJRGV2aWNlcygmKGluZm8tPmdwdXMpKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaW5mby0+Z3B1cy5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENhbGwgdGhlIGdlbmVyaWMgR2V0
RHVhbEdQVUluZm8gZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBpbmZvIGZpZWxkcwotICAgIC8vIHN1
Y2ggYXMgaXNPcHRpbXVzLCBpc0FNRFN3aXRjaGFibGUsIGFuZCB0aGUgYWN0aXZlR1BVSW5kZXgK
LSAgICBHZXREdWFsR1BVSW5mbyhpbmZvKTsKLQotICAgIC8vIFRoZW4gb3ZlcnJpZGUgdGhlIGFj
dGl2ZUdQVUluZGV4IGZpZWxkIG9mIGluZm8gdG8gcmVmbGVjdCB0aGUgY3VycmVudAotICAgIC8v
IEdQVSBpbnN0ZWFkIG9mIHRoZSBub24taW50ZWwgR1BVCi0gICAgLy8gVE9ETyhkaW5vKTogVXNl
IHN5c2N0bCB0byBkZXRlY3QgT1MgdmVyc2lvbi4KLSAgICAvLyAgICBpZiAoQGF2YWlsYWJsZSht
YWNPUyAxMC4xMywgKikpCi0gICAgU2V0QWN0aXZlR1BVSW5kZXgoaW5mbyk7Ci0KLSAgICAvLyBG
aWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBpcyBhIGR1YWwtR1BVIHN5c3RlbS4KLSAgICAvLwotICAg
IC8vIFRPRE8oa2JyKTogdGhpcyBjb2RlIHdhcyBwb3J0ZWQgb3ZlciBmcm9tIENocm9taXVtLCBh
bmQgaXRzIGNvcnJlY3RuZXNzCi0gICAgLy8gY291bGQgYmUgaW1wcm92ZWQgLSBuZWVkIHRvIHVz
ZSBNYWMtc3BlY2lmaWMgQVBJcyB0byBkZXRlcm1pbmUgd2hldGhlcgotICAgIC8vIG9mZmxpbmUg
cmVuZGVyZXJzIGFyZSBhbGxvd2VkLCBhbmQgd2hldGhlciB0aGVzZSB0d28gR1BVcyBhcmUgcmVh
bGx5IHRoZQotICAgIC8vIGludGVncmF0ZWQvZGlzY3JldGUgR1BVcyBpbiBhIGxhcHRvcC4KLSAg
ICBpZiAoaW5mby0+Z3B1cy5zaXplKCkgPT0gMiAmJgotICAgICAgICAoKElzSW50ZWwoaW5mby0+
Z3B1c1swXS52ZW5kb3JJZCkgJiYgIUlzSW50ZWwoaW5mby0+Z3B1c1sxXS52ZW5kb3JJZCkpIHx8
Ci0gICAgICAgICAoIUlzSW50ZWwoaW5mby0+Z3B1c1swXS52ZW5kb3JJZCkgJiYgSXNJbnRlbChp
bmZvLT5ncHVzWzFdLnZlbmRvcklkKSkpKQotICAgIHsKLSAgICAgICAgaW5mby0+aXNNYWNTd2l0
Y2hhYmxlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGFuZ2xlCi0KLSNlbmRpZiAgLy8gVEFSR0VUX09TX09TWAotI2VuZGlmICAvLyBfX0FQ
UExFX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191
dGlsL1N5c3RlbUluZm9fbWFjb3MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzEzMjFjNTYyNDMw
NGNiY2I5Y2E5MDA4ZDU2M2I3MDM1NzFiOGI5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MuY3BwCkBA
IC0wLDAgKzEsMjQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTeXN0ZW1JbmZvX21hY29zLmNwcDogaW1w
bGVtZW50YXRpb24gb2YgdGhlIG1hY09TLXNwZWNpZmljIHBhcnRzIG9mIFN5c3RlbUluZm8uaAor
CisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ09TKQorCisjaW5jbHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2ludGVybmFs
LmgiCisKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXJlY3REaXNwbGF5Lmg+CisjaW5jbHVk
ZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+CisKK25hbWVz
cGFjZSBhbmdsZQoreworCituYW1lc3BhY2UKK3sKKwordXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQg
PSB1aW50MzJfdDsKKworY29uc3RleHByIENHTFJlbmRlcmVyUHJvcGVydHkga0NHTFJQUmVnaXN0
cnlJRExvdyAgPSBzdGF0aWNfY2FzdDxDR0xSZW5kZXJlclByb3BlcnR5PigxNDApOworY29uc3Rl
eHByIENHTFJlbmRlcmVyUHJvcGVydHkga0NHTFJQUmVnaXN0cnlJREhpZ2ggPSBzdGF0aWNfY2Fz
dDxDR0xSZW5kZXJlclByb3BlcnR5PigxNDEpOworCisvLyBDb2RlIGZyb20gV2ViS2l0IHRvIGdl
dCB0aGUgYWN0aXZlIEdQVSdzIElEIGdpdmVuIGEgZGlzcGxheSBJRC4KK3VpbnQ2NF90IEdldEdw
dUlERnJvbURpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgR0x1
aW50IGRpc3BsYXlNYXNrICAgICAgICAgICAgICA9IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5
TWFzayhkaXNwbGF5SUQpOworICAgIEdMaW50IG51bVJlbmRlcmVycyAgICAgICAgICAgICAgPSAw
OworICAgIENHTFJlbmRlcmVySW5mb09iaiByZW5kZXJlckluZm8gPSBudWxscHRyOworICAgIENH
TEVycm9yIGVycm9yID0gQ0dMUXVlcnlSZW5kZXJlckluZm8oZGlzcGxheU1hc2ssICZyZW5kZXJl
ckluZm8sICZudW1SZW5kZXJlcnMpOworICAgIGlmICghbnVtUmVuZGVyZXJzIHx8ICFyZW5kZXJl
ckluZm8gfHwgZXJyb3IgIT0ga0NHTE5vRXJyb3IpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gVGhlIDB0aCByZW5kZXJlciBzaG91bGQgbm90IGJlIHRoZSBzb2Z0d2FyZSByZW5kZXJlci4K
KyAgICBHTGludCBpc0FjY2VsZXJhdGVkOworICAgIGVycm9yID0gQ0dMRGVzY3JpYmVSZW5kZXJl
cihyZW5kZXJlckluZm8sIDAsIGtDR0xSUEFjY2VsZXJhdGVkLCAmaXNBY2NlbGVyYXRlZCk7Cisg
ICAgaWYgKCFpc0FjY2VsZXJhdGVkIHx8IGVycm9yICE9IGtDR0xOb0Vycm9yKQorICAgIHsKKyAg
ICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbyhyZW5kZXJlckluZm8pOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBHTGludCBncHVJRExvdyAgPSAwOworICAgIEdMaW50IGdwdUlE
SGlnaCA9IDA7CisKKyAgICBlcnJvciA9IENHTERlc2NyaWJlUmVuZGVyZXIocmVuZGVyZXJJbmZv
LCAwLCBrQ0dMUlBSZWdpc3RyeUlETG93LCAmZ3B1SURMb3cpOworCisgICAgaWYgKGVycm9yICE9
IGtDR0xOb0Vycm9yIHx8IGdwdUlETG93IDwgMCkKKyAgICB7CisgICAgICAgIENHTERlc3Ryb3lS
ZW5kZXJlckluZm8ocmVuZGVyZXJJbmZvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgZXJyb3IgPSBDR0xEZXNjcmliZVJlbmRlcmVyKHJlbmRlcmVySW5mbywgMCwga0NHTFJQUmVn
aXN0cnlJREhpZ2gsICZncHVJREhpZ2gpOworICAgIGlmIChlcnJvciAhPSBrQ0dMTm9FcnJvciB8
fCBncHVJREhpZ2ggPCAwKQorICAgIHsKKyAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbyhy
ZW5kZXJlckluZm8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBDR0xEZXN0cm95
UmVuZGVyZXJJbmZvKHJlbmRlcmVySW5mbyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihncHVJREhpZ2gpIDw8IDMyIHwgZ3B1SURMb3c7Cit9CisKK3N0ZDo6c3RyaW5nIEdldE1h
Y2hpbmVNb2RlbCgpCit7CisgICAgaW9fc2VydmljZV90IHBsYXRmb3JtRXhwZXJ0ID0gSU9TZXJ2
aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlKAorICAgICAgICBrSU9NYXN0ZXJQb3J0RGVmYXVsdCwgSU9T
ZXJ2aWNlTWF0Y2hpbmcoIklPUGxhdGZvcm1FeHBlcnREZXZpY2UiKSk7CisKKyAgICBpZiAocGxh
dGZvcm1FeHBlcnQgPT0gSU9fT0JKRUNUX05VTEwpCisgICAgeworICAgICAgICByZXR1cm4gIiI7
CisgICAgfQorCisgICAgQ0ZEYXRhUmVmIG1vZGVsRGF0YSA9IHN0YXRpY19jYXN0PENGRGF0YVJl
Zj4oCisgICAgICAgIElPUmVnaXN0cnlFbnRyeUNyZWF0ZUNGUHJvcGVydHkocGxhdGZvcm1FeHBl
cnQsIENGU1RSKCJtb2RlbCIpLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKG1v
ZGVsRGF0YSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgSU9PYmplY3RSZWxlYXNlKHBsYXRm
b3JtRXhwZXJ0KTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5n
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihDRkRhdGFHZXRCeXRlUHRy
KG1vZGVsRGF0YSkpOworCisgICAgSU9PYmplY3RSZWxlYXNlKHBsYXRmb3JtRXhwZXJ0KTsKKyAg
ICBDRlJlbGVhc2UobW9kZWxEYXRhKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEV4
dHJhY3RzIG9uZSBpbnRlZ2VyIHByb3BlcnR5IGZyb20gYSByZWdpc3RyeSBlbnRyeS4KK2Jvb2wg
R2V0RW50cnlQcm9wZXJ0eShpb19yZWdpc3RyeV9lbnRyeV90IGVudHJ5LCBDRlN0cmluZ1JlZiBu
YW1lLCB1aW50MzJfdCAqdmFsdWUpCit7CisgICAgKnZhbHVlID0gMDsKKworICAgIENGRGF0YVJl
ZiBkYXRhID0gc3RhdGljX2Nhc3Q8Q0ZEYXRhUmVmPigKKyAgICAgICAgSU9SZWdpc3RyeUVudHJ5
U2VhcmNoQ0ZQcm9wZXJ0eShlbnRyeSwga0lPU2VydmljZVBsYW5lLCBuYW1lLCBrQ0ZBbGxvY2F0
b3JEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJT1Jl
Z2lzdHJ5SXRlcmF0ZVJlY3Vyc2l2ZWx5IHwga0lPUmVnaXN0cnlJdGVyYXRlUGFyZW50cykpOwor
CisgICAgaWYgKGRhdGEgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjb25zdCB1aW50MzJfdCAqdmFsdWVQdHIgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90ICo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YSkpOworCisgICAgaWYgKHZh
bHVlUHRyID09IG51bGxwdHIpCisgICAgeworICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqdmFsdWUgPSAqdmFsdWVQdHI7CisgICAg
Q0ZSZWxlYXNlKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBHYXRoZXJzIHRoZSB2
ZW5kb3IgYW5kIGRldmljZSBJRHMgZm9yIHRoZSBQQ0kgR1BVcworYm9vbCBHZXRQQ0lEZXZpY2Vz
KHN0ZDo6dmVjdG9yPEdQVURldmljZUluZm8+ICpkZXZpY2VzKQoreworICAgIC8vIG1hdGNoRGlj
dGlvbmFyeSB3aWxsIGJlIGNvbnN1bWVkIGJ5IElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMs
IG5vIG5lZWQgdG8gcmVsZWFzZSBpdC4KKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIG1hdGNo
RGljdGlvbmFyeSA9IElPU2VydmljZU1hdGNoaW5nKCJJT1BDSURldmljZSIpOworCisgICAgaW9f
aXRlcmF0b3JfdCBlbnRyeUl0ZXJhdG9yOworICAgIGlmIChJT1NlcnZpY2VHZXRNYXRjaGluZ1Nl
cnZpY2VzKGtJT01hc3RlclBvcnREZWZhdWx0LCBtYXRjaERpY3Rpb25hcnksICZlbnRyeUl0ZXJh
dG9yKSAhPQorICAgICAgICBrSU9SZXR1cm5TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlvX3JlZ2lzdHJ5X2VudHJ5X3QgZW50cnkgPSBJT19PQkpF
Q1RfTlVMTDsKKworICAgIHdoaWxlICgoZW50cnkgPSBJT0l0ZXJhdG9yTmV4dChlbnRyeUl0ZXJh
dG9yKSkgIT0gSU9fT0JKRUNUX05VTEwpCisgICAgeworICAgICAgICBjb25zdGV4cHIgdWludDMy
X3Qga0NsYXNzQ29kZURpc3BsYXlWR0EgPSAweDMwMDAwOworICAgICAgICB1aW50MzJfdCBjbGFz
c0NvZGU7CisgICAgICAgIEdQVURldmljZUluZm8gaW5mbzsKKworICAgICAgICBpZiAoR2V0RW50
cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIoImNsYXNzLWNvZGUiKSwgJmNsYXNzQ29kZSkgJiYKKyAg
ICAgICAgICAgIGNsYXNzQ29kZSA9PSBrQ2xhc3NDb2RlRGlzcGxheVZHQSAmJgorICAgICAgICAg
ICAgR2V0RW50cnlQcm9wZXJ0eShlbnRyeSwgQ0ZTVFIoInZlbmRvci1pZCIpLCAmaW5mby52ZW5k
b3JJZCkgJiYKKyAgICAgICAgICAgIEdldEVudHJ5UHJvcGVydHkoZW50cnksIENGU1RSKCJkZXZp
Y2UtaWQiKSwgJmluZm8uZGV2aWNlSWQpKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2Vz
LT5wdXNoX2JhY2soaW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBJT09iamVjdFJlbGVhc2Uo
ZW50cnkpOworICAgIH0KKyAgICBJT09iamVjdFJlbGVhc2UoZW50cnlJdGVyYXRvcik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTZXRBY3RpdmVHUFVJbmRleChTeXN0ZW1JbmZvICpp
bmZvKQoreworICAgIFZlbmRvcklEIGFjdGl2ZVZlbmRvcjsKKyAgICBEZXZpY2VJRCBhY3RpdmVE
ZXZpY2U7CisKKyAgICB1aW50NjRfdCBncHVJRCA9IEdldEdwdUlERnJvbURpc3BsYXlJRChrQ0dE
aXJlY3RNYWluRGlzcGxheSk7CisKKyAgICBpZiAoZ3B1SUQgPT0gMCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBtYXRjaERpY3Rpb25hcnkgPSBJT1JlZ2lz
dHJ5RW50cnlJRE1hdGNoaW5nKGdwdUlEKTsKKyAgICBpb19zZXJ2aWNlX3QgZ3B1RW50cnkgPSBJ
T1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2Uoa0lPTWFzdGVyUG9ydERlZmF1bHQsIG1hdGNoRGlj
dGlvbmFyeSk7CisKKyAgICBpZiAoZ3B1RW50cnkgPT0gSU9fT0JKRUNUX05VTEwpCisgICAgewor
ICAgICAgICBJT09iamVjdFJlbGVhc2UoZ3B1RW50cnkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCEoR2V0RW50cnlQcm9wZXJ0eShncHVFbnRyeSwgQ0ZTVFIoInZlbmRvci1p
ZCIpLCAmYWN0aXZlVmVuZG9yKSAmJgorICAgICAgICAgIEdldEVudHJ5UHJvcGVydHkoZ3B1RW50
cnksIENGU1RSKCJkZXZpY2UtaWQiKSwgJmFjdGl2ZURldmljZSkpKQorICAgIHsKKyAgICAgICAg
SU9PYmplY3RSZWxlYXNlKGdwdUVudHJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IElPT2JqZWN0UmVsZWFzZShncHVFbnRyeSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGluZm8tPmdwdXMuc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBpZiAoaW5mby0+Z3B1c1tp
XS52ZW5kb3JJZCA9PSBhY3RpdmVWZW5kb3IgJiYgaW5mby0+Z3B1c1tpXS5kZXZpY2VJZCA9PSBh
Y3RpdmVEZXZpY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm8tPmFjdGl2ZUdQVUluZGV4
ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgR2V0U3lzdGVtSW5m
byhTeXN0ZW1JbmZvICppbmZvKQoreworICAgIHsKKyAgICAgICAgaW50MzJfdCBtYWpvciA9IDA7
CisgICAgICAgIGludDMyX3QgbWlub3IgPSAwOworICAgICAgICBQYXJzZU1hY01hY2hpbmVNb2Rl
bChHZXRNYWNoaW5lTW9kZWwoKSwgJmluZm8tPm1hY2hpbmVNb2RlbE5hbWUsICZtYWpvciwgJm1p
bm9yKTsKKyAgICAgICAgaW5mby0+bWFjaGluZU1vZGVsVmVyc2lvbiA9IHN0ZDo6dG9fc3RyaW5n
KG1ham9yKSArICIuIiArIHN0ZDo6dG9fc3RyaW5nKG1pbm9yKTsKKyAgICB9CisKKyAgICBpZiAo
IUdldFBDSURldmljZXMoJihpbmZvLT5ncHVzKSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKGluZm8tPmdwdXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDYWxsIHRoZSBnZW5lcmljIEdldER1YWxH
UFVJbmZvIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgaW5mbyBmaWVsZHMKKyAgICAvLyBzdWNoIGFz
IGlzT3B0aW11cywgaXNBTURTd2l0Y2hhYmxlLCBhbmQgdGhlIGFjdGl2ZUdQVUluZGV4CisgICAg
R2V0RHVhbEdQVUluZm8oaW5mbyk7CisKKyAgICAvLyBUaGVuIG92ZXJyaWRlIHRoZSBhY3RpdmVH
UFVJbmRleCBmaWVsZCBvZiBpbmZvIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKyAgICAvLyBHUFUg
aW5zdGVhZCBvZiB0aGUgbm9uLWludGVsIEdQVQorICAgIC8vIFRPRE8oZGlubyk6IFVzZSBzeXNj
dGwgdG8gZGV0ZWN0IE9TIHZlcnNpb24uCisgICAgLy8gICAgaWYgKEBhdmFpbGFibGUobWFjT1Mg
MTAuMTMsICopKQorICAgIFNldEFjdGl2ZUdQVUluZGV4KGluZm8pOworCisgICAgLy8gRmlndXJl
IG91dCB3aGV0aGVyIHRoaXMgaXMgYSBkdWFsLUdQVSBzeXN0ZW0uCisgICAgLy8KKyAgICAvLyBU
T0RPKGticik6IHRoaXMgY29kZSB3YXMgcG9ydGVkIG92ZXIgZnJvbSBDaHJvbWl1bSwgYW5kIGl0
cyBjb3JyZWN0bmVzcworICAgIC8vIGNvdWxkIGJlIGltcHJvdmVkIC0gbmVlZCB0byB1c2UgTWFj
LXNwZWNpZmljIEFQSXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAgICAvLyBvZmZsaW5lIHJlbmRl
cmVycyBhcmUgYWxsb3dlZCwgYW5kIHdoZXRoZXIgdGhlc2UgdHdvIEdQVXMgYXJlIHJlYWxseSB0
aGUKKyAgICAvLyBpbnRlZ3JhdGVkL2Rpc2NyZXRlIEdQVXMgaW4gYSBsYXB0b3AuCisgICAgaWYg
KGluZm8tPmdwdXMuc2l6ZSgpID09IDIgJiYKKyAgICAgICAgKChJc0ludGVsKGluZm8tPmdwdXNb
MF0udmVuZG9ySWQpICYmICFJc0ludGVsKGluZm8tPmdwdXNbMV0udmVuZG9ySWQpKSB8fAorICAg
ICAgICAgKCFJc0ludGVsKGluZm8tPmdwdXNbMF0udmVuZG9ySWQpICYmIElzSW50ZWwoaW5mby0+
Z3B1c1sxXS52ZW5kb3JJZCkpKSkKKyAgICB7CisgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJs
ZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBhbmdsZQorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NhcHMuaAppbmRleCAwZTBiMTdlNjJm
NDU4OTJiYWMxZTkxOTBhN2JiNzA2MjAzZWYxM2IxLi4zNWRiNDU0YTMxZjVlZmVhM2MwMzkwZjU3
OTQ3N2JhNjUxMzhlNmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvQ2Fwcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9DYXBzLmgKQEAgLTk0NSw2ICs5NDUsOSBAQCBzdHJ1Y3QgRGV2aWNlRXh0ZW5zaW9ucwogCiAg
ICAgLy8gRUdMX0FOR0xFX2RldmljZV9jZ2wKICAgICBib29sIGRldmljZUNHTCA9IGZhbHNlOwor
CisgICAgLy8gRUdMX0FOR0xFX2RldmljZV9lYWdsCisgICAgYm9vbCBkZXZpY2VFQUdMID0gZmFs
c2U7CiB9OwogCiBzdHJ1Y3QgQ2xpZW50RXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwCmluZGV4IGYzNmQzNGRiMmE2YmFkODM5
NTFjNWU0NWVhM2IxOGUxMjU0ODRiNzkuLmIwYWU1MTg4NDU5YjE4YjQ1OWE2ZTNlZmJjYzdhMzgx
ZDNjMWQ2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
RGlzcGxheS5jcHAKQEAgLTUyLDggKzUyLDEwIEBACiAjICAgICAgICBpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9nbC93Z2wvRGlzcGxheVdHTC5oIgogIyAgICBlbGlmIGRlZmluZWQoQU5HTEVf
VVNFX1gxMSkKICMgICAgICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2dseC9EaXNw
bGF5R0xYLmgiCi0jICAgIGVsaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKyMgICAg
ZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQogIyAgICAgICAgaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wuaCIKKyMgICAgZWxpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX0lPUykKKyMgICAgICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2ds
L2VhZ2wvRGlzcGxheUVBR0wuaCIKICMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1VTRV9PWk9ORSkK
ICMgICAgICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9vem9uZS9EaXNwbGF5
T3pvbmUuaCIKICMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FORFJPSUQpCkBAIC0y
MzIsOCArMjM0LDEwIEBAIHJ4OjpEaXNwbGF5SW1wbCAqQ3JlYXRlRGlzcGxheUZyb21BdHRyaWJz
KGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmliTWFwLCBjb25zdCBECiAgICAgICAgICAgICBpbXBs
ID0gbmV3IHJ4OjpEaXNwbGF5V0dMKHN0YXRlKTsKICMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1VT
RV9YMTEpCiAgICAgICAgICAgICBpbXBsID0gbmV3IHJ4OjpEaXNwbGF5R0xYKHN0YXRlKTsKLSMg
ICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorIyAgICBlbGlmIGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDT1MpCiAgICAgICAgICAgICBpbXBsID0gbmV3IHJ4OjpEaXNwbGF5
Q0dMKHN0YXRlKTsKKyMgICAgZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKyAgICAg
ICAgICAgIGltcGwgPSBuZXcgcng6OkRpc3BsYXlFQUdMKHN0YXRlKTsKICMgICAgZWxpZiBkZWZp
bmVkKEFOR0xFX1VTRV9PWk9ORSkKICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgd29yayBidXQg
aGFzIG5ldmVyIGJlZW4gdHJpZWQsIHNvIGRpc2FsbG93IGZvciBub3cuCiAgICAgICAgICAgICBp
bXBsID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9mb3JtYXR1dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvZm9ybWF0dXRpbHMuY3BwCmluZGV4IDg3ODBhODU5ZTRhYTU2MDJiYWViODc5OWY3OGUz
YmNkMjk2ZjQyZTYuLmM1NWQ0NTU2MTkwOTdkZTU0NTNhZjY4OWE1YWQ3MmMwZTliYmU2MTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9mb3JtYXR1dGls
cy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL2Zvcm1hdHV0
aWxzLmNwcApAQCAtOTc1LDcgKzk3NSwxMSBAQCBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvTWFw
IEJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCkKICAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdM
X1JHQkEsICAgICAgICAgICBmYWxzZSwgIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAg
ICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVE
LCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTmV2ZXJTdXBwb3J0ZWQpOwogICAgIEFkZFJHQkFGb3JtYXQoJm1hcCwgR0xf
U1JHQiwgICAgICAgICAgIGZhbHNlLCAgOCwgIDgsICA4LCAgMCwgMCwgR0xfU1JHQiwgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpF
RCwgdHJ1ZSwgIFJlcXVpcmVFeHQ8JkV4dGVuc2lvbnM6OnNSR0I+LCAgICAgICAgICAgICAgICAg
ICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOZXZlclN1cHBvcnRlZCk7CiAgICAgQWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9T
UkdCX0FMUEhBX0VYVCwgZmFsc2UsICA4LCAgOCwgIDgsICA4LCAwLCBHTF9TUkdCX0FMUEhBX0VY
VCwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
LCB0cnVlLCAgUmVxdWlyZUV4dDwmRXh0ZW5zaW9uczo6c1JHQj4sICAgICAgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFeHQ8JkV4dGVuc2lvbnM6OnNSR0I+LCAgICAgICAg
ICAgICAgICAgIE5ldmVyU3VwcG9ydGVkKTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lP
UykKKyAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICBmYWxzZSwgIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBSZXF1aXJlRVM8MiwgMD4s
ICAgQWx3YXlzU3VwcG9ydGVkLCBSZXF1aXJlRVM8MiwgMD4sIE5ldmVyU3VwcG9ydGVkKTsKKyNl
bHNlCiAgICAgQWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgZmFsc2UsICA4
LCAgOCwgIDgsICA4LCAwLCBHTF9CR1JBX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgUmVxdWlyZUV4dDwmRXh0
ZW5zaW9uczo6dGV4dHVyZUZvcm1hdEJHUkE4ODg4PiwgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVp
cmVFeHQ8JkV4dGVuc2lvbnM6OnRleHR1cmVGb3JtYXRCR1JBODg4OD4sIE5ldmVyU3VwcG9ydGVk
KTsKKyNlbmRpZgogCiAgICAgLy8gVW5zaXplZCBpbnRlZ2VyIGZvcm1hdHMKICAgICAvLyAgICAg
ICAgICAgICAgICAgfEludGVybmFsIGZvcm1hdCB8c2l6ZWQgfCBSIHwgRyB8IEIgfCBBIHxTIHwg
Rm9ybWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbXBvbmVu
dCB0eXBlIHwgU1JHQiB8IFRleHR1cmUgc3VwcG9ydGVkIHwgRmlsdGVyYWJsZSAgICB8IFRleHR1
cmUgYXR0YWNobWVudCB8IFJlbmRlcmJ1ZmZlciB8CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFHTC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9D
b250ZXh0RUFHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM4ZWUyZTM2ZDAzYzk5NDRmNDc1YWY3ODc0Yzhh
OTM5ZGVlYmFkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRleHRFQUdMLmNwcApAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQ29u
dGV4dEVBR0w6CisvLyAgIGlPUy1zcGVjaWZpYyBzdWJjbGFzcyBvZiBDb250ZXh0R0wuCisvLwor
CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFHTC5oIgorCisj
aW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXku
aCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgiCisK
K25hbWVzcGFjZSByeAoreworCitDb250ZXh0RUFHTDo6Q29udGV4dEVBR0woY29uc3QgZ2w6OlN0
YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkVycm9yU2V0ICplcnJvclNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFJlbmRlcmVy
R0w+ICZyZW5kZXJlcikKKyAgICA6IENvbnRleHRHTChzdGF0ZSwgZXJyb3JTZXQsIHJlbmRlcmVy
KQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRleHRFQUdMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250
ZXh0RUFHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZjY5ZDg0MWRhMzNmYjhjZjE4ZmY5ZTFjMTRmZDVhNDdh
NzcxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Db250ZXh0RUFHTC5oCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworLy8gQ29udGV4dEVBR0w6
CisvLyAgIGlPUy1zcGVjaWZpYyBzdWJjbGFzcyBvZiBDb250ZXh0R0wuCisvLworCisjaWZuZGVm
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfQ09OVEVYVEVBR0xfSF8KKyNkZWZpbmUgTElCQU5H
TEVfUkVOREVSRVJfR0xfRUFHTF9DT05URVhURUFHTF9IXworCisjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvZ2wvQ29udGV4dEdMLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wv
UmVuZGVyZXJHTC5oIgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgQ29udGV4dEVBR0wgOiBw
dWJsaWMgQ29udGV4dEdMCit7CisgIHB1YmxpYzoKKyAgICBDb250ZXh0RUFHTChjb25zdCBnbDo6
U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgZ2w6OkVycm9yU2V0ICplcnJvclNldCwKKyAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJlckdMPiAmcmVuZGVyZXIp
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElCQU5HTEVfUkVOREVS
RVJfR0xfRUFHTF9DT05URVhURUFHTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGV2aWNlRUFHTC5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EZXZpY2VF
QUdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZTc2YjE0YzBjNmMxYjIwNjRjNDQ2OGUzYjQ0NDM3OGE0OTg5
NGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGV2aWNlRUFHTC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERldmljZUVBR0wu
Y3BwOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6RGV2aWNlCisKKyNpbXBvcnQgImNvbW1v
bi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpCisKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wuaCIKKworI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCIKKworI2luY2x1ZGUgPEVH
TC9lZ2xleHQuaD4KKworbmFtZXNwYWNlIHJ4Cit7CisKK0RldmljZUVBR0w6OkRldmljZUVBR0wo
KSB7fQorCitEZXZpY2VFQUdMOjp+RGV2aWNlRUFHTCgpIHt9CisKK2VnbDo6RXJyb3IgRGV2aWNl
RUFHTDo6aW5pdGlhbGl6ZSgpCit7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitl
Z2w6OkVycm9yIERldmljZUVBR0w6OmdldEF0dHJpYnV0ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXksIEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKipvdXRWYWx1ZSkKK3sKKyAgICBEaXNwbGF5
RUFHTCAqZGlzcGxheUltcGwgPSBHZXRJbXBsQXM8RGlzcGxheUVBR0w+KGRpc3BsYXkpOworCisg
ICAgc3dpdGNoIChhdHRyaWJ1dGUpCisgICAgeworICAgICAgICBjYXNlIEVHTF9FQUdMX0NPTlRF
WFRfQU5HTEU6CisgICAgICAgICAgICAqb3V0VmFsdWUgPSBkaXNwbGF5SW1wbC0+Z2V0RUFHTENv
bnRleHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVn
bDo6Tm9FcnJvcigpOworfQorCitFR0xpbnQgRGV2aWNlRUFHTDo6Z2V0VHlwZSgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgRGV2aWNlRUFHTDo6Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6
RGV2aWNlRXh0ZW5zaW9ucyAqb3V0RXh0ZW5zaW9ucykgY29uc3QKK3sKKyAgICBvdXRFeHRlbnNp
b25zLT5kZXZpY2VFQUdMID0gdHJ1ZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRp
ZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EZXZpY2VFQUdMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9E
ZXZpY2VFQUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU0YjA4NmQwMDZmNjkyNTk0ODA1MjBhMWI0N2RhYWRm
YmFmMjkxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wuaApAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRGV2aWNlRUFH
TC5oOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6RGV2aWNlCisKKyNpZm5kZWYgTElCQU5H
TEVfUkVOREVSRVJfR0xfRUFHTF9ERVZJQ0VFQUdMX0hfCisjZGVmaW5lIExJQkFOR0xFX1JFTkRF
UkVSX0dMX0VBR0xfREVWSUNFRUFHTF9IXworCisjaW5jbHVkZSAibGliQU5HTEUvRGV2aWNlLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvRGV2aWNlSW1wbC5oIgorCituYW1lc3BhY2Ug
cngKK3sKK2NsYXNzIERldmljZUVBR0wgOiBwdWJsaWMgRGV2aWNlSW1wbAoreworICBwdWJsaWM6
CisgICAgRGV2aWNlRUFHTCgpOworICAgIH5EZXZpY2VFQUdMKCkgb3ZlcnJpZGU7CisKKyAgICBl
Z2w6OkVycm9yIGluaXRpYWxpemUoKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGdldEF0dHJp
YnV0ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMaW50IGF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICoqb3V0VmFsdWUpIG92ZXJyaWRlOworICAgIEVHTGludCBnZXRUeXBlKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBnZW5lcmF0ZUV4dGVuc2lvbnMoZWdsOjpEZXZpY2VFeHRlbnNpb25zICpvdXRFeHRl
bnNpb25zKSBjb25zdCBvdmVycmlkZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5k
aWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfREVWSUNFRUFHTF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wv
RGlzcGxheUVBR0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZmOTk1Y2M5MDk2NDVhNTFh
Mjc1NTgwMTAzMTFjMTdhMGY0ZWNiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgKQEAg
LTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBEaXNwbGF5RUFHTC5oOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6RGlzcGxh
eQorCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfRElTUExBWUVBR0xfSF8KKyNk
ZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9ESVNQTEFZRUFHTF9IXworCisjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvRGlzcGxheUdMLmgiCisKKyNpZmRlZiBfX09CSkNfXwor
QGNsYXNzIEVBR0xDb250ZXh0OwordHlwZWRlZiBFQUdMQ29udGV4dCogRUFHTENvbnRleHRPYmo7
CisjZWxzZQordHlwZWRlZiB2b2lkKiBFQUdMQ29udGV4dE9iajsKKyNlbmRpZgorCituYW1lc3Bh
Y2UgcngKK3sKKworY2xhc3MgV29ya2VyQ29udGV4dDsKKworY2xhc3MgRGlzcGxheUVBR0wgOiBw
dWJsaWMgRGlzcGxheUdMCit7CisgIHB1YmxpYzoKKyAgICBEaXNwbGF5RUFHTChjb25zdCBlZ2w6
OkRpc3BsYXlTdGF0ZSAmc3RhdGUpOworICAgIH5EaXNwbGF5RUFHTCgpIG92ZXJyaWRlOworCisg
ICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKKworICAgIFN1cmZhY2VJbXBsICpjcmVh
dGVXaW5kb3dTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0
ZU1hcCAmYXR0cmlicykgb3ZlcnJpZGU7CisgICAgU3VyZmFjZUltcGwgKmNyZWF0ZVBidWZmZXJT
dXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIG92
ZXJyaWRlOworICAgIFN1cmZhY2VJbXBsICpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihj
b25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVHTGVudW0gYnVmdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIG92ZXJyaWRlOworICAgIFN1cmZhY2VJbXBsICpj
cmVhdGVQaXhtYXBTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVQaXhtYXBUeXBlIG5hdGl2ZVBp
eG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicykgb3ZlcnJpZGU7CisKKyAgICBDb250ZXh0SW1wbCAqY3JlYXRl
Q29udGV4dChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpFcnJvclNldCAqZXJyb3JTZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykg
b3ZlcnJpZGU7CisKKyAgICBlZ2w6OkNvbmZpZ1NldCBnZW5lcmF0ZUNvbmZpZ3MoKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgdGVzdERldmljZUxvc3QoKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9y
IHJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7
CisKKyAgICBib29sIGlzVmFsaWROYXRpdmVXaW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5k
b3cpIGNvbnN0IG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdmFsaWRhdGVDbGllbnRCdWZmZXIo
Y29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgRGV2aWNlSW1wbCAqY3JlYXRlRGV2aWNlKCkgb3ZlcnJpZGU7
CisKKyAgICBzdGQ6OnN0cmluZyBnZXRWZW5kb3JTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGVnbDo6RXJyb3Igd2FpdENsaWVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3Zl
cnJpZGU7CisgICAgZWdsOjpFcnJvciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBFR0xpbnQgZW5naW5lKSBvdmVycmlkZTsKKworICAgIGdsOjpWZXJzaW9uIGdldE1heFN1
cHBvcnRlZEVTVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRUFHTENvbnRleHRPYmog
Z2V0RUFHTENvbnRleHQoKSBjb25zdDsKKworICAgIFdvcmtlckNvbnRleHQgKmNyZWF0ZVdvcmtl
ckNvbnRleHQoc3RkOjpzdHJpbmcgKmluZm9Mb2cpOworCisgICAgdm9pZCBpbml0aWFsaXplRnJv
bnRlbmRGZWF0dXJlcyhhbmdsZTo6RnJvbnRlbmRGZWF0dXJlcyAqZmVhdHVyZXMpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCBwb3B1bGF0ZUZlYXR1cmVMaXN0KGFuZ2xlOjpGZWF0dXJlTGlz
dCAqZmVhdHVyZXMpIG92ZXJyaWRlOworCisgIHByaXZhdGU6CisgICAgZWdsOjpFcnJvciBtYWtl
Q3VycmVudFN1cmZhY2VsZXNzKGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKworICAg
IHZvaWQgZ2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6RGlzcGxheUV4dGVuc2lvbnMgKm91dEV4dGVu
c2lvbnMpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZ2VuZXJhdGVDYXBzKGVnbDo6Q2FwcyAq
b3V0Q2FwcykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8UmVuZGVyZXJH
TD4gbVJlbmRlcmVyOworCisgICAgZWdsOjpEaXNwbGF5ICptRUdMRGlzcGxheTsKKyAgICBFQUdM
Q29udGV4dE9iaiBtQ29udGV4dDsKK307CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYg
IC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfRElTUExBWUVBR0xfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rp
c3BsYXlFQUdMLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUwN2FhYzQ4ZjNkMDdjZWM4
ZDljNzQ0ZWY3Yzk3NWIzNzczNzBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCkBA
IC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRGlzcGxheUVBR0wuY3BwOiBFQUdMIGltcGxlbWVudGF0aW9uIG9mIGVnbDo6RGlz
cGxheQorCisjaW1wb3J0ICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fSU9TKQorCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3Bs
YXlFQUdMLmgiCisKKyNpbXBvcnQgImNvbW1vbi9kZWJ1Zy5oIgorI2ltcG9ydCAiZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9EaXNwbGF5LmgiCisjaW1wb3J0
ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0NvbnRleHRFQUdMLmgiCisjaW1wb3J0ICJsaWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0RldmljZUVBR0wuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3Jl
bmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wuaCIKKyNpbXBvcnQgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmgiCisjaW1wb3J0ICJsaWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5oIgorI2ltcG9ydCAibGliQU5HTEUvcmVu
ZGVyZXIvZ2wvZWFnbC9XaW5kb3dTdXJmYWNlRUFHTC5oIgorCisjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNpbXBvcnQgPFF1YXJ0
ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8ZGxmY24uaD4KKworI2RlZmluZSBHTEVTX1NJ
TEVOQ0VfREVQUkVDQVRJT04KKworI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1V
TEFUT1IpCisKK25hbWVzcGFjZQoreworCitjb25zdCBjaGFyICprT3BlbkdMRVNEeWxpYk5hbWUg
PQorICAgICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0xFUy5mcmFtZXdvcmsvT3Bl
bkdMRVMiOworCit9CisKKyNlbmRpZgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgRnVuY3Rp
b25zR0xFQUdMIDogcHVibGljIEZ1bmN0aW9uc0dMCit7CisgIHB1YmxpYzoKKyAgICBGdW5jdGlv
bnNHTEVBR0wodm9pZCAqZHlsaWJIYW5kbGUpIDogbUR5bGliSGFuZGxlKGR5bGliSGFuZGxlKSB7
fQorCisgICAgfkZ1bmN0aW9uc0dMRUFHTCgpIG92ZXJyaWRlIHsgZGxjbG9zZShtRHlsaWJIYW5k
bGUpOyB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkICpsb2FkUHJvY0FkZHJlc3MoY29uc3Qgc3Rk
OjpzdHJpbmcgJmZ1bmN0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGRsc3ltKG1EeWxpYkhhbmRsZSwgZnVuY3Rpb24uY19zdHIoKSk7CisgICAgfQorCisgICAgdm9p
ZCAqbUR5bGliSGFuZGxlOworfTsKKworRGlzcGxheUVBR0w6OkRpc3BsYXlFQUdMKGNvbnN0IGVn
bDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKKyAgICA6IERpc3BsYXlHTChzdGF0ZSksCisgICAgICBt
RUdMRGlzcGxheShudWxscHRyKSwKKyAgICAgIG1Db250ZXh0KG51bGxwdHIpCit7fQorCitEaXNw
bGF5RUFHTDo6fkRpc3BsYXlFQUdMKCkge30KKworZWdsOjpFcnJvciBEaXNwbGF5RUFHTDo6aW5p
dGlhbGl6ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCit7CisgICAgbUVHTERpc3BsYXkgPSBkaXNw
bGF5OworCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQorICAgIHJl
dHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIkFOR0xFIHdpdGggRUFHTCBub3Qgc3Vw
cG9ydGVkIG9uIGlPUyBTaW11bGF0b3IgZHVlIHRvIGxhY2sgb2YgSU9TdXJmYWNlIHN1cHBvcnQu
IjsKKyNlbHNlCisgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICBpZiAoIWFuZ2xlOjpH
ZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdElu
aXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKyAg
ICB9CisKKyAgICBtQ29udGV4dCA9IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJOmtF
QUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMzXTsKKyAgICBpZiAobUNvbnRleHQgPT0gbnVsbHB0cikK
KyAgICB7CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIkNvdWxk
IG5vdCBjcmVhdGUgdGhlIEVBR0wgY29udGV4dC4iOworICAgIH0KKyAgICBbRUFHTENvbnRleHQg
c2V0Q3VycmVudENvbnRleHQ6bUNvbnRleHRdOworCisgICAgLy8gVGhlcmUgaXMgbm8gZXF1aXZh
bGVudCBnZXRQcm9jQWRkcmVzcyBpbiBFQUdMIHNvIHdlIG9wZW4gdGhlIGR5bGliIGRpcmVjdGx5
CisgICAgdm9pZCAqaGFuZGxlID0gZGxvcGVuKGtPcGVuR0xFU0R5bGliTmFtZSwgUlRMRF9OT1cp
OworICAgIGlmICghaGFuZGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsTm90SW5p
dGlhbGl6ZWQoKSA8PCAiQ291bGQgbm90IG9wZW4gdGhlIE9wZW5HTEVTIEZyYW1ld29yay4iOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbnNHTD4gZnVuY3Rpb25zR0wobmV3
IEZ1bmN0aW9uc0dMRUFHTChoYW5kbGUpKTsKKyAgICBmdW5jdGlvbnNHTC0+aW5pdGlhbGl6ZShk
aXNwbGF5LT5nZXRBdHRyaWJ1dGVNYXAoKSk7CisKKyAgICBtUmVuZGVyZXIucmVzZXQobmV3IFJl
bmRlcmVyRUFHTChzdGQ6Om1vdmUoZnVuY3Rpb25zR0wpLCBkaXNwbGF5LT5nZXRBdHRyaWJ1dGVN
YXAoKSwgdGhpcykpOworCisgICAgY29uc3QgZ2w6OlZlcnNpb24gJm1heFZlcnNpb24gPSBtUmVu
ZGVyZXItPmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigpOworICAgIGlmIChtYXhWZXJzaW9uIDwg
Z2w6OlZlcnNpb24oMiwgMCkpCisgICAgeworICAgICAgICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0
aWFsaXplZCgpIDw8ICJPcGVuR0wgRVMgMi4wIGlzIG5vdCBzdXBwb3J0YWJsZS4iOworICAgIH0K
KworICAgIHJldHVybiBEaXNwbGF5R0w6OmluaXRpYWxpemUoZGlzcGxheSk7CisjZW5kaWYKK30K
Kwordm9pZCBEaXNwbGF5RUFHTDo6dGVybWluYXRlKCkKK3sKKyAgICBEaXNwbGF5R0w6OnRlcm1p
bmF0ZSgpOworCisgICAgbVJlbmRlcmVyLnJlc2V0KCk7CisgICAgaWYgKG1Db250ZXh0ICE9IG51
bGxwdHIpCisgICAgeworICAgICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmls
XTsKKyAgICAgICAgW21Db250ZXh0IHJlbGVhc2VdOworICAgICAgICBtQ29udGV4dCA9IG51bGxw
dHI7CisgICAgfQorfQorCitTdXJmYWNlSW1wbCAqRGlzcGxheUVBR0w6OmNyZWF0ZVdpbmRvd1N1
cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicykKK3sKKyAgICByZXR1cm4gbmV3IFdpbmRvd1N1cmZhY2VFQUdM
KHN0YXRlLCBtUmVuZGVyZXIuZ2V0KCksIHdpbmRvdywgbUNvbnRleHQpOworfQorCitTdXJmYWNl
SW1wbCAqRGlzcGxheUVBR0w6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKK3sKKyAgICBFR0xpbnQgd2lk
dGggID0gc3RhdGljX2Nhc3Q8RUdMaW50PihhdHRyaWJzLmdldChFR0xfV0lEVEgsIDApKTsKKyAg
ICBFR0xpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8RUdMaW50PihhdHRyaWJzLmdldChFR0xfSEVJ
R0hULCAwKSk7CisgICAgcmV0dXJuIG5ldyBQYnVmZmVyU3VyZmFjZUVBR0woc3RhdGUsIG1SZW5k
ZXJlci5nZXQoKSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1N1cmZhY2VJbXBsICpEaXNwbGF5RUFH
TDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUg
JnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTGVudW0gYnVmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQoreworICAgIEFTU0VSVChidWZ0eXBlID09IEVH
TF9JT1NVUkZBQ0VfQU5HTEUpOworICAgIHJldHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZUVBR0wo
c3RhdGUsIG1Db250ZXh0LCBjbGllbnRCdWZmZXIsIGF0dHJpYnMpOworfQorCitTdXJmYWNlSW1w
bCAqRGlzcGxheUVBR0w6OmNyZWF0ZVBpeG1hcFN1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3Rh
dGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TmF0aXZlUGl4bWFwVHlwZSBuYXRpdmVQaXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKK3sK
KyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0NvbnRleHRJ
bXBsICpEaXNwbGF5RUFHTDo6Y3JlYXRlQ29udGV4dChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkVycm9yU2V0ICplcnJv
clNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6
Q29uZmlnICpjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQor
eworICAgIHJldHVybiBuZXcgQ29udGV4dEVBR0woc3RhdGUsIGVycm9yU2V0LCBtUmVuZGVyZXIp
OworfQorCitEZXZpY2VJbXBsICpEaXNwbGF5RUFHTDo6Y3JlYXRlRGV2aWNlKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IERldmljZUVBR0woKTsKK30KKworZWdsOjpDb25maWdTZXQgRGlzcGxheUVBR0w6
OmdlbmVyYXRlQ29uZmlncygpCit7CisgICAgLy8gVE9ETyhjd2FsbGV6KTogZ2VuZXJhdGUgbW9y
ZSBjb25maWcgcGVybXV0YXRpb25zCisgICAgZWdsOjpDb25maWdTZXQgY29uZmlnczsKKworICAg
IGNvbnN0IGdsOjpWZXJzaW9uICZtYXhWZXJzaW9uID0gZ2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9u
KCk7CisgICAgQVNTRVJUKG1heFZlcnNpb24gPj0gZ2w6OlZlcnNpb24oMiwgMCkpOworICAgIGJv
b2wgc3VwcG9ydHNFUzMgPSBtYXhWZXJzaW9uID49IGdsOjpWZXJzaW9uKDMsIDApOworCisgICAg
ZWdsOjpDb25maWcgY29uZmlnOworCisgICAgLy8gTmF0aXZlIHN0dWZmCisgICAgY29uZmlnLm5h
dGl2ZVZpc3VhbElEICAgPSAwOworICAgIGNvbmZpZy5uYXRpdmVWaXN1YWxUeXBlID0gMDsKKyAg
ICBjb25maWcubmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9UUlVFOworCisgICAgLy8gQnVmZmVyIHNp
emVzCisgICAgY29uZmlnLnJlZFNpemUgICAgID0gODsKKyAgICBjb25maWcuZ3JlZW5TaXplICAg
PSA4OworICAgIGNvbmZpZy5ibHVlU2l6ZSAgICA9IDg7CisgICAgY29uZmlnLmFscGhhU2l6ZSAg
ID0gODsKKyAgICBjb25maWcuZGVwdGhTaXplICAgPSAyNDsKKyAgICBjb25maWcuc3RlbmNpbFNp
emUgPSA4OworCisgICAgY29uZmlnLmNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOwor
ICAgIGNvbmZpZy5sdW1pbmFuY2VTaXplICAgPSAwOworICAgIGNvbmZpZy5hbHBoYU1hc2tTaXpl
ICAgPSAwOworCisgICAgY29uZmlnLmJ1ZmZlclNpemUgPSBjb25maWcucmVkU2l6ZSArIGNvbmZp
Zy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUgKyBjb25maWcuYWxwaGFTaXplOworCisgICAg
Y29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOworCisgICAgLy8gUGJ1ZmZlcgorICAg
IGNvbmZpZy5tYXhQQnVmZmVyV2lkdGggID0gNDA5NjsKKyAgICBjb25maWcubWF4UEJ1ZmZlckhl
aWdodCA9IDQwOTY7CisgICAgY29uZmlnLm1heFBCdWZmZXJQaXhlbHMgPSA0MDk2ICogNDA5NjsK
KworICAgIC8vIENhdmVhdAorICAgIGNvbmZpZy5jb25maWdDYXZlYXQgPSBFR0xfTk9ORTsKKwor
ICAgIC8vIE1pc2MKKyAgICBjb25maWcuc2FtcGxlQnVmZmVycyAgICAgPSAwOworICAgIGNvbmZp
Zy5zYW1wbGVzICAgICAgICAgICA9IDA7CisgICAgY29uZmlnLmxldmVsICAgICAgICAgICAgID0g
MDsKKyAgICBjb25maWcuYmluZFRvVGV4dHVyZVJHQiAgPSBFR0xfRkFMU0U7CisgICAgY29uZmln
LmJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0ZBTFNFOworCisgICAgY29uZmlnLnN1cmZhY2VUeXBl
ID0gRUdMX1dJTkRPV19CSVQgfCBFR0xfUEJVRkZFUl9CSVQ7CisKKyAgICBjb25maWcubWluU3dh
cEludGVydmFsID0gMTsKKyAgICBjb25maWcubWF4U3dhcEludGVydmFsID0gMTsKKworICAgIGNv
bmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBHTF9SR0JBODsKKyAgICBjb25maWcuZGVwdGhTdGVu
Y2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMODsKKworICAgIGNvbmZpZy5jb25mb3JtYW50
ICAgICA9IEVHTF9PUEVOR0xfRVMyX0JJVCB8IChzdXBwb3J0c0VTMyA/IEVHTF9PUEVOR0xfRVMz
X0JJVF9LSFIgOiAwKTsKKyAgICBjb25maWcucmVuZGVyYWJsZVR5cGUgPSBjb25maWcuY29uZm9y
bWFudDsKKworICAgIGNvbmZpZy5tYXRjaE5hdGl2ZVBpeG1hcCA9IEVHTF9OT05FOworCisgICAg
Y29uZmlnLmNvbG9yQ29tcG9uZW50VHlwZSA9IEVHTF9DT0xPUl9DT01QT05FTlRfVFlQRV9GSVhF
RF9FWFQ7CisKKyAgICBjb25maWdzLmFkZChjb25maWcpOworICAgIHJldHVybiBjb25maWdzOwor
fQorCitib29sIERpc3BsYXlFQUdMOjp0ZXN0RGV2aWNlTG9zdCgpCit7CisgICAgLy8gVE9ETyhj
d2FsbGV6KSBpbnZlc3RpZ2F0ZSBpbXBsZW1lbnRpbmcgdGhpcworICAgIHJldHVybiBmYWxzZTsK
K30KKworZWdsOjpFcnJvciBEaXNwbGF5RUFHTDo6cmVzdG9yZUxvc3REZXZpY2UoY29uc3QgZWds
OjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4g
ZWdsOjpFZ2xCYWREaXNwbGF5KCk7Cit9CisKK2Jvb2wgRGlzcGxheUVBR0w6OmlzVmFsaWROYXRp
dmVXaW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0Cit7CisgICAgTlNPYmpl
Y3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAqPih3aW5kb3cpOworICAgIHJl
dHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworfQorCitlZ2w6OkVy
cm9yIERpc3BsYXlFQUdMOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZpZyAq
Y29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmli
cykgY29uc3QKK3sKKyAgICBBU1NFUlQoYnVmdHlwZSA9PSBFR0xfSU9TVVJGQUNFX0FOR0xFKTsK
KworICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnZhbGlkYXRlQXR0cmlidXRlcyhjbGll
bnRCdWZmZXIsIGF0dHJpYnMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0
cmlidXRlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitzdGQ6
OnN0cmluZyBEaXNwbGF5RUFHTDo6Z2V0VmVuZG9yU3RyaW5nKCkgY29uc3QKK3sKKyAgICAvLyBU
T0RPKGN3YWxsZXopIGZpbmQgYSB1c2VmdWwgdmVuZG9yIHN0cmluZworICAgIHJldHVybiAiIjsK
K30KKworRUFHTENvbnRleHRPYmogRGlzcGxheUVBR0w6OmdldEVBR0xDb250ZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUNvbnRleHQ7Cit9CisKK3ZvaWQgRGlzcGxheUVBR0w6OmdlbmVyYXRl
RXh0ZW5zaW9ucyhlZ2w6OkRpc3BsYXlFeHRlbnNpb25zICpvdXRFeHRlbnNpb25zKSBjb25zdAor
eworICAgIG91dEV4dGVuc2lvbnMtPmlvc3VyZmFjZUNsaWVudEJ1ZmZlciA9IHRydWU7CisgICAg
b3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0ICAgID0gdHJ1ZTsKKyAgICBvdXRFeHRl
bnNpb25zLT5kZXZpY2VRdWVyeSAgICAgICAgICAgPSB0cnVlOworCisgICAgLy8gQ29udGV4dHMg
YXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICBv
dXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgPSB0cnVlOworCisgICAgb3V0
RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFsc2U7CisKKyAgICBEaXNwbGF5R0w6Omdl
bmVyYXRlRXh0ZW5zaW9ucyhvdXRFeHRlbnNpb25zKTsKK30KKwordm9pZCBEaXNwbGF5RUFHTDo6
Z2VuZXJhdGVDYXBzKGVnbDo6Q2FwcyAqb3V0Q2FwcykgY29uc3QKK3sKKyAgICBvdXRDYXBzLT50
ZXh0dXJlTlBPVCA9IHRydWU7Cit9CisKK2VnbDo6RXJyb3IgRGlzcGxheUVBR0w6OndhaXRDbGll
bnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgLy8gVE9ETyhjd2FsbGV6KSBV
TklNUExFTUVOVEVEKCkKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJy
b3IgRGlzcGxheUVBR0w6OndhaXROYXRpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVH
TGludCBlbmdpbmUpCit7CisgICAgLy8gVE9ETyhjd2FsbGV6KSBVTklNUExFTUVOVEVEKCkKKyAg
ICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2dsOjpWZXJzaW9uIERpc3BsYXlFQUdMOjpn
ZXRNYXhTdXBwb3J0ZWRFU1ZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyZXIt
PmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigpOworfQorCitlZ2w6OkVycm9yIERpc3BsYXlFQUdM
OjptYWtlQ3VycmVudFN1cmZhY2VsZXNzKGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIC8v
IFdlIGhhdmUgbm90aGluZyB0byBkbyBhcyBtQ29udGV4dCBpcyBhbHdheXMgY3VycmVudCwgYW5k
IHRoYXQgRUFHTCBpcyBzdXJmYWNlbGVzcyBieQorICAgIC8vIGRlZmF1bHQuCisgICAgcmV0dXJu
IGVnbDo6Tm9FcnJvcigpOworfQorCitjbGFzcyBXb3JrZXJDb250ZXh0RUFHTCBmaW5hbCA6IHB1
YmxpYyBXb3JrZXJDb250ZXh0Cit7CisgIHB1YmxpYzoKKyAgICBXb3JrZXJDb250ZXh0RUFHTChF
QUdMQ29udGV4dE9iaiBjb250ZXh0KTsKKyAgICB+V29ya2VyQ29udGV4dEVBR0woKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgbWFrZUN1cnJlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVubWFrZUN1
cnJlbnQoKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIEVBR0xDb250ZXh0T2JqIG1Db250
ZXh0OworfTsKKworV29ya2VyQ29udGV4dEVBR0w6OldvcmtlckNvbnRleHRFQUdMKEVBR0xDb250
ZXh0T2JqIGNvbnRleHQpIDogbUNvbnRleHQoY29udGV4dCkge30KKworV29ya2VyQ29udGV4dEVB
R0w6On5Xb3JrZXJDb250ZXh0RUFHTCgpCit7CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRD
b250ZXh0Om5pbF07CisgICAgW21Db250ZXh0IHJlbGVhc2VdOworICAgIG1Db250ZXh0ID0gbnVs
bHB0cjsKK30KKworYm9vbCBXb3JrZXJDb250ZXh0RUFHTDo6bWFrZUN1cnJlbnQoKQoreworICAg
IGlmICghW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250
ZXh0Kj4obUNvbnRleHQpXSkKKyAgICB7CisgICAgICAgIEVSUigpIDw8ICJVbmFibGUgdG8gbWFr
ZSBnbCBjb250ZXh0IGN1cnJlbnQuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0RUFHTDo6dW5tYWtlQ3VycmVu
dCgpCit7CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5pbF07Cit9CisKK1dv
cmtlckNvbnRleHQgKkRpc3BsYXlFQUdMOjpjcmVhdGVXb3JrZXJDb250ZXh0KHN0ZDo6c3RyaW5n
ICppbmZvTG9nKQoreworICAgIEVBR0xDb250ZXh0T2JqIGNvbnRleHQgPSBudWxscHRyOworICAg
IGNvbnRleHQgPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmlu
Z0FQSU9wZW5HTEVTM107CisgICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAgKmluZm9M
b2cgKz0gIkNvdWxkIG5vdCBjcmVhdGUgdGhlIEVBR0wgY29udGV4dC4iOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3IFdvcmtlckNvbnRleHRFQUdMKGNv
bnRleHQpOworfQorCit2b2lkIERpc3BsYXlFQUdMOjppbml0aWFsaXplRnJvbnRlbmRGZWF0dXJl
cyhhbmdsZTo6RnJvbnRlbmRGZWF0dXJlcyAqZmVhdHVyZXMpIGNvbnN0Cit7CisgICAgbVJlbmRl
cmVyLT5pbml0aWFsaXplRnJvbnRlbmRGZWF0dXJlcyhmZWF0dXJlcyk7Cit9CisKK3ZvaWQgRGlz
cGxheUVBR0w6OnBvcHVsYXRlRmVhdHVyZUxpc3QoYW5nbGU6OkZlYXR1cmVMaXN0ICpmZWF0dXJl
cykKK3sKKyAgICBtUmVuZGVyZXItPmdldEZlYXR1cmVzKCkucG9wdWxhdGVGZWF0dXJlTGlzdChm
ZWF0dXJlcyk7Cit9Cit9CisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yYzQwMDBhYzg0YTAxNWFkMDg0M2E0YzAwZjlkOGU3NjRmMmJiNjY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wuaApAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTElCQU5H
TEVfUkVOREVSRVJfR0xfRUFHTF9JT1NVUkZBQ0VTVVJGQUNFRUFHTF9IXworI2RlZmluZSBMSUJB
TkdMRV9SRU5ERVJFUl9HTF9FQUdMX0lPU1VSRkFDRVNVUkZBQ0VFQUdMX0hfCisKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdXJmYWNlR0wuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLmgiCisKK3N0cnVjdCBfX0lPU3VyZmFjZTsKK3R5
cGVkZWYgX19JT1N1cmZhY2UgKklPU3VyZmFjZVJlZjsKKworbmFtZXNwYWNlIGVnbAoreworY2xh
c3MgQXR0cmlidXRlTWFwOworfSAgLy8gbmFtZXNwYWNlIGVnbAorCituYW1lc3BhY2UgcngKK3sK
KworY2xhc3MgRGlzcGxheUVBR0w7CitjbGFzcyBGdW5jdGlvbnNHTDsKK2NsYXNzIFN0YXRlTWFu
YWdlckdMOworCitjbGFzcyBJT1N1cmZhY2VTdXJmYWNlRUFHTCA6IHB1YmxpYyBTdXJmYWNlR0wK
K3sKKyAgcHVibGljOgorICAgIElPU3VyZmFjZVN1cmZhY2VFQUdMKGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVBR0xDb250ZXh0T2JqIGNn
bENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJp
YnMpOworICAgIH5JT1N1cmZhY2VTdXJmYWNlRUFHTCgpIG92ZXJyaWRlOworCisgICAgZWdsOjpF
cnJvciBpbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7Cisg
ICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3Zl
cnJpZGU7CisgICAgZWdsOjpFcnJvciB1bk1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3Igc3dhcChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBwb3N0U3ViQnVmZmVyKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xp
bnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZh
Y2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsK
KyAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKyAgICBlZ2w6
OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50
IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVy
dmFsKSBvdmVycmlkZTsKKworICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEVHTGludCBpc1Bv
c3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFR0xpbnQgZ2V0U3dh
cEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZUF0
dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAg
JmF0dHJpYnMpOworICAgIEZyYW1lYnVmZmVySW1wbCAqY3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVy
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSkgb3Zl
cnJpZGU7CisKKyAgICBib29sIGhhc0VtdWxhdGVkQWxwaGFDaGFubmVsKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgcHJpdmF0ZToKKyAgICBhbmdsZTo6UmVzdWx0IGluaXRpYWxpemVBbHBoYUNoYW5u
ZWwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMdWludCB0ZXh0dXJlKTsKKworICAgIEVB
R0xDb250ZXh0T2JqIG1FQUdMQ29udGV4dDsKKyAgICBJT1N1cmZhY2VSZWYgbUlPU3VyZmFjZTsK
KyAgICBpbnQgbVdpZHRoOworICAgIGludCBtSGVpZ2h0OworICAgIGludCBtUGxhbmU7CisgICAg
aW50IG1Gb3JtYXRJbmRleDsKKworICAgIGJvb2wgbUFscGhhSW5pdGlhbGl6ZWQ7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcngKKworI2VuZGlmICAvLyBMSUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdM
X0lPU1VSRkFDRVNVUkZBQ0VFQUdMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5t
bSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWds
L0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhZjNlM2NlYmFmYTk5M2NkN2Qz
MTg5Mzc4OTgwZDVmN2I1ZDE5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFH
TC5tbQpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChB
TkdMRV9QTEFURk9STV9JT1MpCisKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wv
SU9TdXJmYWNlU3VyZmFjZUVBR0wuaCIKKworI2ltcG9ydCAiY29tbW9uL2RlYnVnLmgiCisjaW1w
b3J0ICJsaWJBTkdMRS9BdHRyaWJ1dGVNYXAuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVy
L2dsL0JsaXRHTC5oIgorI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvRnJhbWVidWZmZXJH
TC5oIgorI2ltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvRnVuY3Rpb25zR0wuaCIKKyNpbXBv
cnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL1JlbmRlcmVyR0wuaCIKKyNpbXBvcnQgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL1N0YXRlTWFuYWdlckdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJl
ci9nbC9UZXh0dXJlR0wuaCIKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlz
cGxheUVBR0wuaCIKKworI2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgorI2ltcG9ydCA8
T3BlbkdMRVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3VyZmFjZS5oPgorI2lt
cG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+CisKK25hbWVzcGFjZSByeAoreworCituYW1l
c3BhY2UKK3sKKworc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gaW50
ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisKKyAgICBzaXplX3QgY29tcG9uZW50Qnl0
ZXM7CisKKyAgICBHTGVudW0gbmF0aXZlSW50ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIG5hdGl2
ZUZvcm1hdDsKKyAgICBHTGVudW0gbmF0aXZlVHlwZTsKK307CisKKy8vIGNsYW5nLWZvcm1hdCBv
ZmYKKworc3RhdGljIGNvbnN0IElPU3VyZmFjZUZvcm1hdEluZm8ga0lPU3VyZmFjZUZvcm1hdHNb
XSA9IHsKKyAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAxLCBHTF9SRUQsICBH
TF9SRUQsICBHTF9VTlNJR05FRF9CWVRFIH0sCisgICAge0dMX1IxNlVJLCAgICBHTF9VTlNJR05F
RF9TSE9SVCwgMiwgR0xfUkVELCAgR0xfUkVELCAgR0xfVU5TSUdORURfU0hPUlR9LAorICAgIHtH
TF9SRywgICAgICAgR0xfVU5TSUdORURfQllURSwgIDIsIEdMX1JHLCAgIEdMX1JHLCAgIEdMX1VO
U0lHTkVEX0JZVEUgfSwKKyAgICB7R0xfUkdCLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICA0LCBH
TF9SR0JBLCBHTF9CR1JBLCBHTF9VTlNJR05FRF9CWVRFIH0sCisgICAge0dMX0JHUkFfRVhULCBH
TF9VTlNJR05FRF9CWVRFLCAgNCwgR0xfUkdCQSwgR0xfQkdSQSwgR0xfVU5TSUdORURfQllURSB9
LAorICAgIHtHTF9SR0JBLCAgICAgR0xfSEFMRl9GTE9BVCwgICAgIDgsIEdMX1JHQkEsIEdMX1JH
QkEsIEdMX0hBTEZfRkxPQVQgICAgfSwKK307CisKKy8vIGNsYW5nLWZvcm1hdCBvbgorCitpbnQg
RmluZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5
cGUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KEFycmF5U2l6
ZShrSU9TdXJmYWNlRm9ybWF0cykpOyArK2kpCisgICAgeworICAgICAgICBjb25zdCBhdXRvICZm
b3JtYXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNbaV07CisgICAgICAgIGlmIChmb3JtYXRJbmZv
LmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gLTE7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSU9TdXJm
YWNlU3VyZmFjZUVBR0w6OklPU3VyZmFjZVN1cmZhY2VFQUdMKGNvbnN0IGVnbDo6U3VyZmFjZVN0
YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFH
TENvbnRleHRPYmogY2dsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgICAg
OiBTdXJmYWNlR0woc3RhdGUpLAorICAgICAgbUVBR0xDb250ZXh0KGNnbENvbnRleHQpLAorICAg
ICAgbUlPU3VyZmFjZShudWxscHRyKSwKKyAgICAgIG1XaWR0aCgwKSwKKyAgICAgIG1IZWlnaHQo
MCksCisgICAgICBtUGxhbmUoMCksCisgICAgICBtRm9ybWF0SW5kZXgoLTEpLAorICAgICAgbUFs
cGhhSW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgLy8gS2VlcCByZWZlcmVuY2UgdG8gdGhlIElP
U3VyZmFjZSBzbyBpdCBkb2Vzbid0IGdldCBkZWxldGVkIHdoaWxlIHRoZSBwYnVmZmVyIGV4aXN0
cy4KKyAgICBtSU9TdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxJT1N1cmZhY2VSZWY+KGJ1ZmZl
cik7CisgICAgQ0ZSZXRhaW4obUlPU3VyZmFjZSk7CisKKyAgICAvLyBFeHRyYWN0IGF0dHJpYnMg
dXNlZnVsIGZvciB0aGUgY2FsbCB0byBFQUdMVGV4SW1hZ2VJT1N1cmZhY2UyRAorICAgIG1XaWR0
aCAgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworICAgIG1IZWln
aHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpKTsKKyAgICBtUGxh
bmUgID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfSU9TVVJGQUNFX1BMQU5FX0FO
R0xFKSk7CisKKyAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJzLmdldChFR0xf
VEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOworICAgIEVHTEF0dHJpYiB0eXBlICAgICAg
ICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworICAgIG1Gb3JtYXRJ
bmRleCA9CisgICAgICAgIEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNfY2FzdDxHTGVu
dW0+KGludGVybmFsRm9ybWF0KSwgc3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7CisgICAgQVNT
RVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKworICAgIG1BbHBoYUluaXRpYWxpemVkID0gIWhhc0Vt
dWxhdGVkQWxwaGFDaGFubmVsKCk7Cit9CisKK0lPU3VyZmFjZVN1cmZhY2VFQUdMOjp+SU9TdXJm
YWNlU3VyZmFjZUVBR0woKQoreworICAgIGlmIChtSU9TdXJmYWNlICE9IG51bGxwdHIpCisgICAg
eworICAgICAgICBDRlJlbGVhc2UobUlPU3VyZmFjZSk7CisgICAgICAgIG1JT1N1cmZhY2UgPSBu
dWxscHRyOworICAgIH0KK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aW5p
dGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCit7CisgICAgcmV0dXJuIGVnbDo6
Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VFQUdMOjptYWtlQ3Vy
cmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gZWdsOjpOb0Vy
cm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnVuTWFrZUN1cnJl
bnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgR2V0RnVuY3Rpb25zR0woY29u
dGV4dCktPmZsdXNoKCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VFQUdMOjpzd2FwKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
KQoreworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50
IGhlaWdodCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3Io
KTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1ZSkKK3sKKyAgICBVTlJFQUNI
QUJMRSgpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNl
ZC12YXJpYWJsZSIKKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6YmluZFRleElt
YWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQoreworI2lmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisgICAgU3RhdGVNYW5hZ2VyR0wg
KnN0YXRlTWFuYWdlciA9IEdldFN0YXRlTWFuYWdlckdMKGNvbnRleHQpOworCisgICAgY29uc3Qg
VGV4dHVyZUdMICp0ZXh0dXJlR0wgPSBHZXRJbXBsQXM8VGV4dHVyZUdMPih0ZXh0dXJlKTsKKyAg
ICBHTHVpbnQgdGV4dHVyZUlEICAgICAgICAgICA9IHRleHR1cmVHTC0+Z2V0VGV4dHVyZUlEKCk7
CisgICAgc3RhdGVNYW5hZ2VyLT5iaW5kVGV4dHVyZShnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgdGV4
dHVyZUlEKTsKKyAgICBjb25zdCBhdXRvICZmb3JtYXQgPSBrSU9TdXJmYWNlRm9ybWF0c1ttRm9y
bWF0SW5kZXhdOworCisgICAgaWYgKCFbbUVBR0xDb250ZXh0IHRleEltYWdlSU9TdXJmYWNlOm1J
T1N1cmZhY2UgdGFyZ2V0OkdMX1RFWFRVUkVfMkQgaW50ZXJuYWxGb3JtYXQ6Zm9ybWF0Lm5hdGl2
ZUludGVybmFsRm9ybWF0IHdpZHRoOm1XaWR0aCBoZWlnaHQ6bUhlaWdodCBmb3JtYXQ6Zm9ybWF0
Lm5hdGl2ZUZvcm1hdCB0eXBlOmZvcm1hdC5uYXRpdmVUeXBlIHBsYW5lOm1QbGFuZV0pIHsKKyAg
ICAgICAgcmV0dXJuIGVnbDo6RWdsQ29udGV4dExvc3QoKSA8PCAiRUFHTENvbnRleHQgdGV4SW1h
Z2VJT1N1cmZhY2UyRCBmYWlsZWQuIjsKKyAgICB9CisKKyAgICBpZiAoSXNFcnJvcihpbml0aWFs
aXplQWxwaGFDaGFubmVsKGNvbnRleHQsIHRleHR1cmVJRCkpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVnbDo6RWdsQ29udGV4dExvc3QoKSA8PCAiRmFpbGVkIHRvIGluaXRpYWxpemUgSU9TdXJm
YWNlIGFscGhhIGNoYW5uZWwuIjsKKyAgICB9CisKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7
CisjZWxzZQorICAgIHJldHVybiBlZ2w6OkVnbENvbnRleHRMb3N0KCkgPDwgIkVBR0xDb250ZXh0
IElPU3VyZmFjZSBub3Qgc3VwcG9ydGVkIGluIHRoZSBzaW11bGF0b3IuIjsKKyNlbmRpZgorfQor
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdM
aW50IGJ1ZmZlcikKK3sKKyAgICBjb25zdCBGdW5jdGlvbnNHTCAqZnVuY3Rpb25zID0gR2V0RnVu
Y3Rpb25zR0woY29udGV4dCk7CisgICAgZnVuY3Rpb25zLT5mbHVzaCgpOworICAgIHJldHVybiBl
Z2w6Ok5vRXJyb3IoKTsKK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6c2V0U3dhcElu
dGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVdpZHRoOworfQorCitFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OmdldEhlaWdodCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNl
RUFHTDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICBVTlJFQUNIQUJM
RSgpOworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNl
RUFHTDo6Z2V0U3dhcEJlaGF2aW9yKCkgY29uc3QKK3sKKyAgICAvLyBOL0EgYmVjYXVzZSB5b3Ug
Y2FuJ3QgTWFrZUN1cnJlbnQgYW4gSU9TdXJmYWNlLCByZXR1cm4gYW55IHZhbGlkIHZhbHVlLgor
ICAgIHJldHVybiBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKK30KKworLy8gc3RhdGljCitib29sIElP
U3VyZmFjZVN1cmZhY2VFQUdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQoreworI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX0lPU19TSU1VTEFUT1IpCisgICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SU9TdXJmYWNlUmVmPihidWZmZXIpOworCisgICAgLy8gVGhlIHBsYW5lIG11c3Qg
ZXhpc3QgZm9yIHRoaXMgSU9TdXJmYWNlLiBJT1N1cmZhY2VHZXRQbGFuZUNvdW50IGNhbiByZXR1
cm4gMCBmb3Igbm9uLXBsYW5hcgorICAgIC8vIGlvU3VyZmFjZXMgYnV0IHdlIHdpbGwgdHJlYXQg
bm9uLXBsYW5hciBsaWtlIGl0IGlzIGEgc2luZ2xlIHBsYW5lLgorICAgIHNpemVfdCBzdXJmYWNl
UGxhbmVDb3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChp
b1N1cmZhY2UpKTsKKyAgICBFR0xBdHRyaWIgcGxhbmUgICAgICAgICAgPSBhdHRyaWJzLmdldChF
R0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKTsKKyAgICBpZiAocGxhbmUgPCAwIHx8IHN0YXRpY19j
YXN0PHNpemVfdD4ocGxhbmUpID49IHN1cmZhY2VQbGFuZUNvdW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSB3aWR0aCBoZWlnaHQgc3BlY2lmaWVk
IG11c3QgYmUgYXQgbGVhc3QgKDEsIDEpIGFuZCBhdCBtb3N0IHRoZSBwbGFuZSBzaXplCisgICAg
RUdMQXR0cmliIHdpZHRoICA9IGF0dHJpYnMuZ2V0KEVHTF9XSURUSCk7CisgICAgRUdMQXR0cmli
IGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOworICAgIGlmICh3aWR0aCA8PSAwIHx8
IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKGlv
U3VyZmFjZSwgcGxhbmUpIHx8CisgICAgICAgIGhlaWdodCA8PSAwIHx8IHN0YXRpY19jYXN0PHNp
emVfdD4oaGVpZ2h0KSA+IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoaW9TdXJmYWNlLCBwbGFu
ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRmluZCB0
aGlzIElPU3VyZmFjZSBmb3JtYXQKKyAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRy
aWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOworICAgIEVHTEF0dHJp
YiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOwor
CisgICAgaW50IGZvcm1hdEluZGV4ID0KKyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+
KHR5cGUpKTsKKworICAgIGlmIChmb3JtYXRJbmRleCA8IDApCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZm9ybWF0IG1hdGNoZXMg
dGhpcyBJT1N1cmZhY2UgcGxhbmUKKyAgICBpZiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50
T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSAhPQorICAgICAgICBrSU9TdXJmYWNlRm9ybWF0c1tm
b3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisvLyBXcmFwcyBhIEZyYW1lYnVmZmVyR0wgdG8gaG9vayB0aGUgZGVzdHJveSBm
dW5jdGlvbiB0byBkZWxldGUgdGhlIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZQorLy8gZnJh
bWVidWZmZXIuCitjbGFzcyBJT1N1cmZhY2VGcmFtZWJ1ZmZlciA6IHB1YmxpYyBGcmFtZWJ1ZmZl
ckdMCit7CisgIHB1YmxpYzoKKyAgICBJT1N1cmZhY2VGcmFtZWJ1ZmZlcihjb25zdCBnbDo6RnJh
bWVidWZmZXJTdGF0ZSAmZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHRleHR1cmVJZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGVtdWxhdGVkQWxwaGEpCisgICAgICAgIDogRnJhbWVidWZmZXJHTChkYXRhLCBpZCwgaXNE
ZWZhdWx0LCBlbXVsYXRlZEFscGhhKSwgbVRleHR1cmVJZCh0ZXh0dXJlSWQpCisgICAge30KKyAg
ICB2b2lkIGRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBHZXRGdW5jdGlvbnNHTChjb250ZXh0KS0+ZGVsZXRlVGV4dHVyZXMoMSwgJm1U
ZXh0dXJlSWQpOworICAgICAgICBGcmFtZWJ1ZmZlckdMOjpkZXN0cm95KGNvbnRleHQpOworICAg
IH0KKworICBwcml2YXRlOgorICAgIEdMdWludCBtVGV4dHVyZUlkOworfTsKKworI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC12YXJpYWJsZSIKKworRnJhbWVidWZmZXJJbXBsICpJT1N1cmZhY2VTdXJmYWNlRUFH
TDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlKQoreworICAgIGNvbnN0IEZ1
bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBHZXRGdW5jdGlvbnNHTChjb250ZXh0KTsKKyAgICBTdGF0
ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2VyID0gR2V0U3RhdGVNYW5hZ2VyR0woY29udGV4dCk7CisK
KyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZnVuY3Rpb25zLT5nZW5UZXh0dXJlcygxLCAm
dGV4dHVyZSk7CisgICAgY29uc3QgYXV0byAmZm9ybWF0ID0ga0lPU3VyZmFjZUZvcm1hdHNbbUZv
cm1hdEluZGV4XTsKKyAgICBzdGF0ZU1hbmFnZXItPmJpbmRUZXh0dXJlKGdsOjpUZXh0dXJlVHlw
ZTo6XzJELCB0ZXh0dXJlKTsKKworI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1V
TEFUT1IpCisgICAgaWYgKCFbbUVBR0xDb250ZXh0IHRleEltYWdlSU9TdXJmYWNlOm1JT1N1cmZh
Y2UgdGFyZ2V0OkdMX1RFWFRVUkVfMkQgaW50ZXJuYWxGb3JtYXQ6Zm9ybWF0Lm5hdGl2ZUludGVy
bmFsRm9ybWF0IHdpZHRoOm1XaWR0aCBoZWlnaHQ6bUhlaWdodCBmb3JtYXQ6Zm9ybWF0Lm5hdGl2
ZUZvcm1hdCB0eXBlOmZvcm1hdC5uYXRpdmVUeXBlIHBsYW5lOm1QbGFuZV0pIHsKKyAgICAgICAg
RVJSKCkgPDwgIltFQUdMQ29udGV4dCB0ZXhJbWFnZUlPU3VyZmFjZV0gZmFpbGVkIjsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorI2Vsc2UKKyAgICBFUlIoKSA8PCAiSU9TdXJmYWNl
cyBub3Qgc3VwcG9ydGVkIG9uIGlPUyBTaW11bGF0b3IiOworI2VuZGlmCisKKyAgICBpZiAoSXNF
cnJvcihpbml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnRleHQsIHRleHR1cmUpKSkKKyAgICB7Cisg
ICAgICAgIEVSUigpIDw8ICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBJT1N1cmZhY2UgYWxwaGEgY2hh
bm5lbC4iOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHTHVpbnQgZnJh
bWVidWZmZXIgPSAwOworICAgIGZ1bmN0aW9ucy0+Z2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1
ZmZlcik7CisgICAgc3RhdGVNYW5hZ2VyLT5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IGZyYW1lYnVmZmVyKTsKKyAgICBzdGF0ZU1hbmFnZXItPmJpbmRUZXh0dXJlKGdsOjpUZXh0dXJl
VHlwZTo6XzJELCB0ZXh0dXJlKTsKKyAgICBmdW5jdGlvbnMtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSwgMCk7CisKKyAgICByZXR1cm4gbmV3IElPU3VyZmFjZUZyYW1lYnVmZmVyKHN0YXRlLCBm
cmFtZWJ1ZmZlciwgdGV4dHVyZSwgdHJ1ZSwgaGFzRW11bGF0ZWRBbHBoYUNoYW5uZWwoKSk7Cit9
CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworYW5nbGU6OlJlc3VsdCBJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6aW5pdGlhbGl6ZUFscGhhQ2hhbm5lbChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAobUFscGhhSW5pdGlhbGl6ZWQp
CisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQor
CisgICAgQmxpdEdMICpibGl0dGVyID0gR2V0QmxpdEdMKGNvbnRleHQpOworICAgIEFOR0xFX1RS
WShibGl0dGVyLT5jbGVhclJlbmRlcmFibGVUZXh0dXJlQWxwaGFUb09uZShjb250ZXh0LCB0ZXh0
dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZVRhcmdldDo6UmVjdGFuZ2xlLCAwKSk7CisgICAgbUFscGhhSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKwor
Ym9vbCBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6aGFzRW11bGF0ZWRBbHBoYUNoYW5uZWwoKSBjb25z
dAoreworICAgIGNvbnN0IGF1dG8gJmZvcm1hdCA9IGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJ
bmRleF07CisgICAgcmV0dXJuIGZvcm1hdC5pbnRlcm5hbEZvcm1hdCA9PSBHTF9SR0I7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1f
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1BidWZmZXJTdXJmYWNlRUFHTC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNThlODYxZTI1ZjQzNTNkZTE3NjBhYTQ3MGFiNjNjYWU2MTIyZDE5Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL1BidWZmZXJTdXJmYWNlRUFHTC5jcHAKQEAgLTAsMCArMSwxNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBQQnVmZmVy
U3VyZmFjZUVBR0wuY3BwOiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBlZ2w6OlN1cmZhY2UgZm9yIFBC
dWZmZXJzIGZvciB0aGUgQ0xHIGJhY2tlbmQsCisvLyAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50bHkgaW1wbGVtZW50ZWQgdXNpbmcgcmVuZGVyYnVmZmVycworCisjaW1wb3J0ICJjb21tb24v
cGxhdGZvcm0uaCIKKworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQorCisjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9QYnVmZmVyU3VyZmFjZUVBR0wuaCIKKworI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL0Z1
bmN0aW9uc0dMLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvRnJhbWVidWZmZXJH
TC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL1JlbmRlcmVyR0wuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdGF0ZU1hbmFnZXJHTC5oIgorCituYW1lc3BhY2Ug
cngKK3sKKworUGJ1ZmZlclN1cmZhY2VFQUdMOjpQYnVmZmVyU3VyZmFjZUVBR0woY29uc3QgZWds
OjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlcmVyR0wgKnJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xpbnQgaGVpZ2h0KQorICAgIDogU3VyZmFjZUdMKHN0YXRlKSwKKyAgICAgIG1XaWR0aCh3
aWR0aCksCisgICAgICBtSGVpZ2h0KGhlaWdodCksCisgICAgICBtRnVuY3Rpb25zKHJlbmRlcmVy
LT5nZXRGdW5jdGlvbnMoKSksCisgICAgICBtU3RhdGVNYW5hZ2VyKHJlbmRlcmVyLT5nZXRTdGF0
ZU1hbmFnZXIoKSksCisgICAgICBtQ29sb3JSZW5kZXJidWZmZXIoMCksCisgICAgICBtRFNSZW5k
ZXJidWZmZXIoMCkKK3sKK30KKworUGJ1ZmZlclN1cmZhY2VFQUdMOjp+UGJ1ZmZlclN1cmZhY2VF
QUdMKCkKK3sKKyAgICBpZiAobUNvbG9yUmVuZGVyYnVmZmVyICE9IDApCisgICAgeworICAgICAg
ICBtRnVuY3Rpb25zLT5kZWxldGVSZW5kZXJidWZmZXJzKDEsICZtQ29sb3JSZW5kZXJidWZmZXIp
OworICAgICAgICBtQ29sb3JSZW5kZXJidWZmZXIgPSAwOworICAgIH0KKyAgICBpZiAobURTUmVu
ZGVyYnVmZmVyICE9IDApCisgICAgeworICAgICAgICBtRnVuY3Rpb25zLT5kZWxldGVSZW5kZXJi
dWZmZXJzKDEsICZtRFNSZW5kZXJidWZmZXIpOworICAgICAgICBtRFNSZW5kZXJidWZmZXIgPSAw
OworICAgIH0KK30KKworZWdsOjpFcnJvciBQYnVmZmVyU3VyZmFjZUVBR0w6OmluaXRpYWxpemUo
Y29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIG1GdW5jdGlvbnMtPmdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1Db2xvclJlbmRlcmJ1ZmZlcik7CisgICAgbVN0YXRlTWFuYWdlci0+Ymlu
ZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1Db2xvclJlbmRlcmJ1ZmZlcik7CisgICAg
bUZ1bmN0aW9ucy0+cmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1JHQkE4
LCBtV2lkdGgsIG1IZWlnaHQpOworCisgICAgbUZ1bmN0aW9ucy0+Z2VuUmVuZGVyYnVmZmVycygx
LCAmbURTUmVuZGVyYnVmZmVyKTsKKyAgICBtU3RhdGVNYW5hZ2VyLT5iaW5kUmVuZGVyYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgbURTUmVuZGVyYnVmZmVyKTsKKyAgICBtRnVuY3Rpb25zLT5yZW5k
ZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEgyNF9TVEVOQ0lMOCwgbVdp
ZHRoLCBtSGVpZ2h0KTsKKworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpF
cnJvciBQYnVmZmVyU3VyZmFjZUVBR0w6Om1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KQoreworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBQ
YnVmZmVyU3VyZmFjZUVBR0w6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7Cisg
ICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIFBidWZmZXJTdXJmYWNl
RUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBoZWlnaHQpCit7CisgICAg
cmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIFBidWZmZXJTdXJmYWNlRUFH
TDo6cXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1
ZSkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwor
fQorCitlZ2w6OkVycm9yIFBidWZmZXJTdXJmYWNlRUFHTDo6YmluZFRleEltYWdlKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVHTGludCBidWZmZXIpCit7CisgICAgRVJSKCkgPDwgIlBidWZmZXJT
dXJmYWNlRUFHTDo6YmluZFRleEltYWdlIjsKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0
dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIFBidWZmZXJTdXJmYWNlRUFHTDo6
cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVy
KQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9
CisKK3ZvaWQgUGJ1ZmZlclN1cmZhY2VFQUdMOjpzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVy
dmFsKQoreworfQorCitFR0xpbnQgUGJ1ZmZlclN1cmZhY2VFQUdMOjpnZXRXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdMaW50IFBidWZmZXJTdXJmYWNlRUFHTDo6
Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworRUdMaW50IFBi
dWZmZXJTdXJmYWNlRUFHTDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAg
ICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMaW50IFBi
dWZmZXJTdXJmYWNlRUFHTDo6Z2V0U3dhcEJlaGF2aW9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RUdMX0JVRkZFUl9QUkVTRVJWRUQ7Cit9CisKK0ZyYW1lYnVmZmVySW1wbCAqUGJ1ZmZlclN1cmZh
Y2VFQUdMOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlKQoreworICAgIGNvbnN0
IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBHZXRGdW5jdGlvbnNHTChjb250ZXh0KTsKKyAgICBT
dGF0ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2VyID0gR2V0U3RhdGVNYW5hZ2VyR0woY29udGV4dCk7
CisKKyAgICBHTHVpbnQgZnJhbWVidWZmZXIgPSAwOworICAgIGZ1bmN0aW9ucy0+Z2VuRnJhbWVi
dWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CisgICAgc3RhdGVNYW5hZ2VyLT5iaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKKyAgICBmdW5jdGlvbnMtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
UkVOREVSQlVGRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNv
bG9yUmVuZGVyYnVmZmVyKTsKKyAgICBmdW5jdGlvbnMtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJV
RkZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EU1JlbmRlcmJ1
ZmZlcik7CisKKyAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyR0woc3RhdGUsIGZyYW1lYnVmZmVy
LCB0cnVlLCBmYWxzZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5kaWYgIC8vIGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9Q
YnVmZmVyU3VyZmFjZUVBR0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Y2Q3MWViODM3ODNmMTMzMjVhNjg3NjA4
MjI4OTYxZWFjODBmYTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUGJ1ZmZlclN1cmZhY2VFQUdMLmgKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIFBCdWZmZXJTdXJmYWNlRUFHTC5oOiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBlZ2w6OlN1
cmZhY2UgZm9yIFBCdWZmZXJzIGZvciB0aGUgQ0xHIGJhY2tlbmQsCisvLyAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdXNpbmcgcmVuZGVyYnVmZmVycworCisjaWZu
ZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUEJVRkZFUlNVUkZBQ0VFQUdMX0hfCisjZGVm
aW5lIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUEJVRkZFUlNVUkZBQ0VFQUdMX0hfCisKKyNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdXJmYWNlR0wuaCIKKworbmFtZXNwYWNlIHJ4
Cit7CisKK2NsYXNzIEZ1bmN0aW9uc0dMOworY2xhc3MgUmVuZGVyZXJHTDsKK2NsYXNzIFN0YXRl
TWFuYWdlckdMOworCitjbGFzcyBQYnVmZmVyU3VyZmFjZUVBR0wgOiBwdWJsaWMgU3VyZmFjZUdM
Cit7CisgIHB1YmxpYzoKKyAgICBQYnVmZmVyU3VyZmFjZUVBR0woY29uc3QgZWdsOjpTdXJmYWNl
U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcmVyR0wgKnJlbmRlcmVy
LAorICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICBFR0xpbnQgaGVpZ2h0KTsKKyAgICB+UGJ1ZmZlclN1cmZhY2VFQUdMKCkgb3ZlcnJpZGU7
CisKKyAgICBlZ2w6OkVycm9yIGluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIG1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3Igc3dhcChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBwb3N0U3ViQnVmZmVyKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBxdWVyeVN1
cmZhY2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlk
ZTsKKyAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKyAgICBl
Z2w6OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdM
aW50IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGlu
dGVydmFsKSBvdmVycmlkZTsKKworICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEVHTGludCBp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFR0xpbnQgZ2V0
U3dhcEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGcmFtZWJ1ZmZlckltcGwgKmNy
ZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVi
dWZmZXJTdGF0ZSAmc3RhdGUpIG92ZXJyaWRlOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQg
bVdpZHRoOworICAgIHVuc2lnbmVkIG1IZWlnaHQ7CisKKyAgICAvLyBUT0RPKGdlb2ZmbGFuZyk6
IERvbid0IHN0b3JlIHRoZXNlLCB0aGV5IGFyZSBwb3RlbnRpYWxseSBzcGVjaWZpYyB0byBhIHNp
bmdsZSBHTCBjb250ZXh0LgorICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vMjQ2NAorICAgIGNv
bnN0IEZ1bmN0aW9uc0dMICptRnVuY3Rpb25zOworICAgIFN0YXRlTWFuYWdlckdMICptU3RhdGVN
YW5hZ2VyOworCisgICAgR0x1aW50IG1Db2xvclJlbmRlcmJ1ZmZlcjsKKyAgICBHTHVpbnQgbURT
UmVuZGVyYnVmZmVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElC
QU5HTEVfUkVOREVSRVJfR0xfRUFHTF9QQlVGRkVSU1VSRkFDRUVBR0xfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1Jl
bmRlcmVyRUFHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNmM4NmY2MTBhYjJj
NTliZGY3OGI4ZWNiYjZlOGRiYzM2ZjM1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9SZW5kZXJlckVBR0wu
Y3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBSZW5kZXJlckVBR0wubW06IEltcGxlbWVudHMgdGhlIGNsYXNzIG1ldGhv
ZHMgZm9yIFJlbmRlcmVyRUFHTC4KKworI2ltcG9ydCAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNp
ZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKworI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL1JlbmRlcmVyRUFHTC5oIgorCituYW1lc3BhY2UgcngKK3sKKworUmVuZGVyZXJFQUdM
OjpSZW5kZXJlckVBR0woc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uc0dMPiBmdW5jdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYk1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5RUFHTCAqZGlzcGxheSkKKyAgICA6
IFJlbmRlcmVyR0woc3RkOjptb3ZlKGZ1bmN0aW9ucyksIGF0dHJpYk1hcCwgZGlzcGxheSksIG1E
aXNwbGF5KGRpc3BsYXkpCit7fQorCitSZW5kZXJlckVBR0w6On5SZW5kZXJlckVBR0woKSB7fQor
CitXb3JrZXJDb250ZXh0ICpSZW5kZXJlckVBR0w6OmNyZWF0ZVdvcmtlckNvbnRleHQoc3RkOjpz
dHJpbmcgKmluZm9Mb2cpCit7CisgICAgcmV0dXJuIG1EaXNwbGF5LT5jcmVhdGVXb3JrZXJDb250
ZXh0KGluZm9Mb2cpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcngKKworI2VuZGlmICAvLyBkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvUmVuZGVyZXJF
QUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjE1NjdiOGZkMjA4OWNmMTQ0NzMwODI5NWY3ZjkwY2MxMzU0Nzkw
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL1JlbmRlcmVyRUFHTC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBSZW5kZXJlckVBR0wu
aDogaW1wbGVtZW50cyBjcmVhdGVXb3JrZXJDb250ZXh0IGZvciBSZW5kZXJlckdMLgorCisjaWZu
ZGVmIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUkVOREVSRVJFQUdMX0hfCisjZGVmaW5lIExJ
QkFOR0xFX1JFTkRFUkVSX0dMX0VBR0xfUkVOREVSRVJFQUdMX0hfCisKKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9nbC9SZW5kZXJlckdMLmgiCisKK25hbWVzcGFjZSByeAoreworCitjbGFz
cyBEaXNwbGF5RUFHTDsKKworY2xhc3MgUmVuZGVyZXJFQUdMIDogcHVibGljIFJlbmRlcmVyR0wK
K3sKKyAgcHVibGljOgorICAgIFJlbmRlcmVyRUFHTChzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25z
R0w+IGZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAm
YXR0cmliTWFwLAorICAgICAgICAgICAgICAgIERpc3BsYXlFQUdMICpkaXNwbGF5KTsKKyAgICB+
UmVuZGVyZXJFQUdMKCkgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBXb3JrZXJDb250ZXh0
ICpjcmVhdGVXb3JrZXJDb250ZXh0KHN0ZDo6c3RyaW5nICppbmZvTG9nKSBvdmVycmlkZTsKKwor
ICAgIERpc3BsYXlFQUdMICptRGlzcGxheTsKK307CisKK30gIC8vIG5hbWVzcGFjZSByeAorCisj
ZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0dMWF9SRU5ERVJFUkdMWF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvV2luZG93U3VyZmFjZUVBR0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL1dpbmRvd1N1cmZhY2VFQUdMLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBk
NzdiM2RiOGZlNzY3ZjVhMzFlZjU0ZjM3NGY1YjZlOWYwOTNkYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL1dp
bmRvd1N1cmZhY2VFQUdMLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBXaW5kb3dTdXJmYWNlRUFHTC5oOiBFQUdMIGlt
cGxlbWVudGF0aW9uIG9mIGVnbDo6U3VyZmFjZQorCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVS
X0dMX0VBR0xfV0lORE9XU1VSRkFDRUVBR0xfSF8KKyNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJf
R0xfRUFHTF9XSU5ET1dTVVJGQUNFRUFHTF9IXworCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2wvU3VyZmFjZUdMLmgiCisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIEVBR0xDb250ZXh0
OwordHlwZWRlZiBFQUdMQ29udGV4dCogRUFHTENvbnRleHRPYmo7CisjZWxzZQordHlwZWRlZiB2
b2lkKiBFQUdMQ29udGV4dE9iajsKKyNlbmRpZgorQGNsYXNzIENBTGF5ZXI7CitzdHJ1Y3QgX19J
T1N1cmZhY2U7Cit0eXBlZGVmIF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CisKKy8vIFdlYktp
dCdzIGJ1aWxkIHByb2Nlc3MgcmVxdWlyZXMgdGhhdCBldmVyeSBPYmplY3RpdmUtQyBjbGFzcyBu
YW1lIGhhcyB0aGUgcHJlZml4ICJXZWIiLgorQGNsYXNzIFdlYlN3YXBMYXllcjsKKworbmFtZXNw
YWNlIHJ4Cit7CisKK2NsYXNzIERpc3BsYXlFQUdMOworY2xhc3MgRnJhbWVidWZmZXJHTDsKK2Ns
YXNzIEZ1bmN0aW9uc0dMOworY2xhc3MgUmVuZGVyZXJHTDsKK2NsYXNzIFN0YXRlTWFuYWdlckdM
OworCitzdHJ1Y3QgU2hhcmVkU3dhcFN0YXRlCit7CisgICAgc3RydWN0IFN3YXBUZXh0dXJlCisg
ICAgeworICAgICAgICBHTHVpbnQgdGV4dHVyZTsKKyAgICAgICAgdW5zaWduZWQgaW50IHdpZHRo
OworICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0OworICAgICAgICB1aW50NjRfdCBzd2FwSWQ7
CisgICAgfTsKKworICAgIFN3YXBUZXh0dXJlIHRleHR1cmVzWzNdOworCisgICAgLy8gVGhpcyBj
b2RlIHBhdGggaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgYnkgQ2hyb21lIHNvIHdlIHRha2UgdGhl
IGxpYmVydHkKKyAgICAvLyB0byB1c2UgcHRocmVhZHMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2lu
ZyBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzCisgICAgLy8gdmlhIHRoZSBQbGF0Zm9y
bSBBUEkuCisgICAgcHRocmVhZF9tdXRleF90IG11dGV4OworICAgIC8vIFRoZSBmb2xsb3dpbmcg
bWVtYmVycyBzaG91bGQgYmUgYWNjZXNzZWQgb25seSB3aGVuIGhvbGRpbmcgdGhlIG11dGV4Cisg
ICAgLy8gKG9yIGRvaW5nIGNvbnN0cnVjdGlvbiAvIGRlc3RydWN0aW9uKQorICAgIFN3YXBUZXh0
dXJlICpiZWluZ1JlbmRlcmVkOworICAgIFN3YXBUZXh0dXJlICpsYXN0UmVuZGVyZWQ7CisgICAg
U3dhcFRleHR1cmUgKmJlaW5nUHJlc2VudGVkOworfTsKKworY2xhc3MgV2luZG93U3VyZmFjZUVB
R0wgOiBwdWJsaWMgU3VyZmFjZUdMCit7CisgIHB1YmxpYzoKKyAgICBXaW5kb3dTdXJmYWNlRUFH
TChjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJlckdMICpyZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdpbmRv
d1R5cGUgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICBFQUdMQ29udGV4dE9iaiBjb250ZXh0
KTsKKyAgICB+V2luZG93U3VyZmFjZUVBR0woKSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3Ig
aW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIG92ZXJyaWRlOworICAgIGVn
bDo6RXJyb3IgbWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
OworCisgICAgZWdsOjpFcnJvciBzd2FwKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVy
cmlkZTsKKyAgICBlZ2w6OkVycm9yIHBvc3RTdWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVp
Z2h0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShF
R0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3Ig
YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgcmVsZWFzZVRl
eEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpIG92ZXJyaWRlOwor
CisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRUdMaW50IGlzUG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEVHTGludCBnZXRTd2FwQmVoYXZpb3IoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIEZyYW1lYnVmZmVySW1wbCAqY3JlYXRlRGVmYXVsdEZyYW1lYnVm
ZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSkg
b3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICBXZWJTd2FwTGF5ZXIgKm1Td2FwTGF5ZXI7Cisg
ICAgU2hhcmVkU3dhcFN0YXRlIG1Td2FwU3RhdGU7CisgICAgdWludDY0X3QgbUN1cnJlbnRTd2Fw
SWQ7CisKKyAgICBDQUxheWVyICptTGF5ZXI7CisgICAgRUFHTENvbnRleHRPYmogbUNvbnRleHQ7
CisgICAgY29uc3QgRnVuY3Rpb25zR0wgKm1GdW5jdGlvbnM7CisgICAgU3RhdGVNYW5hZ2VyR0wg
Km1TdGF0ZU1hbmFnZXI7CisKKyAgICBHTHVpbnQgbURTUmVuZGVyYnVmZmVyOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9X
SU5ET1dTVVJGQUNFRUFHTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wubW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9XaW5kb3dT
dXJmYWNlRUFHTC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjZlODJjNDA3ODRmZmI1ODM4NWU4OTk2YTg0NzUz
N2YxMWY1OGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93U3VyZmFjZUVBR0wubW0KQEAgLTAsMCAr
MSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBXaW5kb3dTdXJmYWNlRUFHTC5jcHA6IEVBR0wgaW1wbGVtZW50YXRpb24gb2YgZWdsOjpTdXJm
YWNlCisKKyNpbXBvcnQgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9JT1MpCisKKyNpbXBvcnQgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvV2luZG93
U3VyZmFjZUVBR0wuaCIKKworI2ltcG9ydCAiY29tbW9uL2RlYnVnLmgiCisjaW1wb3J0ICJsaWJB
TkdMRS9Db250ZXh0LmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9GcmFtZWJ1ZmZl
ckdMLmgiCisjaW1wb3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9SZW5kZXJlckdMLmgiCisjaW1w
b3J0ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9TdGF0ZU1hbmFnZXJHTC5oIgorI2ltcG9ydCAibGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5oIgorCisjaW1wb3J0IDxPcGVuR0xF
Uy9FQUdMLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKworLy8gRklYTUU6
IEl0J3Mgbm90IGNsZWFyIHdoeSB0aGlzIG5lZWRzIHRvIGJlIGFuIEVBR0xMYXllci4KKworQGlu
dGVyZmFjZSBXZWJTd2FwTGF5ZXIgOiBDQUVBR0xMYXllciB7CisgICAgRUFHTENvbnRleHRPYmog
bURpc3BsYXlDb250ZXh0OworCisgICAgYm9vbCBpbml0aWFsaXplZDsKKyAgICByeDo6U2hhcmVk
U3dhcFN0YXRlICptU3dhcFN0YXRlOworICAgIGNvbnN0IHJ4OjpGdW5jdGlvbnNHTCAqbUZ1bmN0
aW9uczsKKworICAgIEdMdWludCBtUmVhZEZyYW1lYnVmZmVyOworfQorLSAoaWQpaW5pdFdpdGhT
aGFyZWRTdGF0ZToocng6OlNoYXJlZFN3YXBTdGF0ZSAqKXN3YXBTdGF0ZQorICAgICAgICAgICAg
ICB3aXRoQ29udGV4dDooRUFHTENvbnRleHRPYmopZGlzcGxheUNvbnRleHQKKyAgICAgICAgICAg
IHdpdGhGdW5jdGlvbnM6KGNvbnN0IHJ4OjpGdW5jdGlvbnNHTCAqKWZ1bmN0aW9uczsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdlYlN3YXBMYXllcgorLSAoaWQpaW5pdFdpdGhTaGFyZWRTdGF0
ZToocng6OlNoYXJlZFN3YXBTdGF0ZSAqKXN3YXBTdGF0ZQorICAgICAgICAgICAgICB3aXRoQ29u
dGV4dDooRUFHTENvbnRleHRPYmopZGlzcGxheUNvbnRleHQKKyAgICAgICAgICAgIHdpdGhGdW5j
dGlvbnM6KGNvbnN0IHJ4OjpGdW5jdGlvbnNHTCAqKWZ1bmN0aW9ucworeworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYgIT0gbmlsKQorICAgIHsKKyAgICAgICAgbURpc3Bs
YXlDb250ZXh0ICAgPSBkaXNwbGF5Q29udGV4dDsKKworICAgICAgICBpbml0aWFsaXplZCA9IGZh
bHNlOworICAgICAgICBtU3dhcFN0YXRlICA9IHN3YXBTdGF0ZTsKKyAgICAgICAgbUZ1bmN0aW9u
cyAgPSBmdW5jdGlvbnM7CisKKyAgICAgICAgW3NlbGYgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCBtU3dhcFN0YXRlLT50ZXh0dXJlc1swXS53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtU3dhcFN0YXRlLT50ZXh0dXJlc1swXS5oZWlnaHQpXTsKKyAgICB9CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlzcGxheQoreworICAgIHB0aHJlYWRfbXV0ZXhf
bG9jaygmbVN3YXBTdGF0ZS0+bXV0ZXgpOworICAgIHsKKyAgICAgICAgaWYgKG1Td2FwU3RhdGUt
Pmxhc3RSZW5kZXJlZC0+c3dhcElkID4gbVN3YXBTdGF0ZS0+YmVpbmdQcmVzZW50ZWQtPnN3YXBJ
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1Td2FwU3RhdGUtPmxhc3RSZW5k
ZXJlZCwgbVN3YXBTdGF0ZS0+YmVpbmdQcmVzZW50ZWQpOworICAgICAgICB9CisgICAgfQorICAg
IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtU3dhcFN0YXRlLT5tdXRleCk7CisKKyAgICBbRUFHTENv
bnRleHQgc2V0Q3VycmVudENvbnRleHQ6bURpc3BsYXlDb250ZXh0XTsKKworICAgIGlmICghaW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAgICAg
bUZ1bmN0aW9ucy0+Z2VuRnJhbWVidWZmZXJzKDEsICZtUmVhZEZyYW1lYnVmZmVyKTsKKyAgICB9
CisKKyAgICBjb25zdCBhdXRvICZ0ZXh0dXJlID0gKm1Td2FwU3RhdGUtPmJlaW5nUHJlc2VudGVk
OworCisgICAgaWYgKFtzZWxmIGZyYW1lXS5zaXplLndpZHRoICE9IHRleHR1cmUud2lkdGggfHwg
W3NlbGYgZnJhbWVdLnNpemUuaGVpZ2h0ICE9IHRleHR1cmUuaGVpZ2h0KQorICAgIHsKKyAgICAg
ICAgW3NlbGYgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCB0ZXh0dXJlLndpZHRoLCB0ZXh0dXJl
LmhlaWdodCldOworCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGNvbnRpbnVlcyB0byByZW1h
aW4gYW4gRUFHTExheWVyLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UnZAorICAgICAgICAvLyBwcm9i
YWJseSB3YW50IHRvIGNyZWF0ZSB0aGUgcmVuZGVyYnVmZmVyIHN0b3JhZ2UuCisgICAgICAgIFtz
ZWxmIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorCisgICAgLy8gVE9ETyhjd2FsbGV6KSBzdXBw
b3J0IDIuMSBjb250ZXh0cyB0b28gdGhhdCBkb24ndCBoYXZlIGJsaXRGcmFtZWJ1ZmZlciBub3Ig
dGhlCisgICAgLy8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HIHF1ZXJ5CisgICAgR0xpbnQg
ZHJhd0ZCTzsKKyAgICBtRnVuY3Rpb25zLT5nZXRJbnRlZ2VydihHTF9EUkFXX0ZSQU1FQlVGRkVS
X0JJTkRJTkcsICZkcmF3RkJPKTsKKworICAgIG1GdW5jdGlvbnMtPmJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbVJlYWRGcmFtZWJ1ZmZlcik7CisgICAgbUZ1bmN0aW9ucy0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUu
dGV4dHVyZSwgMCk7CisKKyAgICBtRnVuY3Rpb25zLT5iaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9G
UkFNRUJVRkZFUiwgbVJlYWRGcmFtZWJ1ZmZlcik7CisgICAgbUZ1bmN0aW9ucy0+YmluZEZyYW1l
YnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIGRyYXdGQk8pOworICAgIG1GdW5jdGlvbnMtPmJs
aXRGcmFtZWJ1ZmZlcigwLCAwLCB0ZXh0dXJlLndpZHRoLCB0ZXh0dXJlLmhlaWdodCwgMCwgMCwg
dGV4dHVyZS53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5o
ZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1QpOworCisgICAgbUZ1bmN0aW9u
cy0+YmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHRleHR1cmUudGV4dHVyZSk7Cisg
ICAgW21EaXNwbGF5Q29udGV4dCBwcmVzZW50UmVuZGVyYnVmZmVyOkdMX1JFTkRFUkJVRkZFUl07
CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5pbF07Cit9CitAZW5kCisKK25h
bWVzcGFjZSByeAoreworCitXaW5kb3dTdXJmYWNlRUFHTDo6V2luZG93U3VyZmFjZUVBR0woY29u
c3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJlckdMICpyZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSBsYXllciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUFHTENvbnRleHRPYmogY29udGV4dCkKKyAgICA6IFN1cmZhY2VHTChz
dGF0ZSksCisgICAgICBtU3dhcExheWVyKG5pbCksCisgICAgICBtQ3VycmVudFN3YXBJZCgwKSwK
KyAgICAgIG1MYXllcihyZWludGVycHJldF9jYXN0PENBTGF5ZXIgKj4obGF5ZXIpKSwKKyAgICAg
IG1Db250ZXh0KGNvbnRleHQpLAorICAgICAgbUZ1bmN0aW9ucyhyZW5kZXJlci0+Z2V0RnVuY3Rp
b25zKCkpLAorICAgICAgbVN0YXRlTWFuYWdlcihyZW5kZXJlci0+Z2V0U3RhdGVNYW5hZ2VyKCkp
LAorICAgICAgbURTUmVuZGVyYnVmZmVyKDApCit7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZt
U3dhcFN0YXRlLm11dGV4LCBudWxscHRyKTsKK30KKworV2luZG93U3VyZmFjZUVBR0w6On5XaW5k
b3dTdXJmYWNlRUFHTCgpCit7CisgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZtU3dhcFN0YXRl
Lm11dGV4KTsKKworICAgIGlmIChtRFNSZW5kZXJidWZmZXIgIT0gMCkKKyAgICB7CisgICAgICAg
IG1GdW5jdGlvbnMtPmRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1EU1JlbmRlcmJ1ZmZlcik7Cisg
ICAgICAgIG1EU1JlbmRlcmJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKG1Td2FwTGF5ZXIg
IT0gbmlsKQorICAgIHsKKyAgICAgICAgW21Td2FwTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJd
OworICAgICAgICBbbVN3YXBMYXllciByZWxlYXNlXTsKKyAgICAgICAgbVN3YXBMYXllciA9IG5p
bDsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6ZShtU3dhcFN0
YXRlLnRleHR1cmVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1Td2FwU3RhdGUudGV4dHVy
ZXNbaV0udGV4dHVyZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRnVuY3Rpb25zLT5k
ZWxldGVUZXh0dXJlcygxLCAmbVN3YXBTdGF0ZS50ZXh0dXJlc1tpXS50ZXh0dXJlKTsKKyAgICAg
ICAgICAgIG1Td2FwU3RhdGUudGV4dHVyZXNbaV0udGV4dHVyZSA9IDA7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2VnbDo6RXJyb3IgV2luZG93U3VyZmFjZUVBR0w6OmluaXRpYWxpemUoY29uc3Qg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIHVuc2lnbmVkIHdpZHRoICA9IGdldFdpZHRo
KCk7CisgICAgdW5zaWduZWQgaGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IEFycmF5U2l6ZShtU3dhcFN0YXRlLnRleHR1cmVzKTsgKytpKQorICAgIHsK
KyAgICAgICAgbUZ1bmN0aW9ucy0+Z2VuVGV4dHVyZXMoMSwgJm1Td2FwU3RhdGUudGV4dHVyZXNb
aV0udGV4dHVyZSk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXItPmJpbmRUZXh0dXJlKGdsOjpUZXh0
dXJlVHlwZTo6XzJELCBtU3dhcFN0YXRlLnRleHR1cmVzW2ldLnRleHR1cmUpOworICAgICAgICBt
RnVuY3Rpb25zLT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHdpZHRoLCBo
ZWlnaHQsIDAsIEdMX1JHQkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgbnVsbHB0cik7CisgICAgICAgIG1Td2FwU3RhdGUudGV4dHVyZXNbaV0ud2lk
dGggID0gd2lkdGg7CisgICAgICAgIG1Td2FwU3RhdGUudGV4dHVyZXNbaV0uaGVpZ2h0ID0gaGVp
Z2h0OworICAgICAgICBtU3dhcFN0YXRlLnRleHR1cmVzW2ldLnN3YXBJZCA9IDA7CisgICAgfQor
ICAgIG1Td2FwU3RhdGUuYmVpbmdSZW5kZXJlZCAgPSAmbVN3YXBTdGF0ZS50ZXh0dXJlc1swXTsK
KyAgICBtU3dhcFN0YXRlLmxhc3RSZW5kZXJlZCAgID0gJm1Td2FwU3RhdGUudGV4dHVyZXNbMV07
CisgICAgbVN3YXBTdGF0ZS5iZWluZ1ByZXNlbnRlZCA9ICZtU3dhcFN0YXRlLnRleHR1cmVzWzJd
OworCisgICAgbVN3YXBMYXllciA9IFtbV2ViU3dhcExheWVyIGFsbG9jXSBpbml0V2l0aFNoYXJl
ZFN0YXRlOiZtU3dhcFN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpdGhDb250ZXh0Om1Db250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aXRoRnVuY3Rpb25zOm1GdW5jdGlvbnNdOworICAgIFttTGF5
ZXIgYWRkU3VibGF5ZXI6bVN3YXBMYXllcl07CisKKyAgICBtRnVuY3Rpb25zLT5nZW5SZW5kZXJi
dWZmZXJzKDEsICZtRFNSZW5kZXJidWZmZXIpOworICAgIG1TdGF0ZU1hbmFnZXItPmJpbmRSZW5k
ZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtRFNSZW5kZXJidWZmZXIpOworICAgIG1GdW5jdGlv
bnMtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5D
SUw4LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBlZ2w6OkVycm9yKEVHTF9TVUNDRVNT
KTsKK30KKworZWdsOjpFcnJvciBXaW5kb3dTdXJmYWNlRUFHTDo6bWFrZUN1cnJlbnQoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIGVnbDo6RXJyb3IoRUdMX1NVQ0NF
U1MpOworfQorCitlZ2w6OkVycm9yIFdpbmRvd1N1cmZhY2VFQUdMOjpzd2FwKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KQoreworICAgIGNvbnN0IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMgPSBH
ZXRGdW5jdGlvbnNHTChjb250ZXh0KTsKKyAgICBTdGF0ZU1hbmFnZXJHTCAqc3RhdGVNYW5hZ2Vy
ID0gR2V0U3RhdGVNYW5hZ2VyR0woY29udGV4dCk7CisKKyAgICBmdW5jdGlvbnMtPmZsdXNoKCk7
CisgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT5zd2FwSWQgPSArK21DdXJyZW50U3dhcElk
OworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtU3dhcFN0YXRlLm11dGV4KTsKKyAgICB7Cisg
ICAgICAgIHN0ZDo6c3dhcChtU3dhcFN0YXRlLmJlaW5nUmVuZGVyZWQsIG1Td2FwU3RhdGUubGFz
dFJlbmRlcmVkKTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1Td2FwU3RhdGUu
bXV0ZXgpOworCisgICAgdW5zaWduZWQgd2lkdGggID0gZ2V0V2lkdGgoKTsKKyAgICB1bnNpZ25l
ZCBoZWlnaHQgPSBnZXRIZWlnaHQoKTsKKyAgICBhdXRvICZ0ZXh0dXJlICAgPSAqbVN3YXBTdGF0
ZS5iZWluZ1JlbmRlcmVkOworCisgICAgaWYgKHRleHR1cmUud2lkdGggIT0gd2lkdGggfHwgdGV4
dHVyZS5oZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAgICAgICAgc3RhdGVNYW5hZ2VyLT5iaW5k
VGV4dHVyZShnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgdGV4dHVyZS50ZXh0dXJlKTsKKyAgICAgICAg
ZnVuY3Rpb25zLT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHdpZHRoLCBo
ZWlnaHQsIDAsIEdMX1JHQkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCBudWxscHRyKTsKKworICAgICAgICBzdGF0ZU1hbmFnZXItPmJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtRFNSZW5kZXJidWZmZXIpOworICAgICAgICBmdW5jdGlv
bnMtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5D
SUw4LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICB0ZXh0dXJlLndpZHRoICA9IHdpZHRoOwor
ICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IGhlaWdodDsKKyAgICB9CisKKyAgICBGcmFtZWJ1ZmZl
ckdMICpmcmFtZWJ1ZmZlckdMID0gR2V0SW1wbEFzPEZyYW1lYnVmZmVyR0w+KGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKHswfSkpOworICAgIHN0YXRlTWFuYWdlci0+YmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlckdMLT5nZXRGcmFtZWJ1ZmZlcklEKCkpOworICAgIGZ1
bmN0aW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT50ZXh0dXJlLCAwKTsKKworICAgIHJldHVy
biBlZ2w6OkVycm9yKEVHTF9TVUNDRVNTKTsKK30KKworZWdsOjpFcnJvciBXaW5kb3dTdXJmYWNl
RUFHTDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGhlaWdodCkKK3sKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RXJyb3IoRUdMX1NVQ0NFU1MpOworfQorCitl
Z2w6OkVycm9yIFdpbmRvd1N1cmZhY2VFQUdMOjpxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdM
aW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAg
ICByZXR1cm4gZWdsOjpFcnJvcihFR0xfU1VDQ0VTUyk7Cit9CisKK2VnbDo6RXJyb3IgV2luZG93
U3VyZmFjZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0
dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1
ZmZlcikKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RXJyb3IoRUdM
X1NVQ0NFU1MpOworfQorCitlZ2w6OkVycm9yIFdpbmRvd1N1cmZhY2VFQUdMOjpyZWxlYXNlVGV4
SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpCit7CisgICAg
VU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVycm9yKEVHTF9TVUNDRVNTKTsKK30K
Kwordm9pZCBXaW5kb3dTdXJmYWNlRUFHTDo6c2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZh
bCkKK3sKKyAgICAvLyBUT0RPKGN3YWxsZXopIGludmVzdGlnYXRlIGltcGxlbWVudGluZyBzd2Fw
IGludGVydmFscyBvdGhlciB0aGFuIDAKK30KKworRUdMaW50IFdpbmRvd1N1cmZhY2VFQUdMOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChFR0xpbnQpQ0dSZWN0R2V0V2lkdGgoW21M
YXllciBmcmFtZV0pOworfQorCitFR0xpbnQgV2luZG93U3VyZmFjZUVBR0w6OmdldEhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIChFR0xpbnQpQ0dSZWN0R2V0SGVpZ2h0KFttTGF5ZXIgZnJh
bWVdKTsKK30KKworRUdMaW50IFdpbmRvd1N1cmZhY2VFQUdMOjppc1Bvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQoKSBjb25zdAoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gRUdMX0ZB
TFNFOworfQorCitFR0xpbnQgV2luZG93U3VyZmFjZUVBR0w6OmdldFN3YXBCZWhhdmlvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEVHTF9CVUZGRVJfREVTVFJPWUVEOworfQorCitGcmFtZWJ1ZmZl
ckltcGwgKldpbmRvd1N1cmZhY2VFQUdMOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZmZXIoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3Rh
dGUpCit7CisgICAgY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucyA9IEdldEZ1bmN0aW9uc0dM
KGNvbnRleHQpOworICAgIFN0YXRlTWFuYWdlckdMICpzdGF0ZU1hbmFnZXIgPSBHZXRTdGF0ZU1h
bmFnZXJHTChjb250ZXh0KTsKKworICAgIEdMdWludCBmcmFtZWJ1ZmZlciA9IDA7CisgICAgZnVu
Y3Rpb25zLT5nZW5GcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKKyAgICBzdGF0ZU1hbmFn
ZXItPmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOworICAgIGZ1
bmN0aW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVN3YXBTdGF0ZS5iZWluZ1JlbmRlcmVkLT50ZXh0dXJlLCAwKTsKKyAgICBmdW5jdGlv
bnMtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1EU1JlbmRlcmJ1ZmZlcik7CisKKyAgICByZXR1cm4gbmV3IEZyYW1l
YnVmZmVyR0woc3RhdGUsIGZyYW1lYnVmZmVyLCB0cnVlLCBmYWxzZSk7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSByeAorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L3JlbmRlcmVyZ2xfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCmluZGV4IGY2ZGExMDUzZjZhNjQ0
MGU1Yzk1MjFhNzc1OTUwMmMxMDI2N2Y5YmMuLjYwMjBhNjBiMTNkM2VjZTY1YTE5MjRhNWZlZjY2
NzJmYWRmOTdjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHAK
QEAgLTEyNTgsNyArMTI1OCw3IEBAIHZvaWQgR2VuZXJhdGVDYXBzKGNvbnN0IEZ1bmN0aW9uc0dM
ICpmdW5jdGlvbnMsCiAgICAgZXh0ZW5zaW9ucy0+dGV4dHVyZVNSR0JEZWNvZGUgPSBmdW5jdGlv
bnMtPmhhc0dMRXh0ZW5zaW9uKCJHTF9FWFRfdGV4dHVyZV9zUkdCX2RlY29kZSIpIHx8CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMtPmhhc0dMRVNFeHRlbnNp
b24oIkdMX0VYVF90ZXh0dXJlX3NSR0JfZGVjb2RlIik7CiAKLSNpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX0FQUExFKQorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiAgICAgVmVu
ZG9ySUQgdmVuZG9yID0gR2V0VmVuZG9ySUQoZnVuY3Rpb25zKTsKICAgICBpZiAoKElzQU1EKHZl
bmRvcikgfHwgSXNJbnRlbCh2ZW5kb3IpKSAmJiAqbWF4U3VwcG9ydGVkRVNWZXJzaW9uID49IGds
OjpWZXJzaW9uKDMsIDApKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNwcAppbmRleCBhZmFiNWVlODA3NmIwMTgw
YWJlNzc3ZWQxZWIyYmQ2NDE2M2ViMmY4Li43MTc0NTg4YmM4YTM2ZjM2YTgxZDI1ZmU4NzAwZDY3
ZmE2OWJjNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvdmFsaWRhdGlvbkVTMi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3ZhbGlkYXRpb25FUzIuY3BwCkBAIC02Mzg3LDcgKzYzODcsMTIgQEAgYm9vbCBWYWxp
ZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnZhbGlkYXRpb25FcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBrSW52YWxp
ZE1pcExldmVsKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUeXBlKCkgIT0gVGV4dHVyZVR5
cGU6OlJlY3RhbmdsZSkKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKyAgICAgICAg
ICAgICAgICBjb25zdCBUZXh0dXJlVHlwZSBleHBlY3RlZFR5cGUgeyBUZXh0dXJlVHlwZTo6XzJE
IH07CisjZWxzZQorICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVUeXBlIGV4cGVjdGVkVHlw
ZSB7IFRleHR1cmVUeXBlOjpSZWN0YW5nbGUgfTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlm
ICh0ZXgtPmdldFR5cGUoKSAhPSBleHBlY3RlZFR5cGUpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT52YWxpZGF0aW9uRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGtUZXh0dXJlVGFyZ2V0TWlzbWF0Y2gpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2VudHJ5X3BvaW50c19lZ2xfZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuY3BwCmluZGV4IDY0MTQyZGFlOTJjZDAz
NDRlOGYwNWZjZGI3YzY1ZTgzMzU2MDk5NWYuLjM2NmFlNzJjNjcxNmE2NjhkYzAwMmQ2YWY0Njdj
NzhiZGMwYmI3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuY3BwCkBAIC0zMDEsNiArMzAx
LDE1IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKEVH
TERldmljZUVYVCBkZXZpY2UsCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnJvciA9IGRl
di0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRUdMX0VBR0xfQ09OVEVYVF9BTkdMRToKKyAgICAgICAgICAgIGlmICghZGV2
LT5nZXRFeHRlbnNpb25zKCkuZGV2aWNlRUFHTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0aHJlYWQtPnNldEVycm9yKEVnbEJhZEF0dHJpYnV0ZSgpLCBHZXREZWJ1ZygpLCAiZWds
UXVlcnlEZXZpY2VBdHRyaWJFWFQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2V0RGV2aWNlSWZWYWxpZChkZXYpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNF
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyb3IgPSBkZXYtPmdldEF0dHJpYnV0ZShh
dHRyaWJ1dGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVHTF9D
R0xfQ09OVEVYVF9BTkdMRToKICAgICAgICAgY2FzZSBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdM
RToKICAgICAgICAgICAgIGlmICghZGV2LT5nZXRFeHRlbnNpb25zKCkuZGV2aWNlQ0dMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAppbmRleCAxNGE3MDk1NjAwMWNiYjk5NzJiNmU2MDdiZDcwNzE1NmJkYjljMDVh
Li5mNzU0MDc2NzIxYjAxNWU1ZDQ1OWVjZmE3MGQ1ZmQ2ZGQxM2RkNjViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcApAQCAtMjA1OSw3ICsyMDU5LDEwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlCiAKIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVu
c2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQpCiB7Ci0jaWYgIVVT
RShBTkdMRSkKKyNpZiBVU0UoQU5HTEUpCisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnRDb3VudCk7
CisgICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZUNvdW50KTsKKyNlbHNlCiAgICAgaWYgKCFtX2N1
cnJlbnRQcm9ncmFtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxMjcsOSArMjEzMCw2
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1
dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVsZW1lbnRDb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHByaW1pdGl2ZUNvdW50KTsKICNlbmRpZgogICAgIAogICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZp
ZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVv
U29mdExpbmsuY3BwCmluZGV4IGE2NGEwYTkyMzg4MWRjOGExNjZlMmM0NTAzZjcyNzVmYmQ3NDIw
MzguLjRmNjAzYmRmYmUzZWMwODk5NTM2MmQ4NWEwOWJlZmRkYzA5ZjA1OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAKQEAg
LTcyLDEwICs3Miw4IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZUNyZWF0ZVRlCiBTT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVG
bHVzaCwgdm9pZCwgKENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVSZWYgdGV4dHVyZUNhY2hlLCBDVk9w
dGlvbkZsYWdzIG9wdGlvbnMpLCAodGV4dHVyZUNhY2hlLCBvcHRpb25zKSkKIFNPRlRfTElOS19G
VU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVH
ZXRUYXJnZXQsIEdMZW51bSwgKENWT3BlbkdMRVNUZXh0dXJlUmVmIGltYWdlKSwgKGltYWdlKSkK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVu
R0xFU1RleHR1cmVHZXROYW1lLCBHTHVpbnQsIChDVk9wZW5HTEVTVGV4dHVyZVJlZiBpbWFnZSks
IChpbWFnZSkpCi1TT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlk
ZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2Nh
dG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUs
IENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYg
KnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRU
eXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKLVNPRlRfTElOS19G
VU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwg
c2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVsZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qg
dm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVy
QXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9y
LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxl
YXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVs
QnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVW
aWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRleENvb3Jkcywgdm9pZCwgKENWT3BlbkdM
RVNUZXh0dXJlUmVmIGltYWdlLCBHTGZsb2F0IGxvd2VyTGVmdFsyXSwgR0xmbG9hdCBsb3dlclJp
Z2h0WzJdLCBHTGZsb2F0IHVwcGVyTGVmdFsyXSwgR0xmbG9hdCB1cHBlclJpZ2h0WzJdKSwgKGlt
YWdlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVwcGVyTGVmdCwgdXBwZXJSaWdodCkpCi0jZWxz
ZQorI2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNv
cmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGUsIENWUmV0dXJuLCAoQ0ZB
bGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25hcnlSZWYgY2FjaGVBdHRyaWJ1dGVzLCBD
R0xDb250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBpeGVsRm9ybWF0T2JqIGNnbFBpeGVsRm9ybWF0
LCBDRkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJpYnV0ZXMsIENWT3BlbkdMVGV4dHVyZUNhY2hl
UmVmKiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNhY2hlQXR0cmlidXRlcywgY2dsQ29udGV4dCwg
Y2dsUGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1dGVzLCBjYWNoZU91dCkpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWT3BlbkdMVGV4dHVyZUNh
Y2hlQ3JlYXRlVGV4dHVyZUZyb21JbWFnZSwgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxv
Y2F0b3IsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVmIHRleHR1cmVDYWNoZSwgQ1ZJbWFnZUJ1ZmZl
clJlZiBzb3VyY2VJbWFnZSwgQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIENWT3BlbkdMVGV4
dHVyZVJlZiogdGV4dHVyZU91dCksIChhbGxvY2F0b3IsIHRleHR1cmVDYWNoZSwgc291cmNlSW1h
Z2UsIGF0dHJpYnV0ZXMsIHRleHR1cmVPdXQpKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VS
Q0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVDYWNoZUZsdXNoLCB2b2lkLCAo
Q1ZPcGVuR0xUZXh0dXJlQ2FjaGVSZWYgdGV4dHVyZUNhY2hlLCBDVk9wdGlvbkZsYWdzIG9wdGlv
bnMpLCAodGV4dHVyZUNhY2hlLCBvcHRpb25zKSkKQEAgLTkxLDYgKzg5LDggQEAgU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4
dGVuZGVkUGl4ZWxzQm8KIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1Jl
ZikKICNlbmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3Jl
VmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxs
b2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIE9TVHlwZSBwaXhlbEZvcm1hdFR5
cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJS
ZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lkdGgsIGhlaWdodCwgcGl4ZWxGb3Jt
YXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0KSkKK1NPRlRfTElO
S19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhCeXRlcywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVf
dCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0
YSwgc2l6ZV90IGJ5dGVzUGVyUm93LCB2b2lkICgqcmVsZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29u
c3Qgdm9pZCopLCB2b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVm
ZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2Nh
dG9yLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCBy
ZWxlYXNlQ2FsbGJhY2ssIHJlbGVhc2VQb2ludGVyLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBp
eGVsQnVmZmVyT3V0KSkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENv
cmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UsIENWUmV0dXJuLCAoQ0ZB
bGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgQ0ZEaWN0aW9uYXJ5
UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZlclJlZiAqIHBpeGVsQnVmZmVy
T3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1
ZmZlck91dCkpCiAKICNlbmRpZiAvLyBIQVZFKENPUkVfVklERU8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaAppbmRleCA2ZDBiZjRmODVi
NGVhZDllNzk2NjFlNDFhOTYyMDc4YzYwMDY5NTQ1Li5jZjVmODlhZTEzNDFlYTg4MDZkMjU2MTg4
ZTY4NmQzZGUyOWVkMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L0NvcmVWaWRlb1NvZnRMaW5rLmgKQEAgLTkzLDYgKzkzLDEwIEBAIFNPRlRfTElOS19DT05TVEFO
VF9NQVlfRkFJTF9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywga0NWSW1hZ2VCdWZmZXJZ
Q2JDck1hCiAjZGVmaW5lIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfUDNfRDY1IGdldF9Db3Jl
VmlkZW9fa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9QM19ENjUoKQogU09GVF9MSU5LX0NPTlNU
QU5UX01BWV9GQUlMX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4X0lUVV9SXzIwMjAsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrQ1ZJbWFnZUJ1
ZmZlcllDYkNyTWF0cml4X0lUVV9SXzIwMjAgZ2V0X0NvcmVWaWRlb19rQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X0lUVV9SXzIwMjAoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4dENvbXBhdGliaWxp
dHlLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29udGV4
dENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlckNHQml0bWFwQ29u
dGV4dENvbXBhdGliaWxpdHlLZXkoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5LCBD
RlN0cmluZ1JlZikKKyNkZWZpbmUga0NWUGl4ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtl
eSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXkoKQog
CiAjaWYgVVNFKE9QRU5HTF9FUykKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNv
cmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZUNyZWF0ZSwgQ1ZSZXR1cm4sIChD
RkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGRGljdGlvbmFyeVJlZiBjYWNoZUF0dHJpYnV0ZXMs
IENWRUFHTENvbnRleHQgZWFnbENvbnRleHQsIENGRGljdGlvbmFyeVJlZiB0ZXh0dXJlQXR0cmli
dXRlcywgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJlZiogY2FjaGVPdXQpLCAoYWxsb2NhdG9yLCBj
YWNoZUF0dHJpYnV0ZXMsIGVhZ2xDb250ZXh0LCB0ZXh0dXJlQXR0cmlidXRlcywgY2FjaGVPdXQp
KQpAQCAtMTA1LDIwICsxMDksMTIgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4dHVyZUdldFRhcmdldCwgR0wKICNkZWZpbmUg
Q1ZPcGVuR0xFU1RleHR1cmVHZXRUYXJnZXQgc29mdExpbmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNU
ZXh0dXJlR2V0VGFyZ2V0CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBD
b3JlVmlkZW8sIENWT3BlbkdMRVNUZXh0dXJlR2V0TmFtZSwgR0x1aW50LCAoQ1ZPcGVuR0xFU1Rl
eHR1cmVSZWYgaW1hZ2UpLCAoaW1hZ2UpKQogI2RlZmluZSBDVk9wZW5HTEVTVGV4dHVyZUdldE5h
bWUgc29mdExpbmtfQ29yZVZpZGVvX0NWT3BlbkdMRVNUZXh0dXJlR2V0TmFtZQotU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3Jl
YXRlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgc2l6ZV90IHdpZHRoLCBz
aXplX3QgaGVpZ2h0LCBPU1R5cGUgcGl4ZWxGb3JtYXRUeXBlLCBDRkRpY3Rpb25hcnlSZWYgcGl4
ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVmZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChh
bGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0VHlwZSwgcGl4ZWxCdWZmZXJBdHRy
aWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCi0jZGVmaW5lIENWUGl4ZWxCdWZmZXJDcmVhdGUgc29m
dExpbmtfQ29yZVZpZGVvX0NWUGl4ZWxCdWZmZXJDcmVhdGUKLVNPRlRfTElOS19GVU5DVElPTl9G
T1JfSEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRl
cywgQ1ZSZXR1cm4sIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHNpemVfdCB3aWR0aCwgc2l6
ZV90IGhlaWdodCwgT1NUeXBlIHBpeGVsRm9ybWF0VHlwZSwgdm9pZCogZGF0YSwgc2l6ZV90IGJ5
dGVzUGVyUm93LCB2b2lkICgqcmVsZWFzZUNhbGxiYWNrKSh2b2lkKiwgY29uc3Qgdm9pZCopLCB2
b2lkKiByZWxlYXNlUG9pbnRlciwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRl
cywgQ1ZQaXhlbEJ1ZmZlclJlZiAqcGl4ZWxCdWZmZXJPdXQpLCAoYWxsb2NhdG9yLCB3aWR0aCwg
aGVpZ2h0LCBwaXhlbEZvcm1hdFR5cGUsIGRhdGEsIGJ5dGVzUGVyUm93LCByZWxlYXNlQ2FsbGJh
Y2ssIHJlbGVhc2VQb2ludGVyLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVsQnVmZmVyT3V0
KSkKLSNkZWZpbmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcyBzb2Z0TGlua19Db3JlVmlk
ZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcwogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9I
RUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTEVTVGV4dHVyZUdldENsZWFuVGV4Q29v
cmRzLCB2b2lkLCAoQ1ZPcGVuR0xFU1RleHR1cmVSZWYgaW1hZ2UsIEdMZmxvYXQgbG93ZXJMZWZ0
WzJdLCBHTGZsb2F0IGxvd2VyUmlnaHRbMl0sIEdMZmxvYXQgdXBwZXJMZWZ0WzJdLCBHTGZsb2F0
IHVwcGVyUmlnaHRbMl0pLCAoaW1hZ2UsIGxvd2VyTGVmdCwgbG93ZXJSaWdodCwgdXBwZXJMZWZ0
LCB1cHBlclJpZ2h0KSkKICNkZWZpbmUgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRleENvb3Jk
cyBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRleENvb3Jkcwog
Ci1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBp
eGVsQnVmZmVyQ0dCaXRtYXBDb250ZXh0Q29tcGF0aWJpbGl0eUtleSwgQ0ZTdHJpbmdSZWYpCi0j
ZGVmaW5lIGtDVlBpeGVsQnVmZmVyQ0dCaXRtYXBDb250ZXh0Q29tcGF0aWJpbGl0eUtleSBnZXRf
Q29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyQ0dCaXRtYXBDb250ZXh0Q29tcGF0aWJpbGl0eUtleSgp
Ci1TT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBp
eGVsQnVmZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQotI2RlZmluZSBr
Q1ZQaXhlbEJ1ZmZlckNHSW1hZ2VDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4
ZWxCdWZmZXJDR0ltYWdlQ29tcGF0aWJpbGl0eUtleSgpCiBTT0ZUX0xJTktfQ09OU1RBTlRfRk9S
X0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVySU9TdXJmYWNlT3BlbkdM
RVNGQk9Db21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNkZWZpbmUga0NWUGl4ZWxCdWZm
ZXJJT1N1cmZhY2VPcGVuR0xFU0ZCT0NvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQ
aXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEVTRkJPQ29tcGF0aWJpbGl0eUtleSgpCi0jZWxzZQor
I2VsaWYgVVNFKE9QRU5HTCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUs
IENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGUsIENWUmV0dXJuLCAoQ0ZBbGxv
Y2F0b3JSZWYgYWxsb2NhdG9yLCBDRkRpY3Rpb25hcnlSZWYgY2FjaGVBdHRyaWJ1dGVzLCBDR0xD
b250ZXh0T2JqIGNnbENvbnRleHQsIENHTFBpeGVsRm9ybWF0T2JqIGNnbFBpeGVsRm9ybWF0LCBD
RkRpY3Rpb25hcnlSZWYgdGV4dHVyZUF0dHJpYnV0ZXMsIENWT3BlbkdMVGV4dHVyZUNhY2hlUmVm
KiBjYWNoZU91dCksIChhbGxvY2F0b3IsIGNhY2hlQXR0cmlidXRlcywgY2dsQ29udGV4dCwgY2ds
UGl4ZWxGb3JtYXQsIHRleHR1cmVBdHRyaWJ1dGVzLCBjYWNoZU91dCkpCiAjZGVmaW5lIENWT3Bl
bkdMVGV4dHVyZUNhY2hlQ3JlYXRlIHNvZnRMaW5rX0NvcmVWaWRlb19DVk9wZW5HTFRleHR1cmVD
YWNoZUNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZp
ZGVvLCBDVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZVRleHR1cmVGcm9tSW1hZ2UsIENWUmV0dXJu
LCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDVk9wZW5HTFRleHR1cmVDYWNoZVJlZiB0ZXh0
dXJlQ2FjaGUsIENWSW1hZ2VCdWZmZXJSZWYgc291cmNlSW1hZ2UsIENGRGljdGlvbmFyeVJlZiBh
dHRyaWJ1dGVzLCBDVk9wZW5HTFRleHR1cmVSZWYqIHRleHR1cmVPdXQpLCAoYWxsb2NhdG9yLCB0
ZXh0dXJlQ2FjaGUsIHNvdXJjZUltYWdlLCBhdHRyaWJ1dGVzLCB0ZXh0dXJlT3V0KSkKQEAgLTE0
NSw2ICsxNDEsMTAgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29y
ZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUga0NWUGl4ZWxC
dWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJP
cGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGUsIENWUmV0dXJu
LCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQs
IE9TVHlwZSBwaXhlbEZvcm1hdFR5cGUsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKnBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgd2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXRUeXBlLCBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIHBpeGVs
QnVmZmVyT3V0KSkKKyNkZWZpbmUgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZSBzb2Z0TGlua19Db3JlVmlk
ZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzLCBDVlJldHVybiwg
KENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBP
U1R5cGUgcGl4ZWxGb3JtYXRUeXBlLCB2b2lkKiBkYXRhLCBzaXplX3QgYnl0ZXNQZXJSb3csIHZv
aWQgKCpyZWxlYXNlQ2FsbGJhY2spKHZvaWQqLCBjb25zdCB2b2lkKiksIHZvaWQqIHJlbGVhc2VQ
b2ludGVyLCBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBDVlBpeGVsQnVm
ZmVyUmVmICpwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHdpZHRoLCBoZWlnaHQsIHBpeGVs
Rm9ybWF0VHlwZSwgZGF0YSwgYnl0ZXNQZXJSb3csIHJlbGVhc2VDYWxsYmFjaywgcmVsZWFzZVBv
aW50ZXIsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBD
VlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzIHNvZnRMaW5rX0NvcmVWaWRlb19DVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aEJ5dGVzCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3Jl
LCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwg
KENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlv
bmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1
ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4
ZWxCdWZmZXJPdXQpKQogI2RlZmluZSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBz
b2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKaW5kZXggM2U4MDRhNmQ2Y2Y0OTAxM2YzNjY5ZWVkYzI0NGViNzRiYTU5NjViMS4uOGFkYjYz
NmI5N2I2Njg3MjQ5OWFlNmUxN2E0YWQ3Nzg1MDZjNjRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0xMTk4LDcg
KzExOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYK
IAotI2lmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShBTkdMRSkKICAgICB2
b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUpOwogICAgIHZvaWQgdXBk
YXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CiAjZW5kaWYKQEAg
LTEzNjAsNyArMTM2MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKICAgICB2b2lkIHJlYWRQ
aXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscyk7CiAKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9y
YWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcAppbmRleCA3Y2JkZmZlOGVjZDBm
MzY1NmQwOGExYTA5OTlhMWIzNTg4MDVlY2ZiLi5mMTYxZWE1OTQwYWUxZmU5YzExNDc2ODAxZjZh
YzU5MDJhZjU2ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcApAQCAtMTg2
LDI0ICsxODYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKICAgICAvLyByZXNpemUgcmVndWxhciBGQk8KICAgICBnbDo6QmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSk7CiAgICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxh
eWVyKCk7CiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwg
MCk7Ci0jZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIEZJWE1FIChrYnIpOiBpbXBs
ZW1lbnQgaU9TIHBhdGgsIGlkZWFsbHkgdXNpbmcgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRp
c2FtcGxlLgotICAgIC8vIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90
ZXh0dXJlKTsKLSAgICAvLyBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7Ci0g
ICAgLy8gc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0KTsKICNlbHNlCi0jZXJyb3IgVW5rbm93biBDb2NvYSBwbGF0Zm9ybQot
I2VuZGlmCi0jZWxzZQotCi0jZXJyb3IgTXVzdCBwb3J0IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMK
LQorI2Vycm9yIEZJWE1FOiBQb3J0IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMuCiAjZW5kaWYgLy8g
UExBVEZPUk0oQ09DT0EpCiAKICAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRl
ZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQz
RENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0M0RDb2NvYS5tbQppbmRleCA3ZjYxZWY2ZjIzY2Q3YjRmZDYzZTg0ZWEwNTAzNDNh
NDM3NzBjMDM3Li5hMTU1ZWY3YTNjMWE1NTU3MjkzYzI3M2NhMzhkZTVmNTBhOTgyM2YxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHQzRENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KQEAgLTY5LDYgKzY5LDcgQEAgdHlwZWRlZiB2
b2lkKiBHTGVnbENvbnRleHQ7CiAjaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+CiAjaW5jbHVkZSA8
QU5HTEUvZWdsZXh0X2FuZ2xlLmg+CiAjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5o
PgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2xfZXh0Lmg+CiAjaW5jbHVkZSA8QU5H
TEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KICNpbmNsdWRlIDxBTkdMRS9lbnRy
eV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgogI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgpA
QCAtMjg3LDYgKzI4OCw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAgICAgICAgIDo6Z2xF
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUKTsKIAogI2VsaWYgVVNF
KEFOR0xFKQorCiAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwogICAgIFVOVVNFRF9QQVJB
TShzaGFyZWRDb250ZXh0KTsKIApAQCAtMzM4LDYgKzM0MCw3IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaW5kCiAgICAgfQogICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVY
VF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNo
X2JhY2soRUdMX1RSVUUpOworCiAgICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVH
TF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMu
cHVzaF9iYWNrKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKICAgICAgICAgLy8gRUdMX0xP
V19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCkBAIC0zNTUsMzAgKzM1OCwy
MyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogCiAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwog
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiByZXF1aXJlZEV4dGVuc2lvbnNbXSA9
IHsKLSAgICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIiwgLy8gRm9yIElPU3VyZmFj
ZS1iYWNrZWQgdGV4dHVyZXMKLSAgICAgICAgIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZhY2UgZnJvbSBhbiBJT1N1cmZhY2UKLSAg
ICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBn
ZXRFeHRlbnNpb25zKCk7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG9wdGlv
bmFsRXh0ZW5zaW9uc1tdID0gewotICAgICAgICAiR0xfRVhUX2RlYnVnX21hcmtlciIsCisgICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiByZXF1aXJlZEV4dGVuc2lvbnNbXSA9IHsKKyAg
ICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIiwgLy8gRm9yIElPU3VyZmFjZS1iYWNr
ZWQgdGV4dHVyZXMuCisgICAgICAgICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiLCAv
LyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZyb20gYW4gSU9TdXJmYWNlLgogICAgIH07
CiAKLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0KICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocmVxdWlyZWRFeHRlbnNp
b25zKTsgKytpKSB7CiAgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cyhyZXF1aXJlZEV4
dGVuc2lvbnNbaV0pKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJNaXNzaW5nIHJlcXVpcmVk
IGV4dGVuc2lvbi4iKTsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIk1pc3NpbmcgcmVxdWlyZWQg
ZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocmVxdWly
ZWRFeHRlbnNpb25zW2ldKTsKICAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdU
Rl9BUlJBWV9MRU5HVEgob3B0aW9uYWxFeHRlbnNpb25zKTsgKytpKSB7Ci0gICAgICAgIGlmIChl
eHRlbnNpb25zLnN1cHBvcnRzKG9wdGlvbmFsRXh0ZW5zaW9uc1tpXSkpCi0gICAgICAgICAgICBl
eHRlbnNpb25zLmVuc3VyZUVuYWJsZWQob3B0aW9uYWxFeHRlbnNpb25zW2ldKTsKLSAgICB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAjZW5kaWYgLy8gI2VsaWYgVVNFKEFOR0xFKQogCkBA
IC0zOTEsNyArMzg3LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmQKICAgICAgICAgW21fd2Vi
R0xMYXllciBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsKICNlbmRpZgogI2lmIFVTRShBTkdMRSkK
LSAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxheU9iaiBhbmRDb25m
aWc6Y29uZmlnXTsKKyAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxh
eU9iaiBjb25maWc6Y29uZmlnXTsKICNlbmRpZgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIApAQCAtNDE0LDEzICs0MTAsMjAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmQKICAgICA6
OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfRVhULCAwKTsKICNlbGlmIFVTRShBTkdMRSkKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBHTGVudW0gdGV4dHVyZVR5cGUgPSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRTsKKyNl
bHNlCisgICAgR0xlbnVtIHRleHR1cmVUeXBlID0gR0xfVEVYVFVSRV8yRDsKKyNlbmRpZgorCiAg
ICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FO
R0xFLCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpC
aW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7CisgICAgZ2w6OkJpbmRU
ZXh0dXJlKHRleHR1cmVUeXBlLCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRl
eHR1cmVUeXBlLCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OkJpbmRUZXh0dXJl
KHRleHR1cmVUeXBlLCAwKTsKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlv
bgogI2VuZGlmCkBAIC03MTcsMTQgKzcyMCwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
ZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNpZiBVU0UoQU5HTEUpCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXpl
IHNpemUpCiB7CisjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3ND
b250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCki
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOwogICAgIFttX3dlYkdMTGF5ZXIg
YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6bV9h
dHRycy5hbHBoYV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyNlbmRpZgogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5n
U3RvcmVGcm9tTGF5ZXIoKQogeworI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIExPRyhXZWJHTCwg
IkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwogICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVm
ZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07CisjZW5kaWYKIH0KICNlbmRpZiAvLyBVU0UoQU5H
TEUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIuaAppbmRleCAxZDNiNmQ1YWM4YTgxYThjMjFmMjc0Y2FhNjQ4M2EzZGUxNGJlNWRk
Li5lNmM0NWZiNTcwNWQ2MjA0OWU0YmIxOTc2ZWRhODgzMDc5Yjg3MjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCkBAIC00
MCwyNCArNDAsMjIgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIEBpbnRl
cmZhY2UgV2ViR0xMYXllciA6IENBTGF5ZXIKICNlbGlmIFVTRShPUEVOR0xfRVMpCiBAaW50ZXJm
YWNlIFdlYkdMTGF5ZXIgOiBDQUVBR0xMYXllcgotI2VsaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9S
TShNQUMpCisjZWxpZiBVU0UoQU5HTEUpCiBAaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQUxheWVy
Ci0jZWxpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1AaW50ZXJmYWNlIFdl
YkdMTGF5ZXIgOiBDQUVBR0xMYXllcgogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9y
bQogI2VuZGlmCiB7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIF9jb250ZXh0Owog
ICAgIGZsb2F0IF9kZXZpY2VQaXhlbFJhdGlvOwotI2lmIFVTRShPUEVOR0wpIHx8IChVU0UoQU5H
TEUpICYmIFBMQVRGT1JNKE1BQykpCisjaWYgSEFWRShJT1NVUkZBQ0UpICYmIChVU0UoT1BFTkdM
KSB8fCBVU0UoQU5HTEUpKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+
IF9jb250ZW50c0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNl
PiBfZHJhd2luZ0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNl
PiBfc3BhcmVCdWZmZXI7CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBfYnVmZmVyU2l6ZTsKICAgICBC
T09MIF91c2luZ0FscGhhOwogI2VuZGlmCi0jaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMp
CisjaWYgVVNFKEFOR0xFKQogICAgIHZvaWQqIF9lZ2xEaXNwbGF5OwogICAgIHZvaWQqIF9lZ2xD
b25maWc7CiAgICAgdm9pZCogX2NvbnRlbnRzUGJ1ZmZlcjsKQEAgLTczLDEzICs3MSwxMyBAQCBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogCiAtIChDR0ltYWdlUmVmKWNvcHlJ
bWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlOwog
Ci0jaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKSkKKyNpZiBI
QVZFKElPU1VSRkFDRSkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCiAtICh2b2lkKWFs
bG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6KFdlYkNvcmU6OkludFNpemUpc2l6
ZSB1c2luZ0FscGhhOihCT09MKXVzaW5nQWxwaGE7CiAtICh2b2lkKWJpbmRGcmFtZWJ1ZmZlclRv
TmV4dEF2YWlsYWJsZVN1cmZhY2U7CiAjZW5kaWYKIAotI2lmIChVU0UoQU5HTEUpICYmIFBMQVRG
T1JNKE1BQykpCi0tICh2b2lkKXNldEVHTERpc3BsYXk6KHZvaWQqKWVnbERpc3BsYXkgYW5kQ29u
ZmlnOih2b2lkKillZ2xDb25maWc7CisjaWYgVVNFKEFOR0xFKQorLSAodm9pZClzZXRFR0xEaXNw
bGF5Oih2b2lkKillZ2xEaXNwbGF5IGNvbmZpZzoodm9pZCopZWdsQ29uZmlnOwogLSAodm9pZClk
ZWFsbG9jOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IDg3ODA4NjAyNzAyNWYzMDkwODgzYWJlYzQ3
ZGJlY2FkNTZhMjUwZDkuLmU3MDE3ZGViNGJlYjg4NmRjMGU5ODVkNzg5NTk0N2YzNTVlYzMzNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdM
TGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5tbQpAQCAtNTUsNiArNTUsMTEgQEAKICNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRf
Y29udGV4dAogI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgogI2luY2x1ZGUgPEFOR0xFL2dsMmV4
dF9hbmdsZS5oPgorI2lmIFBMQVRGT1JNKE1BQykKK2NvbnN0IEdMZW51bSBpb1N1cmZhY2VUZXh0
dXJlVHlwZSA9IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworI2Vsc2UKK2NvbnN0IEdMZW51
bSBpb1N1cmZhY2VUZXh0dXJlVHlwZSA9IEdMX1RFWFRVUkVfMkQ7CisjZW5kaWYKICNlbmRpZgog
CiBAaW1wbGVtZW50YXRpb24gV2ViR0xMYXllcgpAQCAtNjYsNyArNzEsNyBAQAogICAgIF9jb250
ZXh0ID0gY29udGV4dDsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIF9kZXZpY2VQaXhl
bFJhdGlvID0gY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5kZXZpY2VQaXhlbFJhdGlv
OwotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIFVT
RShPUEVOR0wpIHx8IFVTRShBTkdMRSkKICAgICBzZWxmLmNvbnRlbnRzT3BhcXVlID0gIWNvbnRl
eHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGE7CiAgICAgc2VsZi50cmFuc2Zvcm0gPSBD
QVRyYW5zZm9ybTNESWRlbnRpdHk7CiAgICAgc2VsZi5jb250ZW50c1NjYWxlID0gX2RldmljZVBp
eGVsUmF0aW87CkBAIC03Niw3ICs4MSw3IEBACiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLSNpZiBV
U0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQorI2lmIFVTRShPUEVO
R0wpIHx8IFVTRShBTkdMRSkKIC8vIFdoZW4gdXNpbmcgYW4gSU9TdXJmYWNlIGFzIGxheWVyIGNv
bnRlbnRzLCB3ZSBuZWVkIHRvIGZsaXAgdGhlCiAvLyBsYXllciB0byB0YWtlIGludG8gYWNjb3Vu
dCB0aGF0IHRoZSBJT1N1cmZhY2UgcHJvdmlkZXMgY29udGVudAogLy8gaW4gWS11cC4gVGhpcyBt
ZWFucyB0aGF0IGFueSBpbmNvbWluZyB0cmFuc2Zvcm0gKHVubGlrZWx5LCBzaW5jZQpAQCAtOTIs
NyArOTcsNyBAQAogewogICAgIFtzdXBlciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZShwLngs
IDEuMCAtIHAueSldOwogfQotI2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8IChVU0UoQU5HTEUpICYm
IFBMQVRGT1JNKE1BQykpCisjZW5kaWYgLy8gVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQogCiAj
aWYgVVNFKE9QRU5HTCkKIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAq
ZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCkBAIC0xNTUsMTIgKzE2MCwxMyBAQCBzdGF0aWMgdm9p
ZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQog
ICAgIH0KICNlbGlmIFVTRShPUEVOR0xfRVMpCiAgICAgX2NvbnRleHQtPnByZXNlbnRSZW5kZXJi
dWZmZXIoKTsKLSNlbGlmIFVTRShBTkdMRSkKKyNlbGlmIEhBVkUoSU9TVVJGQUNFKSAmJiBVU0Uo
QU5HTEUpCiAgICAgX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAgICAgaWYgKF9kcmF3aW5n
QnVmZmVyKSB7CiAgICAgICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKKwogICAgICAgICAgICAg
R0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICAgICAg
ICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgdGV4dHVyZSk7
CisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoaW9TdXJmYWNlVGV4dHVyZVR5cGUsIHRleHR1
cmUpOwogICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBf
bGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogcmVwb3J0IGVycm9yLgogICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CkBA
IC0xODEsOCArMTg3LDggQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lk
ICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAgICAgbGF5ZXItPm93bmVyKCktPnBsYXRm
b3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllcik7CiB9CiAKLSNpZiAoVVNFKEFOR0xFKSAm
JiBQTEFURk9STShNQUMpKQotLSAodm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKilkaXNwbGF5IGFu
ZENvbmZpZzoodm9pZCopY29uZmlnCisjaWYgVVNFKEFOR0xFKQorLSAodm9pZClzZXRFR0xEaXNw
bGF5Oih2b2lkKilkaXNwbGF5IGNvbmZpZzoodm9pZCopY29uZmlnCiB7CiAgICAgX2VnbERpc3Bs
YXkgPSBkaXNwbGF5OwogICAgIF9lZ2xDb25maWcgPSBjb25maWc7CkBAIC0xOTcsNyArMjAzLDcg
QEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg
Lyogc2l6ZSAqLykKIH0KICNlbmRpZgogCi0jaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkg
JiYgUExBVEZPUk0oTUFDKSkKKyNpZiBIQVZFKElPU1VSRkFDRSkgJiAoVVNFKE9QRU5HTCkgfHwg
VVNFKEFOR0xFKSkKIC0gKHZvaWQpYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6
ZTooV2ViQ29yZTo6SW50U2l6ZSlzaXplIHVzaW5nQWxwaGE6KEJPT0wpdXNpbmdBbHBoYQogewog
ICAgIF9idWZmZXJTaXplID0gc2l6ZTsKQEAgLTIxNCwxMyArMjIwLDEzIEBAIHN0YXRpYyB2b2lk
IGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAg
ICAgX2RyYXdpbmdCdWZmZXItPm1pZ3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7CiAgICAg
X3NwYXJlQnVmZmVyLT5taWdyYXRlQ29sb3JTcGFjZVRvUHJvcGVydGllcygpOwogCi0jaWYgVVNF
KEFOR0xFKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFOR0xFKQogICAgIGNvbnN0IEVHTGlu
dCBzdXJmYWNlQXR0cmlidXRlc1tdID0gewogICAgICAgICBFR0xfV0lEVEgsIHNpemUud2lkdGgo
KSwKICAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwKICAgICAgICAgRUdMX0lPU1VS
RkFDRV9QTEFORV9BTkdMRSwgMCwKICAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBFR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsCi0gICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1B
VF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAorICAgICAgICBFR0xf
VEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIEdMX0JHUkFfRVhULAogICAgICAgICBFR0xf
VEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCiAgICAgICAgIEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCiAgICAgICAgIEVHTF9OT05FLCBFR0xfTk9ORQpA
QCAtMjQ5LDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9p
ZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgZXJy
b3IgPT0ga0NHTE5vRXJyb3IpOwogI2VsaWYgVVNFKEFOR0xFKQogICAgIEdDM0RlbnVtIHRleHR1
cmUgPSBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCB0ZXh0dXJlKTsKKworICAgIGdsOjpCaW5kVGV4dHVy
ZShpb1N1cmZhY2VUZXh0dXJlVHlwZSwgdGV4dHVyZSk7CiAKICAgICBpZiAoX2xhdGNoZWRQYnVm
ZmVyKSB7CiAgICAgICAgIGlmICghRUdMX1JlbGVhc2VUZXhJbWFnZShfZWdsRGlzcGxheSwgX2xh
dGNoZWRQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7CkBAIC0yNzIsNyArMjc5LDcgQEAgc3Rh
dGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6
ZSAqLykKICAgICBfbGF0Y2hlZFBidWZmZXIgPSBfZHJhd2luZ1BidWZmZXI7CiAjZW5kaWYKIH0K
LSNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShNQUMpKQor
I2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKIAogQGVuZAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCmlu
ZGV4IDlmMWY2NmIzYmQ1OWY1OWIxYWQzY2I3MDVjODU2NTQ0MjI3ZWMzOTguLjAxOWQyMzk1MTdk
ODJiYzJlYmYzZGI2NTY2YzNmYWQzYTU4MGZkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCkBAIC02MSw2ICs2MSwx
NiBAQCBUZXh0dXJlQ2FjaGVDVjo6VGV4dHVyZUNhY2hlQ1YoR3JhcGhpY3NDb250ZXh0M0QmIGNv
bnRleHQsIFJldGFpblB0cjxUZXh0dXJlQ2FjaAogCiBSZXRhaW5QdHI8VGV4dHVyZUNhY2hlQ1Y6
OlRleHR1cmVUeXBlPiBUZXh0dXJlQ2FjaGVDVjo6dGV4dHVyZUZyb21JbWFnZShDVlBpeGVsQnVm
ZmVyUmVmIGltYWdlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCiB7Cisj
aWYgVVNFKEFOR0xFKQorICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzIGlu
dGVncmF0aW5nIHZpYSBBTkdMRS4KKyAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOworICAgIFVOVVNF
RF9QQVJBTShvdXRwdXRUYXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisgICAgVU5V
U0VEX1BBUkFNKGludGVybmFsRm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQogICAgIFRl
eHR1cmVUeXBlIGJhcmVWaWRlb1RleHR1cmUgPSBudWxscHRyOwogI2lmIFVTRShPUEVOR0xfRVMp
CiAgICAgc2l6ZV90IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsKQEAgLTc1
LDE1ICs4NSw2IEBAIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVDVjo6VGV4dHVyZVR5cGU+IFRleHR1
cmVDYWNoZUNWOjp0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCCiAgICAgVU5VU0VEX1BBUkFNKHR5
cGUpOwogICAgIGlmIChrQ1ZSZXR1cm5TdWNjZXNzICE9IENWT3BlbkdMVGV4dHVyZUNhY2hlQ3Jl
YXRlVGV4dHVyZUZyb21JbWFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2NhY2hlLmdldCgpLCBp
bWFnZSwgbnVsbHB0ciwgJmJhcmVWaWRlb1RleHR1cmUpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gZG8g
dGhpcyBpbnRlZ3JhdGluZyB2aWEgQU5HTEUuCi0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsKLSAg
ICBVTlVTRURfUEFSQU0ob3V0cHV0VGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwot
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1h
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIHJldHVybiBudWxscHRyOwogI2VuZGlm
CiAgICAgUmV0YWluUHRyPFRleHR1cmVUeXBlPiB2aWRlb1RleHR1cmUgPSBhZG9wdENGKGJhcmVW
aWRlb1RleHR1cmUpOwogCkBAIC05MSwxNiArOTIsMTcgQEAgUmV0YWluUHRyPFRleHR1cmVDYWNo
ZUNWOjpUZXh0dXJlVHlwZT4gVGV4dHVyZUNhY2hlQ1Y6OnRleHR1cmVGcm9tSW1hZ2UoQ1ZQaXhl
bEIKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2Vha1Ro
aXNdIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisKICAgICAgICAgaWYgKGF1dG8gY2FjaGUgPSB3ZWFrVGhpcy0+bV9jYWNoZS5nZXQoKSkK
ICNpZiBVU0UoT1BFTkdMX0VTKQogICAgICAgICAgICAgQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZUZs
dXNoKGNhY2hlLCAwKTsKLSNlbHNlCisjZWxpZiBVU0UoT1BFTkdMKQogICAgICAgICAgICAgQ1ZP
cGVuR0xUZXh0dXJlQ2FjaGVGbHVzaChjYWNoZSwgMCk7CiAjZW5kaWYKICAgICB9KTsKIAogICAg
IHJldHVybiB2aWRlb1RleHR1cmU7CisjZW5kaWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1Yu
Y3BwCmluZGV4IGQ5NzVkZmM4YWMxYThmMTk2OGFmMTZiNzdhZWYzOTUxODJjYzQyOGEuLmQ3YTZi
YTExYjJiZjNjNzY2YzlmNWJhOWNhOGFjNDFjOGU5YzExMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJD
Vi5jcHAKQEAgLTg3NCwyMCArODc0LDM2IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNv
cHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShUZXh0dXJlVHlwZSBpbnB1dFZpCiAgICAg
R0xmbG9hdCBsb3dlclJpZ2h0WzJdID0geyAwLCAwIH07CiAgICAgR0xmbG9hdCB1cHBlclJpZ2h0
WzJdID0geyAwLCAwIH07CiAgICAgR0xmbG9hdCB1cHBlckxlZnRbMl0gPSB7IDAsIDAgfTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5hbWU7CisgICAgR0MzRGVudW0gdmlkZW9U
ZXh0dXJlVGFyZ2V0OworCiAjaWYgVVNFKE9QRU5HTF9FUykKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTEVTVGV4dHVyZUdldE5hbWUoaW5wdXRWaWRlb1Rl
eHR1cmUpOwotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IENWT3BlbkdMRVNUZXh0
dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsKKyAgICB2aWRlb1RleHR1cmVOYW1lID0g
Q1ZPcGVuR0xFU1RleHR1cmVHZXROYW1lKGlucHV0VmlkZW9UZXh0dXJlKTsKKyAgICB2aWRlb1Rl
eHR1cmVUYXJnZXQgPSBDVk9wZW5HTEVTVGV4dHVyZUdldFRhcmdldChpbnB1dFZpZGVvVGV4dHVy
ZSk7CiAgICAgQ1ZPcGVuR0xFU1RleHR1cmVHZXRDbGVhblRleENvb3JkcyhpbnB1dFZpZGVvVGV4
dHVyZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1cHBlclJpZ2h0LCB1cHBlckxlZnQpOwogI2Vs
aWYgVVNFKE9QRU5HTCkKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZpZGVvVGV4dHVyZU5hbWUgPSBD
Vk9wZW5HTFRleHR1cmVHZXROYW1lKGlucHV0VmlkZW9UZXh0dXJlKTsKLSAgICBHQzNEZW51bSB2
aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1Rl
eHR1cmUpOworICAgIHZpZGVvVGV4dHVyZU5hbWUgPSBDVk9wZW5HTFRleHR1cmVHZXROYW1lKGlu
cHV0VmlkZW9UZXh0dXJlKTsKKyAgICB2aWRlb1RleHR1cmVUYXJnZXQgPSBDVk9wZW5HTFRleHR1
cmVHZXRUYXJnZXQoaW5wdXRWaWRlb1RleHR1cmUpOwogICAgIENWT3BlbkdMVGV4dHVyZUdldENs
ZWFuVGV4Q29vcmRzKGlucHV0VmlkZW9UZXh0dXJlLCBsb3dlckxlZnQsIGxvd2VyUmlnaHQsIHVw
cGVyUmlnaHQsIHVwcGVyTGVmdCk7CiAjZWxpZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm0zRE9i
amVjdCB2aWRlb1RleHR1cmVOYW1lID0gQ1ZPcGVuR0xUZXh0dXJlR2V0TmFtZShpbnB1dFZpZGVv
VGV4dHVyZSk7Ci0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gQ1ZPcGVuR0xUZXh0
dXJlR2V0VGFyZ2V0KGlucHV0VmlkZW9UZXh0dXJlKTsKLSAgICBDVk9wZW5HTFRleHR1cmVHZXRD
bGVhblRleENvb3JkcyhpbnB1dFZpZGVvVGV4dHVyZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1
cHBlclJpZ2h0LCB1cHBlckxlZnQpOworICAgIFVOVVNFRF9QQVJBTShsb3dlckxlZnQpOworICAg
IFVOVVNFRF9QQVJBTShsb3dlclJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0odXBwZXJMZWZ0KTsK
KyAgICBVTlVTRURfUEFSQU0odXBwZXJSaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsK
KyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ob3V0cHV0VGV4dHVy
ZSk7CisgICAgVU5VU0VEX1BBUkFNKG91dHB1dFRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxl
dmVsKTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxGb3JtYXQpOworICAgIFVOVVNFRF9QQVJB
TShmb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKKyAgICBVTlVTRURfUEFS
QU0oc3dhcENvbG9yQ2hhbm5lbHMpOwogICAgIC8vIEZJWE1FOiBkZXRlcm1pbmUgaG93IHRvIGFj
Y2VzcyByZWN0YW5ndWxhciB0ZXh0dXJlcyB2aWEgQU5HTEUuCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgog
CiAgICAgaWYgKGxvd2VyTGVmdFsxXSA8IHVwcGVyUmlnaHRbMV0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZy5jcHAKaW5kZXggMmZmYTZiNzc2NzM3M2NiNzc4YjBhNTA0ZjUzOTVmMGU4
NGVjYzc2ZS4uYmNkNzI0NjhlMDVjNzI0YjMwZmU1ZWY0ZDFjMjM5YmI3YTU3ZjRlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9w
ZW5HTFNldHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xf
RVMpKQogI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKIAogI2lmIFVTRShMSUJF
UE9YWSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2lmIFVTRShPUEVOR0xfRVMpCiAjaW5jbHVkZSA8
T3BlbkdMRVMvRVMyL2dsLmg+Ci0jZWxzZQorI2VsaWYgVVNFKE9QRU5HTCkKICNpbmNsdWRlIDxP
cGVuR0wvZ2wuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaAppbmRl
eCBjYjUxNjk1YjcxZGI3NTI3NmFiMTQzODYzY2VhYjdjN2I3YzE2N2RlLi4zYjg1NDMxMjk2YzM4
MWFkNGI1ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0
aW5nLmgKQEAgLTI0LDExICsyNCwxMiBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmdfaAotI2RlZmluZSBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nX2gK
KyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAKKyNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMp
KQorCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>