<?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>221396</bug_id>
          
          <creation_ts>2021-02-04 03:44:58 -0800</creation_ts>
          <short_desc>RemoteGraphicsContextGLProxy should support losing the context and should lose the context on timeouts</short_desc>
          <delta_ts>2021-02-10 14:42:30 -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>WebGL</component>
          <version>WebKit Local 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>217211</blocked>
    
    <blocked>219641</blocked>
    
    <blocked>221488</blocked>
    
    <blocked>221665</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1725575</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-04 03:44:58 -0800</bug_when>
    <thetext>RemoteGraphicsContextGLProxy should support losing the context and should lose the context on timeouts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725581</commentid>
    <comment_count>1</comment_count>
      <attachid>419266</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-04 04:17:27 -0800</bug_when>
    <thetext>Created attachment 419266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725984</commentid>
    <comment_count>2</comment_count>
      <attachid>419377</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-05 02:17:38 -0800</bug_when>
    <thetext>Created attachment 419377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727015</commentid>
    <comment_count>3</comment_count>
      <attachid>419701</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-09 05:35:36 -0800</bug_when>
    <thetext>Created attachment 419701
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727052</commentid>
    <comment_count>4</comment_count>
      <attachid>419701</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-09 08:26:29 -0800</bug_when>
    <thetext>Comment on attachment 419701
rebase

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.cpp:59
&gt; +    send(Messages::RemoteGraphicsContextGLProxy::WasCreated(true, extensions, requestableExtensions), m_graphicsContextGLIdentifier);

What does the &apos;true&apos; mean?

&gt; Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp:182
&gt; +    // Skip messages intended for already removed messageReceiverMap() destinations.
&gt; +#if ENABLE(WEBGL)
&gt; +    if (decoder.messageReceiverName() == Messages::RemoteGraphicsContextGLProxy::messageReceiverName())
&gt; +        return true;
&gt; +#endif

This seems pretty unusual. Do we do this elsewhere?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:357
&gt; +    void disconnectGpuProcessIfNeeded();
&gt; +    void abandonGpuProcess();

What&apos;s the difference between these? What does &quot;abandon&quot; imply?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:39
&gt; +    if (!isContextLost()) {
&gt; +        auto sendResult = send(Messages::RemoteGraphicsContextGL::SetFailNextGPUStatusCheck());
&gt; +        if (!sendResult)
&gt; +            markContextLost();
&gt; +    }

There&apos;s lot of boilerplate here. I wonder if we can factor this to avoid future mistakes where we forget to check context lost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727502</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-10 03:56:00 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to Simon Fraser (smfr) from comment #4)
&gt;&gt; +    send(Messages::RemoteGraphicsContextGLProxy::WasCreated(true, extensions, requestableExtensions), m_graphicsContextGLIdentifier);
&gt; What does the &apos;true&apos; mean?

That the creation was success.
I can improve this in future patches.

&gt; &gt; Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp:182
&gt; &gt; +    // Skip messages intended for already removed messageReceiverMap() destinations.
&gt; &gt; +#if ENABLE(WEBGL)
&gt; &gt; +    if (decoder.messageReceiverName() == Messages::RemoteGraphicsContextGLProxy::messageReceiverName())
&gt; &gt; +        return true;
&gt; &gt; +#endif
&gt; 
&gt; This seems pretty unusual. Do we do this elsewhere?

No. All sites are pretty buggy wrt various timeout, connection lost and graceful connection shutdown scenarios.
 
&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:357
&gt; &gt; +    void disconnectGpuProcessIfNeeded();
&gt; &gt; +    void abandonGpuProcess();
&gt; 
&gt; What&apos;s the difference between these? What does &quot;abandon&quot; imply?

One is where we disconnect the connection between the proxy and the object it proxies.

Other is where the disconnect has happened (e.g. a timeout) and we just forget the object we proxied.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:39
&gt; &gt; +    if (!isContextLost()) {
&gt; &gt; +        auto sendResult = send(Messages::RemoteGraphicsContextGL::SetFailNextGPUStatusCheck());
&gt; &gt; +        if (!sendResult)
&gt; &gt; +            markContextLost();
&gt; &gt; +    }
&gt; 
&gt; There&apos;s lot of boilerplate here. I wonder if we can factor this to avoid
&gt; future mistakes where we forget to check context lost.

Good idea, I&apos;ll change this in future commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727503</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-10 04:04:54 -0800</bug_when>
    <thetext>Committed r272645: &lt;https://commits.webkit.org/r272645&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 419701.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727817</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-10 14:42:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/74207073&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419266</attachid>
            <date>2021-02-04 04:17:27 -0800</date>
            <delta_ts>2021-02-05 02:17:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221396-20210204141725.patch</filename>
            <type>text/plain</type>
            <size>171623</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5ODg1M2JmZjEzMzVjODZm
Mzg5NjU4YTFmNGRlNDZiNTkwMWIxZDQuLjliODM5OWVkYzkwOTIyMjQ2NGE0OTYzYjljMmZkMzgy
YTlhYWJkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcgQEAKKzIwMjEtMDItMDQgIEtpbW1vIEtp
bm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5IHNob3VsZCBzdXBwb3J0IGxvc2luZyB0aGUgY29udGV4dCBhbmQgc2hvdWxk
IGxvc2UgdGhlIGNvbnRleHQgb24gdGltZW91dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5IGFjdGluZyBvbgorICAgICAgICBsb3NpbmcgdGhlIGNvbnRleHQgaW4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuCisKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9y
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgdGltaW5nIG91dCBvbiBtZXNzYWdlCisgICAg
ICAgIHNlbmRzLiBGb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0LgorCisgICAgICAgIEltcGxl
bWVudCBzdXBwb3J0IGZvciBHUFVQcm9jZXNzQ29ubmVjdGlvbiBkaXNjb25uZWN0LiBGb3JjZSB0
aGUgY29udGV4dAorICAgICAgICBiZSBsb3N0LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHA6CisKKyAgICAgICAgU2VuZCBhIGJvb2wg
dmlhIFdhc0NyZWF0ZWQgbWV0aG9kLCBzbyB0aGF0IHRoZQorICAgICAgICByZWNlaXZlciBrbm93
cyBpZiBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgICAgICAgIEN1cnJlbnRseSB0
aGUgY3JlYXRpb24gYWx3YXlzIHN1Y2NlZWRzLgorCisgICAgICAgIFByZXZpb3VzbHkgaXQgd2Fz
IGRlc2lnbmVkIHRvIHVzZSB3YXNMb3N0IGluc3RlYWQsCisgICAgICAgIGJ1dCB0aGlzIGhhcyB0
aGUgcHJvYmxlbSB0aGF0IHRoZSBjbGllbnQgd2lsbCB3YWl0CisgICAgICAgIGZvciBXYXNDcmVh
dGVkIGluIHBhcnRpY3VsYXIgY2FzZXMgdG8gZW5zdXJlIGluaXRpYWxpemF0aW9uLAorICAgICAg
ICBhbmQgdGh1cyB3ZSBjYW5ub3Qgd2FpdCBmb3IgICJXYXNDcmVhdGVkIE9SIFdhc0xvc3QiLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpz
eW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpnZXRFcnJvcik6CisKKyAgICAgICAgTWFudWFsbHkgaW1wbGVtZW50IGZldyBtZXRob2Rz
IHRoYXQgY29udGFpbiBjdXN0b20gY2xpZW50LXNpZGUKKyAgICAgICAgbG9naWMgd3J0LiBsb3N0
IGNvbnRleHQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg6CisgICAgICAgIChzZXRG
YWlsTmV4dEdQVVN0YXR1c0NoZWNrKToKKyAgICAgICAgKGdldEJvb2xlYW52KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorCisgICAgICAgIFNr
aXAgdGhlIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgbWVzc2FnZXMgdGhhdCBkbyBub3Qg
aGF2ZQorICAgICAgICBhIHJlY2VpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBhcyB3ZSBjYW5ub3Qg
YXNzdW1lIHRoYXQgb25seSBleHBlY3RlZAorICAgICAgICBtZXNzYWdlcyBhcnJpdmUgdG8gdGhl
IG1lc3NhZ2UgaGFuZGVyLgorCisgICAgICAgIFRoZSBjbGllbnQsIGkuZS4gdGhlIHdlYiBwcm9j
ZXNzLCBtaWdodAorICAgICAgICAgLSBqdXN0IGRlbGV0ZSB0aGUgcHJveHkKKyAgICAgICAgIC0g
Zm9yY2UgdGhlIGNvbnRleHQgdG8gYmUgbG9zdAorICAgICAgICAgLSBub3RpY2UgYSB0aW1lb3V0
IGFuZCBmb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0CisKKyAgICAgICAgd2hpbGUgdGhlIEdQ
VSBwcm9jZXNzIGNhbm5vdCBrbm93IHRoaXMuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIG1pZ2h0
CisgICAgICAgIGFscmVhZHkgaGF2ZSBzZW50IG1lc3NhZ2VzIHRvIHRoZSBQcm94eS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkpOgorCisg
ICAgICAgIExpc3RlbiB0byBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IG5vdGlmaWNhdGlv
bnMgYWJvdXQKKyAgICAgICAgY29ubmVjdGlvbiBjbG9zdXJlLiBXaGVuIHRoZSBjb25uZWN0aW9u
IGNsb3NlcywgbWFyayB0aGUgY29udGV4dCBvYmplY3QKKyAgICAgICAgbG9zdC4KKworICAgICAg
ICBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIEdQVVByb2Nlc3NDb25uZWN0aW9uIHNvIHRoYXQgd2hl
biB0aGUgY29ubmVjdGlvbgorICAgICAgICBpcyBzaHV0IGRvd24gYW5kIG5ldyBvbmUgaXMgaW5z
dGFudGlhdGVkLCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5CisgICAgICAgIGRlc3RydWN0
aW9uIGxvZ2ljIHdpbGwgY29ycmVjdGx5IHJlZmVyIHRvIHRoZSBvbmUgaXQgd2FzIHVzaW5nLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnJlc2hhcGUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwcmVwYXJl
Rm9yRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojpub3RpZnlNYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzeW50aGVzaXplR0xFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEVycm9y
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FzQ3Jl
YXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondh
c0xvc3QpOgorCisgICAgICAgIFdoZW4gdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXBwZW5zLCBk
aXNjb25uZWN0IHdpdGgKKyAgICAgICAgdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondhc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptYXJrQ29udGV4
dExvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3
YWl0VW50aWxJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorCisgICAgICAgIFdo
ZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLCBtYXJrIHRoZSBjb250ZXh0IG9iamVjdAorICAgICAg
ICBsb3N0LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlv
bnNHZW5lcmF0ZWQuY3BwOgorCisgICAgICAgIENoYW5nZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb2Rl
LWdlbmVyYXRvciB3cnQgaGFuZGxpbmcgdGltZW91dHMgZnJvbSB0aGUgc2VuZHMuCisKIDIwMjEt
MDItMDQgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTihyMjY3NzYzKTogW0dUS11bV1BFXSBCcm9rZW4gbWFpbiB0aHJlYWQgYXNzZXJ0aW9uIGlu
IE1lbW9yeVByZXNzdXJlTW9uaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggZDgw
NGQxZmE5OTk0ZDVmZmYzMTQzNjRkNTliZWY5NWViNDllYTk5OS4uNzliMzQ1OTZmYmYyZDBkZmM5
ODE4NjUxYmRjZmViNGIwYTBjODc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC01
Niw3ICs1Niw3IEBAIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHCiAgICAgbV9jb250ZXh0LT5hZGRD
bGllbnQoKnRoaXMpOwogICAgIFN0cmluZyBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRTdHJp
bmcoR3JhcGhpY3NDb250ZXh0R0w6OkVYVEVOU0lPTlMpOwogICAgIFN0cmluZyByZXF1ZXN0YWJs
ZUV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldFN0cmluZyhFeHRlbnNpb25zR0w6OlJFUVVFU1RB
QkxFX0VYVEVOU0lPTlNfQU5HTEUpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6Oldhc0NyZWF0ZWQoZXh0ZW5zaW9ucywgcmVxdWVzdGFibGVFeHRlbnNp
b25zKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Oldhc0NyZWF0ZWQodHJ1ZSwgZXh0ZW5zaW9u
cywgcmVxdWVzdGFibGVFeHRlbnNpb25zKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OwogfQogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
KCkKQEAgLTExNyw2ICsxMTcsMTYgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJl
cGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXAKIH0KICNlbmRp
ZgogCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpzeW50aGVzaXplR0xFcnJvcih1aW50
MzJfdCBlcnJvcikKK3sKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKHN0YXRpY19j
YXN0PEdDR0xlbnVtPihlcnJvcikpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpnZXRFcnJvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bV9jb250ZXh0LT5nZXRFcnJvcigpKSk7Cit9CisKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoU3RyaW5nJiYgZXh0ZW5zaW9uKQogewogICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoZXh0ZW5zaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgKaW5kZXggN2RiMGNmNTE4YWJmOWJiMjVhYjMzNmRkZGUwMzk5OTI1YWEw
NWYzMi4uMDAxNTlhYzhiNTg2YThiNjJhM2RkYTNhNTcwMDRlODgzZTE1NmQwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgKQEAgLTkwLDYgKzkwLDggQEAgcHJvdGVjdGVkOgogI2Vsc2UKICAgICB2
b2lkIHByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAjZW5k
aWYKKyAgICB2b2lkIGdldEVycm9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYm
KTsKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVycm9yKTsKIAogI2luY2x1
ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgiIC8vIE5PTElO
VAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggOTc3ZjVm
MTFjOGVjMTlkOWM1N2M3YmRjMjk2YWE1ZmJkZGJkNDU5Zi4uZDMyOGNkMWNjZDYyMWIwNWFjMjgz
MThlNjI1YTdiYTcyZGNjNGExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNz
YWdlcy5pbgpAQCAtMzQsOSArMzQsMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wgTm90UmVmQ291bnRlZCB7CiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVuc2lvbkVu
YWJsZWQoU3RyaW5nIGV4dGVuc2lvbikKICAgICB2b2lkIE5vdGlmeU1hcmtDb250ZXh0Q2hhbmdl
ZCgpCisgICAgdm9pZCBTeW50aGVzaXplR0xFcnJvcih1aW50MzJfdCBlcnJvcikKKyAgICB2b2lk
IEdldEVycm9yKCkgLT4gKHVpbnQzMl90IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwogCiAgICAg
dm9pZCBTZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkKLSAgICB2b2lkIFN5bnRoZXNpemVHTEVy
cm9yKHVpbnQzMl90IGVycm9yKQogICAgIHZvaWQgTW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkgLT4gKGJvb2wgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBBY3RpdmVU
ZXh0dXJlKHVpbnQzMl90IHRleHR1cmUpCiAgICAgdm9pZCBBdHRhY2hTaGFkZXIodWludDMyX3Qg
cHJvZ3JhbSwgdWludDMyX3Qgc2hhZGVyKQpAQCAtOTksNyArMTAwLDYgQEAgbWVzc2FnZXMgLT4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UmVmQ291bnRlZCB7CiAgICAgdm9pZCBHZXRJbnRl
Z2VyNjRpKHVpbnQzMl90IHBuYW1lLCB1aW50MzJfdCBpbmRleCkgLT4gKGludDY0X3QgcmV0dXJu
VmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBHZXRQcm9ncmFtaSh1aW50MzJfdCBwcm9ncmFt
LCB1aW50MzJfdCBwbmFtZSkgLT4gKGludDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAg
ICAgdm9pZCBHZXRCb29sZWFudih1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXplKSAt
PiAoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPiB2YWx1ZSkgU3luY2hyb25vdXMKLSAgICB2b2lk
IEdldEVycm9yKCkgLT4gKHVpbnQzMl90IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwogICAgIHZv
aWQgR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVp
bnQzMl90IGF0dGFjaG1lbnQsIHVpbnQzMl90IHBuYW1lKSAtPiAoaW50MzJfdCByZXR1cm5WYWx1
ZSkgU3luY2hyb25vdXMKICAgICB2b2lkIEdldFByb2dyYW1JbmZvTG9nKHVpbnQzMl90IGFyZzAp
IC0+IChTdHJpbmcgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgcG5hbWUpIC0+IChpbnQz
Ml90IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJh
dGVkLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaAppbmRleCAxNzY0ODc1MzQ4OGY0YjBiM2E1ZTYw
ZTc5MmZlZmU3YTgyYjIxZTU1Li5iZGU3NmY5YmU3ZThlZjBjNTAyMWNhNzQwMDM1OTljMGFmYzRk
N2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5l
cmF0ZWQuaApAQCAtMjksMTAgKzI5LDYgQEAKICAgICB7CiAgICAgICAgIG1fY29udGV4dC0+c2V0
RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpOwogICAgIH0KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVy
cm9yKHVpbnQzMl90IGVycm9yKQotICAgIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7Ci0gICAgfQogICAgIHZvaWQgbW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwpAQCAtMzIxLDEyICszMTcs
NiBAQAogICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4ocmVpbnRlcnBy
ZXRfY2FzdDxib29sKj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQotICAg
IHZvaWQgZ2V0RXJyb3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi0gICAgewotICAgICAgICBHQ0dMZW51bSByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEVycm9yKCk7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKLSAgICB9CiAgICAgdm9pZCBnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXR0YWNo
bWVudCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0g
eyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcAppbmRleCBhMjkzMDdmNzBiNmVkZjdmODQ5MzZlZGE2ZGJjZmI4ZGIzYTZk
MDA3Li5jZTQwNzk4MmJlOGY3ZTY3YjJlOWFjZDNkM2Y1MTU0OGI5YmE2M2I4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNw
cApAQCAtNjcsNiArNjcsMTAgQEAKICNpbmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1l
c3NhZ2VzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5TWVzc2FnZXMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xNjgsNyArMTcyLDE2IEBAIGJv
b2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZgotICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7CisgICAgaWYgKG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBTa2lwIG1lc3NhZ2VzIGludGVuZGVkIGZvciBhbHJlYWR5IHJlbW92ZWQgbWVzc2FnZVJlY2Vp
dmVyTWFwKCkgZGVzdGluYXRpb25zLgorI2lmIEVOQUJMRShXRUJHTCkKKyAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5j
b2RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCmluZGV4IDE3
ZGYyZGJkNmYxN2EzZTZmNjIzOTYxYWVlMjMyYWNmZWIxMjE1YTMuLmY0ZmJlY2JhOTU4MTZlZDAy
MzU4NDBkZDVmNzRkZGNkNDdlODJlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5LmNwcApAQCAtNDUsNDkgKzQ1LDQyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eT4gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYg
YXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHkoYXR0cmlidXRlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLCBhdHRyaWJ1dGVzKSk7CiB9CiAKLVJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoY29uc3QgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRycykKK1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIGdwdVBy
b2Nlc3NDb25uZWN0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJz
KQogICAgIDogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UoYXR0cnMpCisgICAgLCBt
X2dwdVByb2Nlc3NDb25uZWN0aW9uKCZncHVQcm9jZXNzQ29ubmVjdGlvbikKIHsKLSAgICBJUEM6
Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAo
KTsKLSAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVHcmFwaGljc0NvbnRleHRH
TChhdHRycywgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpLCAwKTsKKyAgICBtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uLT5hZGRDbGllbnQoKnRoaXMpOworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgY29ubmVj
dGlvbigpLnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZUdy
YXBoaWNzQ29udGV4dEdMKGF0dHJzLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciksIDAp
OwogfQogCiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp+UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eSgpCiB7Ci0gICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNl
aXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7Ci0gICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7Ci0gICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6UmVsZWFzZUdyYXBoaWNzQ29udGV4dEdMKG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKSwgMCk7CisgICAgZGlzY29ubmVjdCgpOwogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIHBsYXRmb3JtU3dhcENoYWluKCkucmVjeWNsZUJ1ZmZlcigpOwogI2VuZGlmCiB9CiAK
LUlQQzo6Q29ubmVjdGlvbiogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Ci19Ci0KLXVp
bnQ2NF90IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIudG9VSW50NjQoKTsKLX0KLQogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKICAgICBtX2N1
cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlJlc2hhcGUod2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVz
aGFwZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6cHJlcGFyZUZvckRpc3BsYXkoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBNYWNoU2VuZFJpZ2h0IGRp
c3BsYXlCdWZmZXJTZW5kUmlnaHQ7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5OjpSZXBseShkaXNwbGF5QnVmZmVyU2VuZFJp
Z2h0KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVw
bHkoZGlzcGxheUJ1ZmZlclNlbmRSaWdodCkpOwogICAgIGF1dG8gZGlzcGxheUJ1ZmZlciA9IElP
U3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKGRpc3BsYXlCdWZmZXJTZW5kUmln
aHQpLCBzUkdCQ29sb3JTcGFjZVJlZigpKTsKICAgICBpZiAoZGlzcGxheUJ1ZmZlcikgewogICAg
ICAgICAvLyBDbGFpbSBpbiB0aGUgV2ViUHJvY2VzcyBvd25lcnNoaXAgb2YgdGhlIElPU3VyZmFj
ZSBjb25zdHJ1Y3RlZCBieSB0aGUgR1BVUHJvY2VzcyBzbyB0aGF0IEpldHNhbSBrbm93cyB3aGlj
aCBwcm9jZXNzZXMgdG8ga2lsbC4KQEAgLTk4LDE5ICs5MSwyMyBAQCB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnByZXBhcmVGb3JEaXNwbGF5KCkKICAgICAgICAgc2MucHJlc2Vu
dCh7IFdURk1vdmUoZGlzcGxheUJ1ZmZlciksIG51bGxwdHIgfSk7CiAgICAgfQogI2Vsc2UKLSAg
ICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JE
aXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRp
c3BsYXk6OlJlcGx5KCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JE
aXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRp
c3BsYXk6OlJlcGx5KCkpOwogI2VuZGlmCiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmVuc3VyZUV4dGVuc2lvbkVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoZXh0ZW5zaW9uKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6RW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChleHRlbnNpb24pKTsKIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5Ojpub3RpZnlNYXJrQ29udGV4dENoYW5nZWQoKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpOb3RpZnlNYXJrQ29udGV4
dENoYW5nZWQoKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Tm90aWZ5TWFya0NvbnRleHRDaGFuZ2VkKCkpOwogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnNpbXVsYXRlQ29udGV4dENoYW5nZWQoKQpA
QCAtMTM1LDM5ICsxMzIsOTAgQEAgUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3YXNDcmVh
dGVkKFN0cmluZyYmIGF2YWlsYWJsZUV4dGVuc2lvbnMsIFN0cmluZyYmIHJlcXVlc3RlZEV4dGVu
c2lvbnMpCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnN5bnRoZXNpemVHTEVy
cm9yKEdDR0xlbnVtIGVycm9yKQogewotICAgIGlmIChtX2RpZEluaXRpYWxpemUpIHsKLSAgICAg
ICAgLy8gSW5pdGlhbGl6YXRpb24gdGltZWQgb3V0IGJlZm9yZSwgc28gbG9zZSB0aGUgY29udGV4
dCBub3cuCi0gICAgICAgIHdhc0xvc3QoKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6U3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGluaXRpYWxpemUoYXZhaWxhYmxlRXh0ZW5zaW9ucywgcmVxdWVzdGVkRXh0ZW5zaW9ucyk7Cisg
ICAgbV9lcnJvcldoZW5Db250ZXh0SXNMb3N0ID0gZXJyb3I7Cit9CisKK0dDR0xlbnVtIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IDA7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0RXJyb3IoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRFcnJv
cjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgd2FzTG9zdCgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGVudW0+KHJl
dHVyblZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9lcnJvcldoZW5D
b250ZXh0SXNMb3N0LCBOT19FUlJPUik7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6d2FzQ3JlYXRlZChib29sIGRpZFN1Y2NlZWQsIFN0cmluZyYmIGF2YWlsYWJsZUV4
dGVuc2lvbnMsIFN0cmluZyYmIHJlcXVlc3RlZEV4dGVuc2lvbnMpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGlkU3VjY2VlZCkgeworICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NF
UlQoIW1fZGlkSW5pdGlhbGl6ZSk7CiAgICAgbV9kaWRJbml0aWFsaXplID0gdHJ1ZTsKKyAgICBp
bml0aWFsaXplKGF2YWlsYWJsZUV4dGVuc2lvbnMsIHJlcXVlc3RlZEV4dGVuc2lvbnMpOwogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondhc0xvc3QoKQogewotICAgIGZv
ciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVu
dC0+Zm9yY2VDb250ZXh0TG9zdCgpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtYXJrQ29udGV4dExvc3QoKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp3YXNDaGFuZ2VkKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzKSkKICAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZp
Y2F0aW9uKCk7CiB9CiAKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWFya0Nv
bnRleHRMb3N0KCkKK3sKKyAgICBkaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRM
b3N0KCk7Cit9CisKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FpdFVudGls
SW5pdGlhbGl6ZWQoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVy
bjsKICAgICBpZiAobV9kaWRJbml0aWFsaXplKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmPElQ
Qzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwotICAgIGlmIChjb25uZWN0aW9u
LT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6V2FzQ3JlYXRlZD4obV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIs
IDEwX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VB
cnJpdmVzKSkKKyAgICBpZiAoY29ubmVjdGlvbigpLndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0
ZWx5PE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpXYXNDcmVhdGVkPiht
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgZGVmYXVsdFNlbmRUaW1lb3V0KSkKICAgICAg
ICAgcmV0dXJuOwotICAgIC8vIFRpbWVkIG91dCwgc28gcmVwb3J0IGluaXRpYWxpemVkIHdpdGgg
ZHVtbXkgZGF0YS4gV2Ugc2hvdWxkIGxvc2UgdGhlIGNvbnRleHQuCi0gICAgd2FzQ3JlYXRlZCgi
IiwgIiIpOwotICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1hcmsgdGhlIGNvbnRleHQgYXMgbG9zdCwg
YnV0IGl0J3Mgbm90IHNhZmUgdG8gZm9yY2UgbG9zdCBpbiB0aGlzIGNhbGwgc3RhY2suCisgICAg
bWFya0NvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpCit7
CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1hcmtDb250ZXh0TG9zdCgpOwor
fQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRpc2Nvbm5lY3QoKQorewor
ICAgIGlmIChtX2dwdVByb2Nlc3NDb25uZWN0aW9uKSB7CisgICAgICAgIGF1dG8gZ3B1UHJvY2Vz
c0Nvbm5lY3Rpb24gPSBzdGQ6OmV4Y2hhbmdlKG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24sIG51bGxw
dHIpOworICAgICAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVz
c2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VHcmFwaGljc0NvbnRleHRH
TChtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciksIDApOworICAgICAgICBncHVQcm9jZXNz
Q29ubmVjdGlvbi0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICBn
cHVQcm9jZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICB9CisgICAgQVNT
RVJUKGlzQ29udGV4dExvc3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAppbmRleCBlNTAxYmRiMjExZmM5NzNlNWY1
Nzk5MmJhMDBjZTliNjExMTdmNzY3Li44NTczNzk5MWJkNGRmMzYzNzBjNjBlMGY2NTg3MDMxZGVk
Nzg1MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaApAQCAtMjcs
MTkgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkK
IAorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHlCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgogCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBXZWIgcHJvY2VzcyBzaWRlIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dEdMIGludGVyZmFjZS4gVGhlIGltcGxlbWVudGF0
aW9uCkBAIC00NywxOCArNDYsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTCBpbiBHUFUgcHJvY2Vzcy4KIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBs
YXJnZWx5IGdlbmVyYXRlZCBieSBydW5uaW5nIFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13
ZWJnbC4KIGNsYXNzIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgZmluYWwKLSAgICA6IHB1
YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKLSAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5PgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHJpdmF0ZSBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYpOwogICAgIH5SZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5KCkgZmluYWw7CiAKLSAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIgb3ZlcnJpZGVzLgotICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBmaW5hbDsK
LSAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IGZpbmFsOwot
CiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgb3ZlcnJpZGVzLgogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKQEAg
LTcyLDEwICs2NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhXZWJDb3JlOjpJbWFnZUJ1ZmZlciopIGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CiAg
ICAgdm9pZCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXIqKSBmaW5hbDsKKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKSBm
aW5hbDsKKyAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOwogCiAgICAgLy8gRnVuY3Rpb25z
IHdpdGggYSBnZW5lcmF0ZWQgaW1wbGVtZW50YXRpb24uIFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGdl
bmVyYXRlLWdwdXAtd2ViZ2wgc2NyaXB0LgogICAgIHZvaWQgc2V0RmFpbE5leHRHUFVTdGF0dXND
aGVjaygpIGZpbmFsOwotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3Ip
IGZpbmFsOwogICAgIGJvb2wgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkgZmluYWw7
CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpIGZpbmFsOwogICAgIHZv
aWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpIGZpbmFsOwpAQCAtMTM4LDcgKzEzMyw2IEBAIHB1YmxpYzoKICAgICBHQ0dMaW50
NjQgZ2V0SW50ZWdlcjY0aShHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpIGZpbmFsOwog
ICAgIEdDR0xpbnQgZ2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51
bSBwbmFtZSkgZmluYWw7CiAgICAgdm9pZCBnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGJvb2xlYW4+IHZhbHVlKSBmaW5hbDsKLSAgICBHQ0dMZW51bSBnZXRFcnJvcigp
IGZpbmFsOwogICAgIEdDR0xpbnQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKSBmaW5h
bDsKICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBhcmcwKSBm
aW5hbDsKICAgICBHQ0dMaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CkBAIC0zMzMsMTQgKzMyNywzOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2Ugb3ZlcnJpZGVzLgog
ICAgIHZvaWQgd2FpdFVudGlsSW5pdGlhbGl6ZWQoKSBmaW5hbDsKIAorICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpIGNvbnN0IHsgcmV0dXJuICFtX2dwdVByb2Nlc3NDb25uZWN0aW9uOyB9CisgICAg
dm9pZCBtYXJrQ29udGV4dExvc3QoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgU2Vjb25kcyBkZWZh
dWx0U2VuZFRpbWVvdXQgPSAzMF9zOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9v
bCBzZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29ubmVjdGlvbigpLnNlbmQoV1RG
TW92ZShtZXNzYWdlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIudG9VSW50NjQoKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIElQQzo6Q29ubmVjdGlvbjo6U2VuZFN5bmNSZXN1bHQgc2VuZFN5bmMoVCYmIG1lc3NhZ2Us
IHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHkpCisgICAgeworICAgICAgICByZXR1cm4gY29ubmVj
dGlvbigpLnNlbmRTeW5jKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUocmVwbHkpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpLCBkZWZhdWx0U2VuZFRpbWVvdXQpOwor
ICAgIH0KKyAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCk7IH0KKwogcHJpdmF0ZToKICAgICAv
LyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KLSAgICB2b2lkIHdhc0NyZWF0ZWQoU3RyaW5nJiYg
YXZhaWxhYmxlRXh0ZW5zaW9ucywgU3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9ucyk7CisgICAg
dm9pZCB3YXNDcmVhdGVkKGJvb2wgZGlkU3VjY2VlZCwgU3RyaW5nJiYgYXZhaWxhYmxlRXh0ZW5z
aW9ucywgU3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9ucyk7CiAgICAgdm9pZCB3YXNMb3N0KCk7
CiAgICAgdm9pZCB3YXNDaGFuZ2VkKCk7CiAKLSAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYpOworICAgIC8v
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFsOworCisg
ICAgdm9pZCBkaXNjb25uZWN0KCk7CisKKyAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
KEdQVVByb2Nlc3NDb25uZWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzJik7CisgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24qIG1fZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb247CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemUgeyBmYWxzZSB9OworICAgIEdDR0xlbnVt
IG1fZXJyb3JXaGVuQ29udGV4dElzTG9zdCA9IE5PX0VSUk9SOworCiAgICAgR3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIHsgR3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWYyYjMyYjJi
YzEwMTBlZjhlY2QwYWY1Nzc3YWJkNGZhMDhhM2M5MC4uYTdjNjQxMmFjOTQ2ZTI1OGNlMDEzOGJj
NDdiYzM4NjIxOTUwMjFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOSArMjMsOSBAQAogI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5IE5vdFJlZkNvdW50ZWQgewotICAgIHZvaWQgV2FzQ3JlYXRlZChTdHJpbmcg
YXZhaWxhYmxlRXh0ZW5zaW9ucywgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5zaW9ucykKKyAgICB2
b2lkIFdhc0NyZWF0ZWQoYm9vbCBkaWRTdWNjZWVkLCBTdHJpbmcgYXZhaWxhYmxlRXh0ZW5zaW9u
cywgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5zaW9ucykKICAgICB2b2lkIFdhc0xvc3QoKQotICAg
IHZvaWQgV2FzQ2hhbmdlZCgpOworICAgIHZvaWQgV2FzQ2hhbmdlZCgpCiB9CiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1
bmN0aW9uc0dlbmVyYXRlZC5jcHAKaW5kZXggNTIzMTU5ODE0Zjg2NWEzNTMyNjBiNGU4MWQzNjU4
YTViODRmMGEzNC4uMGE3MzE1NmFiODM3YWI5YWUxYjIxNDZmZDBkNmZiZDRmY2M0MTY0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlG
dW5jdGlvbnNHZW5lcmF0ZWQuY3BwCkBAIC0zMiw0MDcgKzMyLDY2NCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzZXRGYWlsTmV4dEdQ
VVN0YXR1c0NoZWNrKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6U2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7Ci19Ci0KLXZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c3ludGhl
c2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlN5bnRoZXNpemVHTEVycm9yKGVycm9yKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpTZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBib29sIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiB7CiAgICAg
Ym9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dDo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBf
cyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpNb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpNb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Q6OlJlcGx5KHJldHVyblZhbHVlKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlciksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcikpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0
IGFyZzAsIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRBdHRyaWJMb2NhdGlvbihhcmcw
LCBpbmRleCwgbmFtZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZEF0dHJpYkxvY2F0aW9uKGFyZzAsIGlu
ZGV4LCBuYW1lKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Ymlu
ZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZEJ1ZmZlcih0YXJnZXQs
IGFyZzEpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRCdWZmZXIodGFyZ2V0LCBhcmcxKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhcmcxKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhcmcxKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGFyZzEpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBhcmcxKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGFyZzEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkJpbmRUZXh0dXJlKHRhcmdldCwgYXJnMSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFRl
eHR1cmUodGFyZ2V0LCBhcmcxKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNs
YW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51
bSBtb2RlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpC
bGVuZEVxdWF0aW9uKG1vZGUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRXF1YXRpb24obW9kZSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJsZW5kRXF1YXRpb25TZXBh
cmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZSht
b2RlUkdCLCBtb2RlQWxwaGEpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZSht
b2RlUkdCLCBtb2RlQWxwaGEpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmxlbmRGdW5jKHNmYWN0
b3IsIGRmYWN0b3IpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNy
Y0FscGhhLCBkc3RBbHBoYSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBHQ0dMZW51bSBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKICAgICB1
aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNoZWNrRnJhbWVidWZmZXJT
dGF0dXModGFyZ2V0KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhcihHQ0dM
Yml0ZmllbGQgbWFzaykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6Q2xlYXIobWFzayksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXIobWFzaykpOworICAgICAgICBp
ZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByZWQs
IEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJDb2xvcihyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJEZXB0aChkZXB0aCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Q2xlYXJEZXB0aChkZXB0aCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyU3RlbmNpbChzKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhclN0
ZW5jaWwocykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvbG9y
TWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVl
LCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q29sb3JNYXNrKHN0YXRpY19jYXN0PGJvb2w+KHJlZCksIHN0YXRpY19jYXN0
PGJvb2w+KGdyZWVuKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oYmx1ZSksIHN0YXRpY19jYXN0PGJvb2w+
KGFscGhhKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29sb3JNYXNrKHN0YXRpY19jYXN0PGJvb2w+KHJlZCks
IHN0YXRpY19jYXN0PGJvb2w+KGdyZWVuKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oYmx1ZSksIHN0YXRp
Y19jYXN0PGJvb2w+KGFscGhhKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21waWxlU2hhZGVyKGFyZzApLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNvbXBpbGVTaGFkZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZUJ1ZmZlcigpCiB7CiAgICAgdWludDMyX3Qg
cmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDcmVhdGVCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDcmVhdGVCdWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6Q3JlYXRlQnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Q3JlYXRlQnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpj
cmVhdGVGcmFtZWJ1ZmZlcigpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVGcmFt
ZWJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUZyYW1l
YnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
LCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0
ZUZyYW1lYnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRl
RnJhbWVidWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNy
ZWF0ZVByb2dyYW0oKQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbSgp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVByb2dyYW06OlJlcGx5
KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbSgpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVByb2dyYW06OlJlcGx5KHJl
dHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQbGF0Zm9ybUdMT2Jq
ZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7
CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVSZW5kZXJidWZmZXIoKSwgTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVSZW5kZXJidWZmZXI6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUmVuZGVyYnVmZmVyKCksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUmVuZGVyYnVmZmVyOjpSZXBs
eShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3
YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1H
TE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVTaGFkZXIoR0NHTGVu
dW0gYXJnMCkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNoYWRlcihhcmcwKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVTaGFkZXI6OlJlcGx5KHJl
dHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2hhZGVyKGFyZzApLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNoYWRlcjo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmpl
Y3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAg
dWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlVGV4dHVyZTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q3JlYXRlVGV4dHVyZTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3VsbEZhY2UobW9kZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3VsbEZhY2UobW9k
ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZUJ1ZmZl
cihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkRlbGV0ZUJ1ZmZlcihhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVC
dWZmZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNM
b3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRl
bGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlRnJhbWVidWZmZXIoYXJnMCksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6RGVsZXRlRnJhbWVidWZmZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBhcmcw
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVQ
cm9ncmFtKGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVByb2dyYW0oYXJnMCkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcihhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVS
ZW5kZXJidWZmZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVNoYWRlcihhcmcwKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpEZWxldGVTaGFkZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVUZXh0dXJlKGFy
ZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVRleHR1cmUoYXJnMCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0aEZ1bmMoZnVuYyks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RGVwdGhGdW5jKGZ1bmMpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVwdGhNYXNrKHN0YXRpY19jYXN0
PGJvb2w+KGZsYWcpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0aE1hc2soc3RhdGljX2Nhc3Q8Ym9vbD4o
ZmxhZykpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZXB0aFJh
bmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVwdGhSYW5nZSh6TmVhciwgekZhciksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6RGVwdGhSYW5nZSh6TmVhciwgekZhcikpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzAs
IFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RGV0YWNoU2hhZGVyKGFyZzAsIGFyZzEpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRl
dGFjaFNoYWRlcihhcmcwLCBhcmcxKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkRpc2FibGUoY2FwKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEaXNhYmxl
KGNhcCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUs
IEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdFbGVtZW50cyht
b2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpl
bmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpFbmFibGUoY2FwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbmFibGUoY2FwKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmZpbmlzaCgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkZpbmlzaCgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZpbmlzaCgpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpmbHVzaCgpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZsdXNoKCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Rmx1c2goKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBH
Q0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMykKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGFyZzMpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
cmVuZGVyYnVmZmVydGFyZ2V0LCBhcmczKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMywg
R0NHTGludCBsZXZlbCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQs
IGFyZzMsIGxldmVsKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHRleHRhcmdldCwgYXJnMywgbGV2ZWwpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5Ojpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RnJvbnRGYWNlKG1vZGUpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkZyb250RmFjZShtb2RlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZW5lcmF0ZU1pcG1hcCh0YXJn
ZXQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdlbmVyYXRlTWlwbWFwKHRhcmdldCkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBib29sIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBhcmcyKQogewogICAgIGJv
b2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgpLCBNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZUF0dHJpYjo6UmVwbHkocmV0dXJuVmFs
dWUsIGFyZzIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVBdHRyaWIocHJvZ3Jh
bSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZUF0
dHJpYjo6UmVwbHkocmV0dXJuVmFsdWUsIGFyZzIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CiB9CiAKIGJvb2wgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0QWN0aXZlVW5pZm9y
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBh
cmcyKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGlu
ZGV4KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3Jt
OjpSZXBseShyZXR1cm5WYWx1ZSwgYXJnMiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
LCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFj
dGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm06OlJlcGx5KHJldHVyblZhbHVlLCBhcmcyKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJMb2NhdGlvbihh
cmcwLCBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJM
b2NhdGlvbjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRB
dHRyaWJMb2NhdGlvbihhcmcwLCBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpHZXRBdHRyaWJMb2NhdGlvbjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
Z2V0QnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewog
ICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEJ1ZmZlclBhcmFtZXRlcmk6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QnVmZmVyUGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRCdWZmZXJQYXJhbWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKIH0KIAogU3RyaW5nIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omdl
dFN0cmluZyhHQ0dMZW51bSBuYW1lKQogewogICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN0cmlu
ZyhuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTdHJpbmc6OlJl
cGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3RyaW5nKG5hbWUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN0cmluZzo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxH
Q0dMZmxvYXQ+IHZhbHVlKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+IHZhbHVl
UmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZsb2F0djo6UmVwbHkodmFsdWVSZXBseSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2VuZFJlc3Vs
dCkKLSAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5i
dWZTaXplICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZsb2F0djo6UmVwbHkodmFsdWVSZXBseSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEo
KSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihmbG9hdCkpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NH
TFNwYW48R0NHTGludD4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PiB2YWx1ZVJlcGx5OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlLmJ1ZlNpemUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVnZXJ2OjpSZXBseSh2
YWx1ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlm
IChzZW5kUmVzdWx0KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRh
KCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOwotICAgIAorICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlLmJ1
ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVnZXJ2OjpS
ZXBseSh2YWx1ZVJlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IHdhc0xvc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEs
IHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKGludDMyX3QpKTsKKyAg
ICB9CiB9CiAKIEdDR0xpbnQ2NCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRJbnRl
Z2VyNjQoR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaW50NjRfdCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVn
ZXI2NChwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdl
cjY0OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAx
MF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVn
ZXI2NChwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdl
cjY0OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMaW50
NjQ+KHJldHVyblZhbHVlKTsKIH0KIAogR0NHTGludDY0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmdldEludGVnZXI2NGkoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4KQogewog
ICAgIGludDY0X3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2VyNjRpKHBuYW1lLCBpbmRleCksIE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcjY0aTo6UmVwbHkocmV0dXJu
VmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2VyNjRpKHBuYW1lLCBpbmRl
eCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcjY0aTo6UmVw
bHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAg
d2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGludDY0PihyZXR1
cm5WYWx1ZSk7CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0
UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAg
ICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFByb2dyYW1pOjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFByb2dyYW1pKHByb2dyYW0sIHBuYW1lKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRQcm9ncmFtaTo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFu
PEdDR0xib29sZWFuPiB2YWx1ZSkKIHsKICAgICBJUEM6OkFycmF5UmVmZXJlbmNlPGJvb2w+IHZh
bHVlUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCb29sZWFudihwbmFtZSwgdmFsdWUuYnVmU2l6ZSksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0Qm9vbGVhbnY6OlJlcGx5KHZhbHVl
UmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNl
bmRSZXN1bHQpCi0gICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwg
dmFsdWUuYnVmU2l6ZSAqIHNpemVvZihib29sKSk7Ci0gICAgCi19Ci0KLUdDR0xlbnVtIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEVycm9yKCkKLXsKLSAgICB1aW50MzJfdCByZXR1
cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEVycm9yKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
RXJyb3I6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIs
IDEwX3MpOwotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZS5idWZTaXplKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCb29sZWFudjo6UmVwbHkodmFsdWVS
ZXBseSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5
LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihib29sKSk7CisgICAgfQogfQogCiBHQ0dM
aW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpOjpS
ZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAK
IFN0cmluZyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UHJvZ3Jh
bUluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UHJv
Z3JhbUluZm9Mb2c6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0UHJvZ3JhbUluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0UHJvZ3JhbUluZm9Mb2c6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOwogfQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkK
IHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJn
ZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaTo6UmVwbHko
cmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xpbnQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U2hhZGVyaShQbGF0Zm9ybUdMT2JqZWN0IGFy
ZzAsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJp
KGFyZzAsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFk
ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAx
MF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRl
cmkoYXJnMCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNo
YWRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVy
SW5mb0xvZyhhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFk
ZXJJbmZvTG9nOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFNoYWRlckluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0U2hhZGVySW5mb0xvZzo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKQEAgLTQ0MCwxMDI0ICs2OTcsMTc0OSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJU
eXBlLAogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdCwgMj4gcmFuZ2VSZXBseTsK
ICAgICBpbnQzMl90IHByZWNpc2lvblJlcGx5ID0geyB9OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclByZWNpc2lvbkZvcm1hdDo6UmVwbHkocmFuZ2VS
ZXBseSwgcHJlY2lzaW9uUmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBf
cyk7Ci0gICAgaWYgKHNlbmRSZXN1bHQpIHsKLSAgICAgICAgbWVtY3B5KHJhbmdlLmRhdGEsIHJh
bmdlUmVwbHkuZGF0YSgpLCByYW5nZS5idWZTaXplICogc2l6ZW9mKGludDMyX3QpKTsKLSAgICAg
ICAgaWYgKHByZWNpc2lvbikKLSAgICAgICAgICAgICpwcmVjaXNpb24gPSBwcmVjaXNpb25SZXBs
eTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ6OlJlcGx5KHJhbmdl
UmVwbHksIHByZWNpc2lvblJlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkocmFu
Z2UuZGF0YSwgcmFuZ2VSZXBseS5kYXRhKCksIHJhbmdlLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJf
dCkpOworICAgICAgICAgICAgaWYgKHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAqcHJlY2lz
aW9uID0gcHJlY2lzaW9uUmVwbHk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIFN0cmluZyBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVj
dCBhcmcwKQogewogICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclNvdXJjZShhcmcwKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJTb3VyY2U6OlJlcGx5
KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVyU291cmNlKGFy
ZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclNvdXJjZTo6
UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xm
bG9hdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgZmxvYXQgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRU
ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldFRleFBhcmFtZXRlcmY6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUZXhQYXJhbWV0ZXJmOjpSZXBseShyZXR1cm5WYWx1
ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7Cisg
ICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogR0NHTGludCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpnZXRUZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUpCiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRleFBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VGV4UGFy
YW1ldGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRU
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldFRleFBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omdl
dFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9h
dD4gdmFsdWVSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5p
Zm9ybWZ2OjpSZXBseSh2YWx1ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIs
IDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwg
dmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoZmxvYXQpKTsKLSAgICAK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1mdihw
cm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0VW5pZm9ybWZ2OjpSZXBseSh2YWx1ZVJlcGx5KSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZT
aXplICogc2l6ZW9mKGZsb2F0KSk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQogewogICAgIElQQzo6QXJyYXlS
ZWZlcmVuY2U8aW50MzJfdD4gdmFsdWVSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1pdihwcm9n
cmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0VW5pZm9ybWl2OjpSZXBseSh2YWx1ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0KQotICAgICAgICBtZW1j
cHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2Yo
aW50MzJfdCkpOwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5idWZTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtaXY6OlJlcGx5KHZhbHVlUmVw
bHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5k
YXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRVbmlmb3JtdWl2KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTHVpbnQ+IHZhbHVl
KQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+IHZhbHVlUmVwbHk7Ci0gICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpHZXRVbmlmb3JtdWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5idWZTaXplKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtdWl2OjpSZXBseSh2YWx1
ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChz
ZW5kUmVzdWx0KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCks
IHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YodWludDMyX3QpKTsKLSAgICAKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRp
b24sIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFVuaWZvcm11aXY6OlJlcGx5KHZhbHVlUmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1j
cHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICB9CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtTG9jYXRpb24o
YXJnMCwgbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9y
bUxvY2F0aW9uOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFVuaWZvcm1Mb2NhdGlvbihhcmcwLCBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRVbmlmb3JtTG9jYXRpb246OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwogfQogCiBHQ0dMc2l6ZWlwdHIgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBw
bmFtZSkKIHsKICAgICB1aW50NjRfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFZlcnRleEF0dHJpYk9mZnNldChp
bmRleCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFZlcnRl
eEF0dHJpYk9mZnNldDo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRWZXJ0ZXhBdHRyaWJPZmZzZXQ6OlJlcGx5KHJldHVyblZhbHVl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xzaXplaXB0cj4ocmV0dXJuVmFsdWUpOwog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmhpbnQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBtb2RlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpIaW50KHRhcmdldCwgbW9kZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SGludCh0YXJnZXQs
IG1vZGUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c0J1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0J1ZmZl
cjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBf
cyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0J1ZmZlcihh
cmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0J1ZmZlcjo6UmVwbHko
cmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVy
blZhbHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNFbmFibGVk
KGNhcCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNFbmFibGVkOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzRW5hYmxlZChjYXApLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzRW5hYmxlZDo6UmVwbHkocmV0dXJu
VmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVl
KTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklz
RnJhbWVidWZmZXIoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNG
cmFtZWJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c0ZyYW1lYnVmZmVyKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklz
RnJhbWVidWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAg
ICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzUHJvZ3JhbShhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpJc1Byb2dyYW06OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6SXNQcm9ncmFtKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OklzUHJvZ3JhbTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBh
cmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1JlbmRlcmJ1ZmZlcihhcmcwKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1JlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0dXJu
VmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1JlbmRlcmJ1ZmZlcihhcmcwKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1JlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZh
bHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1No
YWRlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1NoYWRlcjo6
UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1NoYWRlcihhcmcw
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1NoYWRlcjo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZh
bHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0g
eyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNU
ZXh0dXJlKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzVGV4dHVy
ZTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBf
cyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1RleHR1cmUo
YXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUZXh0dXJlOjpSZXBs
eShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3
YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0
dXJuVmFsdWUpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmxpbmVX
aWR0aChHQ0dMZmxvYXQgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6TGluZVdpZHRoKGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkxpbmVXaWR0aChhcmcw
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bGlua1Byb2dyYW0o
UGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpMaW5rUHJvZ3JhbShhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpMaW5rUHJvZ3Jh
bShhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGl4ZWxT
dG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UG9seWdv
bk9mZnNldChmYWN0b3IsIHVuaXRzKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c2FtcGxlQ292ZXJh
Z2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgc3Rh
dGljX2Nhc3Q8Ym9vbD4oaW52ZXJ0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2FtcGxlQ292ZXJhZ2UodmFs
dWUsIHN0YXRpY19jYXN0PGJvb2w+KGludmVydCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgY29u
c3QgU3RyaW5nJiBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpTaGFkZXJTb3VyY2UoYXJnMCwgYXJnMSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2hhZGVyU291
cmNlKGFyZzAsIGFyZzEpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAg
d2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbEZ1
bmMoZnVuYywgcmVmLCBtYXNrKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsRnVuYyhmdW5jLCByZWYs
IG1hc2spKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzdGVuY2ls
RnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBH
Q0dMdWludCBtYXNrKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzdGVuY2lsTWFzayhHQ0dMdWludCBt
YXNrKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVu
Y2lsTWFzayhtYXNrKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsTWFzayhtYXNrKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzaykpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51
bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbE9wU2VwYXJhdGUoZmFj
ZSwgZmFpbCwgemZhaWwsIHpwYXNzKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMZmxvYXQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMWYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGZsb2F0IHgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm0xZihsb2NhdGlvbiwgeCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTFm
KGxvY2F0aW9uLCB4KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdh
c0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0x
ZnYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0
PGNvbnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50
IHgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZv
cm0xaShsb2NhdGlvbiwgeCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB4KSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTFpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+
KHYuZGF0YSksIHYuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0xaXYobG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQz
Ml90Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHkpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJmKGxvY2F0
aW9uLCB4LCB5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5p
Zm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0yZnYo
bG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMmkobG9j
YXRpb24sIHgsIHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0yaXYo
bG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBpbnQzMl90Kj4odi5kYXRhKSwgdi5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9y
bTJpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9j
YXN0PGNvbnN0IGludDMyX3QqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHopCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeiks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zZnYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZl
cmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1
ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVm
ZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5i
dWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZv
cm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2ko
bG9jYXRpb24sIHgsIHksIHopLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zaShsb2NhdGlvbiwgeCwg
eSwgeikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0z
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTNpdihsb2NhdGlv
biwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGlu
dDMyX3QqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2l2KGxv
Y2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgaW50MzJfdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NHTGZsb2F0IHcpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00Zihsb2NhdGlvbiwgeCwg
eSwgeiwgdyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTRmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00ZnYobG9jYXRpb24sIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2
LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGZ2KGxvY2F0aW9uLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
di5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTGludCB6LCBHQ0dMaW50IHcpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiB2KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlVuaWZvcm00aXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odi5kYXRhKSwgdi5idWZT
aXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm1N
YXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxi
b29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4odmFsdWUuZGF0YSksIHZhbHVlLmJ1ZlNpemUpKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bv
c2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4odmFsdWUuZGF0YSksIHZhbHVlLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlS
ZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZS5kYXRh
KSwgdmFsdWUuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8Zmxv
YXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZS5kYXRhKSwgdmFsdWUuYnVm
U2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3Jt
TWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8
Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlLmRhdGEpLCB2YWx1ZS5idWZTaXplKSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNw
b3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHZhbHVlLmRhdGEpLCB2YWx1ZS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBhcmcwKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVc2VQcm9ncmFt
KGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVzZVByb2dyYW0oYXJnMCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZh
bGlkYXRlUHJvZ3JhbShhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWYWxpZGF0ZVByb2dyYW0oYXJnMCkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjFm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHgpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlZlcnRleEF0dHJpYjFmKGluZGV4LCB4KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMZmxvYXQsIDE+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0LCAxPihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWVzLmRhdGEp
LCB2YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwg
SVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMT4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9h
dCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB4LCBHQ0dMZmxvYXQgeSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZl
cnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25z
dCBHQ0dMZmxvYXQsIDI+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNl
PGZsb2F0LCAyPihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWVzLmRhdGEpLCB2
YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9h
dCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHopCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeikpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRl
eCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAzPiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMz4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRy
aWIzZnYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDM+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQg
dykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4
QXR0cmliNGYoaW5kZXgsIHgsIHksIHosIHcpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjRm
KGluZGV4LCB4LCB5LCB6LCB3KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
ZmxvYXQsIDQ+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0
LCA0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMu
YnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxmbG9hdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVl
cy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBz
aXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3Ry
aWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3Rh
dGljX2Nhc3Q8Ym9vbD4obm9ybWFsaXplZCksIHN0cmlkZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUs
IHR5cGUsIHN0YXRpY19jYXN0PGJvb2w+KG5vcm1hbGl6ZWQpLCBzdHJpZGUsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Vmlld3Bv
cnQoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgYXJnMSwg
R0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJ1ZmZlckRhdGEwKHRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFyZzEpLCB1
c2FnZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6QnVmZmVyRGF0YTAodGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYXJnMSksIHVzYWdlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lk
PiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QnVmZmVyRGF0YTEodGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVp
bnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEu
YnVmU2l6ZSksIHVzYWdlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCdWZmZXJEYXRhMSh0YXJnZXQsIElQQzo6
QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSwgdXNhZ2UpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBvZmZzZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhf
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZT
aXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihvZmZzZXQpLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZWFkblBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQogewogICAgIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4gZGF0YVJlcGx5OwotICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVhZG5QaXhl
bHMwKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5idWZTaXplKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFkblBpeGVsczA6OlJlcGx5KGRhdGFS
ZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2Vu
ZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSwgZGF0YVJlcGx5LmRhdGEoKSwgZGF0
YS5idWZTaXplICogc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICAKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlYWRuUGl4ZWxzMCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6UmVhZG5QaXhlbHMwOjpSZXBseShkYXRhUmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtZW1jcHkoZGF0YS5kYXRhLCBkYXRhUmVwbHkuZGF0YSgpLCBkYXRhLmJ1ZlNpemUgKiBzaXpl
b2YodWludDhfdCkpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpSZWFkblBpeGVsczEoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVhZG5QaXhlbHMxKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNl
dCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOwor
ICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVs
cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4SW1h
Z2UyRDAodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpUZXhJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWlu
dDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzLmRhdGEpLCBwaXhl
bHMuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlMkQx
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlRleEltYWdlMkQxKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTJEMCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4ocGl4ZWxzLmRhdGEpLCBwaXhlbHMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRl
eFN1YkltYWdlMkQwKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0YSksIHBpeGVscy5idWZTaXplKSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTJEMSh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTJEMSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5k
YXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdlMkQw
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGlt
YWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTJEMSh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4SW1hZ2UyRDEo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1h
Z2VTaXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1Yklt
YWdlMkQwKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEp
LCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDEodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDEodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2Rl
LCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdBcnJheXNJ
bnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRy
YXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQo
R0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSwgcHJpbWNvdW50KSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpEcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpLCBwcmltY291bnQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dM
dWludCBkaXZpc29yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpW
ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIFBsYXRmb3JtR0xPYmpl
Y3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewog
ICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJyYXkoKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheTo6UmVwbHkocmV0dXJuVmFs
dWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheSgpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5OjpSZXBseShyZXR1
cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0
KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFy
ZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0
ZVZlcnRleEFycmF5KGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVZlcnRleEFycmF5KGFyZzAp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAg
IH0KIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklz
VmVydGV4QXJyYXkoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNW
ZXJ0ZXhBcnJheTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c1ZlcnRleEFycmF5KGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklz
VmVydGV4QXJyYXk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFZlcnRleEFycmF5
KGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRWZXJ0ZXhBcnJheShhcmcwKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0g
cmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwg
R0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIGFyZzQpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvcHlCdWZmZXJTdWJEYXRhKHJlYWRU
YXJnZXQsIHdyaXRlVGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVhZE9mZnNldCksIHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih3cml0ZU9mZnNldCksIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihh
cmc0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVU
YXJnZXQsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWFkT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHdyaXRlT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFyZzQpKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkK
IHsKICAgICBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+IGRhdGFSZXBseTsKLSAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSwg
ZGF0YS5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZm
ZXJTdWJEYXRhOjpSZXBseShkYXRhUmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1bHQpCi0gICAgICAgIG1lbWNweShkYXRhLmRhdGEs
IGRhdGFSZXBseS5kYXRhKCksIGRhdGEuYnVmU2l6ZSAqIHNpemVvZih1aW50OF90KSk7Ci0gICAg
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJTdWJE
YXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIGRhdGEuYnVmU2l6ZSks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QnVmZmVyU3ViRGF0YTo6UmVw
bHkoZGF0YVJlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdh
c0xvc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSwgZGF0
YVJlcGx5LmRhdGEoKSwgZGF0YS5idWZTaXplICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxpdEZyYW1lYnVmZmVyKEdD
R0xpbnQgc3JjWDAsIEdDR0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEs
IEdDR0xpbnQgZHN0WDAsIEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0
WTEsIEdDR0xiaXRmaWVsZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3Jj
WTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRl
ciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcmFt
ZWJ1ZmZlclRleHR1cmVMYXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBs
YXllcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmludmFsaWRh
dGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBh
dHRhY2htZW50cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6SW52YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50
MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRzLmRhdGEp
LCBhdHRhY2htZW50cy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SW52YWxpZGF0ZUZyYW1lYnVm
ZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRzLmRhdGEpLCBhdHRhY2htZW50cy5idWZTaXpl
KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmludmFsaWRhdGVT
dWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBh
dHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6SW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRzLmRh
dGEpLCBhdHRhY2htZW50cy5idWZTaXplKSwgeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6SW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRz
LmRhdGEpLCBhdHRhY2htZW50cy5idWZTaXplKSwgeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnJlYWRCdWZmZXIoR0NHTGVudW0g
c3JjKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFk
QnVmZmVyKHNyYyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVhZEJ1ZmZlcihzcmMpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBs
ZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNp
emVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFN0b3JhZ2UzRCh0YXJn
ZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4g
cGl4ZWxzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpU
ZXhJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1
ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2
ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4SW1hZ2UzRDEodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlM0QxKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNp
emVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0
IEdDR0x2b2lkPiBwaXhlbHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlRleFN1YkltYWdlM0QwKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxz
LmRhdGEpLCBwaXhlbHMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFN1YkltYWdlM0QwKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzLmRhdGEpLCBwaXhlbHMuYnVmU2l6ZSkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhTdWJJbWFnZTNEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGlu
dHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlRleFN1YkltYWdlM0QxKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTNEMSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0
LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xp
bnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6Q29weVRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9m
ZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29weVRleFN1YkltYWdl
M0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvbXBy
ZXNzZWRUZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNp
emVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFn
ZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGJvcmRlciwgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2VkVGV4SW1hZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4
SW1hZ2UzRDEodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTNEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNl
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZv
aWQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIElQQzo6
QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlM0QwKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRh
LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29t
cHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
aW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0Qx
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMSh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBp
bWFnZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xpbnQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpbnQzMl90IHJl
dHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0RnJhZ0RhdGFMb2NhdGlvbihwcm9ncmFtLCBuYW1lKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFnRGF0YUxvY2F0aW9uOjpSZXBseShyZXR1cm5W
YWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3Jh
bSwgbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhZ0RhdGFM
b2NhdGlvbjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTF1aShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVu
aWZvcm0xdWkobG9jYXRpb24sIHYwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVp
bnQgdjEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVu
aWZvcm0ydWkobG9jYXRpb24sIHYwLCB2MSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJ1aShsb2Nh
dGlvbiwgdjAsIHYxKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdh
c0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdD
R0x1aW50IHYyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtM3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3Jt
M3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00dWkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYz
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTF1aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0xdWl2KGxvY2F0
aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5p
Zm9ybTF1aXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTJ1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJ1
aXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
ZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVm
ZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oZGF0YS5k
YXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTR1aXYobG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0
cml4MngzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJy
YXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRh
dGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4MngzZnYobG9j
YXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8
ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1
ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9y
bU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NH
TFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4M3gyZnYobG9jYXRpb24sIHN0YXRpY19j
YXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpVbmlmb3JtTWF0cml4M3gyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRy
YW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRh
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3Jt
TWF0cml4Mng0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6
QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
LmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4Mng0ZnYo
bG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVu
Y2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRh
LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5p
Zm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRp
Y19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+
KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBk
YXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihk
YXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4M3g0
ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZl
cmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBk
YXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdh
c0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
dW5pZm9ybU1hdHJpeDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4NHgzZnYobG9jYXRpb24sIHN0
YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4NHgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJv
b2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliSTRpKGluZGV4LCB4
LCB5LCB6LCB3KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVy
dGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGludCwgND4g
dmFsdWVzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpW
ZXJ0ZXhBdHRyaWJJNGl2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3QsIDQ+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNp
emUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4LCBJUEM6OkFycmF5UmVm
ZXJlbmNlPGludDMyX3QsIDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHZhbHVl
cy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwg
R0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliSTR1aShpbmRleCwgeCwgeSwg
eiwgdyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliSTR1aShpbmRleCwgeCwgeSwgeiwgdykp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYkk0
dWl2KEdDR0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRy
aWJJNHVpdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdCwgND4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50MzJfdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlcy5k
YXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6
ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJp
YklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgc3RyaWRlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xl
bnVtIG1vZGUsIEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwg
R0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0YXJ0LCBl
bmQsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+IGJ1ZnMp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdCdWZm
ZXJzKElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihidWZzLmRhdGEpLCBidWZzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3
QnVmZmVycyhJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQzMl90Kj4oYnVmcy5kYXRhKSwgYnVmcy5idWZTaXplKSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVy
LCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVlcykKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZmZXJp
dihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHZh
bHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRy
YXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpDbGVhckJ1ZmZlcnVpdihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2YWx1ZXMu
ZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZm
ZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWVzKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVh
ckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNp
emUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xlYXJCdWZm
ZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRo
LCBHQ0dMaW50IHN0ZW5jaWwpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNp
bCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZmZXJmaShidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRo
LCBzdGVuY2lsKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xv
c3QoKTsKKyAgICB9CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6Y3JlYXRlUXVlcnkoKQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9
OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRl
UXVlcnkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVRdWVyeTo6
UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVRdWVyeSgp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVF1ZXJ5OjpSZXBseShy
ZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNM
b3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVR
dWVyeShxdWVyeSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlUXVlcnkocXVlcnkpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogR0NH
TGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNRdWVyeShQbGF0Zm9ybUdM
T2JqZWN0IHF1ZXJ5KQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1F1ZXJ5KHF1ZXJ5KSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1F1ZXJ5OjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnkocXVlcnkpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkJlZ2luUXVlcnkodGFyZ2V0LCBxdWVyeSksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
QmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbmRRdWVyeSh0YXJnZXQpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkVuZFF1ZXJ5KHRhcmdldCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeSh0YXJnZXQsIHBuYW1lKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeTo6UmVwbHkocmV0dXJu
VmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeSh0YXJnZXQsIHBuYW1lKSwg
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeTo6UmVwbHkocmV0dXJu
VmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0x1aW50IFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFF1ZXJ5T2JqZWN0dWkoUGxhdGZvcm1HTE9iamVjdCBx
dWVyeSwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07
Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVy
eU9iamVjdHVpKHF1ZXJ5LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0UXVlcnlPYmplY3R1aTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRRdWVyeU9iamVjdHVpKHF1ZXJ5LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0UXVlcnlPYmplY3R1aTo6UmVwbHkocmV0dXJuVmFsdWUpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0K
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlU2FtcGxlcigpCiB7CiAgICAgdWludDMyX3QgcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpDcmVhdGVTYW1wbGVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6Q3JlYXRlU2FtcGxlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDcmVhdGVTYW1wbGVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Q3JlYXRlU2FtcGxlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlU2FtcGxl
cihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVNhbXBsZXIoc2FtcGxlciksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
RGVsZXRlU2FtcGxlcihzYW1wbGVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7CiAg
ICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzU2FtcGxlcihzYW1wbGVyKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpJc1NhbXBsZXI6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6SXNTYW1wbGVyKHNhbXBsZXIpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OklzU2FtcGxlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9y
bUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRT
YW1wbGVyKHVuaXQsIHNhbXBsZXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5OjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnNhbXBsZXJQYXJhbWV0
ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBw
YXJhbSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2Ft
cGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTYW1w
bGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0pKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogR0NHTGZsb2F0IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgZmxvYXQgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmY6OlJlcGx5KHJldHVyblZhbHVl
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNhbXBsZXJQYXJh
bWV0ZXJmOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0K
IAogR0NHTGludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRTYW1wbGVyUGFyYW1l
dGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlu
dDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmk6OlJl
cGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFt
ZXRlcmkoc2FtcGxlciwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldFNhbXBsZXJQYXJhbWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKIH0KIAogR0NHTHN5bmMgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQogewogICAg
IHVpbnQ2NF90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZlbmNlU3luYzo6UmVwbHkocmV0dXJuVmFsdWUp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGZW5jZVN5bmMoY29uZGl0aW9uLCBmbGFncyksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RmVuY2VTeW5jOjpSZXBseShyZXR1cm5W
YWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7
CisgICAgfQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ocmV0dXJuVmFsdWUpKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6aXNTeW5jKEdDR0xzeW5jIGFyZzApCiB7CiAgICAgYm9vbCByZXR1
cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OklzU3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oYXJnMCkpKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1N5bmM6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTeW5jKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSkpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU3luYzo6UmVwbHkocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAg
IH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVTeW5jKEdDR0xzeW5j
IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRl
bGV0ZVN5bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGFyZzApKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlU3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xlbnVtIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIGFyZzAsIEdD
R0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQogewogICAgIHVpbnQzMl90IHJl
dHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6Q2xpZW50V2FpdFN5bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgZmxhZ3MsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0aW1l
b3V0KSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50V2FpdFN5bmM6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50V2FpdFN5
bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGFyZzAp
KSwgZmxhZ3MsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0aW1lb3V0KSksIE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50V2FpdFN5bmM6OlJlcGx5KHJldHVyblZhbHVlKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OndhaXRTeW5jKEdDR0xzeW5jIGFyZzAsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NH
TGludDY0IHRpbWVvdXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OldhaXRTeW5jKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aW1lb3V0KSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6V2FpdFN5bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGFyZzApKSwgZmxhZ3MsIHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXQp
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAg
ICB9CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U3luY2ko
R0NHTHN5bmMgYXJnMCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1
ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldFN5bmNpKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90
PihhcmcwKSksIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRT
eW5jaTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwg
MTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTeW5j
aShzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkp
LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3luY2k6OlJl
cGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQbGF0Zm9y
bUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZVRyYW5zZm9ybUZl
ZWRiYWNrKCkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRyYW5zZm9ybUZlZWRi
YWNrKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVHJhbnNmb3Jt
RmVlZGJhY2s6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3Jl
YXRlVHJhbnNmb3JtRmVlZGJhY2soKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpDcmVhdGVUcmFuc2Zvcm1GZWVkYmFjazo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJh
Y2soaWQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAK
IEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmlzVHJhbnNmb3JtRmVl
ZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9
OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUcmFu
c2Zvcm1GZWVkYmFjayhpZCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNU
cmFuc2Zvcm1GZWVkYmFjazo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpJc1RyYW5zZm9ybUZlZWRiYWNrKGlkKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpJc1RyYW5zZm9ybUZlZWRiYWNrOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUpOwogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgaWQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIGlkKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCaW5kVHJhbnNmb3JtRmVlZGJhY2sodGFyZ2V0LCBpZCkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2so
R0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2RlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpCZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjplbmRUcmFuc2Zvcm1GZWVkYmFjaygp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuZFRyYW5z
Zm9ybUZlZWRiYWNrKCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RW5kVHJhbnNmb3JtRmVlZGJhY2soKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2
YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2
YXJ5aW5ncywgYnVmZmVyTW9kZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncyhwcm9ncmFtLCB2YXJ5aW5ncywgYnVmZmVyTW9kZSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBhcmcyKQogewot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nKHByb2dyYW0sIGluZGV4KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmc6OlJlcGx5KGFyZzIpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcocHJvZ3Jh
bSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZzo6UmVwbHkoYXJnMikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6UGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlc3VtZVRyYW5zZm9y
bUZlZWRiYWNrKCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZEJ1ZmZlckJhc2UoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRCdWZmZXJC
YXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZEJ1ZmZlckJhc2Uo
dGFyZ2V0LCBpbmRleCwgYnVmZmVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IGFyZzQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJp
bmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZmZXIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihvZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnNCkpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJp
bmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZmZXIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihvZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnNCkpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogVmVjdG9yPEdD
R0x1aW50PiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRVbmlmb3JtSW5kaWNlcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFt
ZXMpCiB7CiAgICAgVmVjdG9yPHVpbnQzMl90PiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1JbmRpY2Vz
KHByb2dyYW0sIHVuaWZvcm1OYW1lcyksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0VW5pZm9ybUluZGljZXM6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0VW5pZm9ybUluZGljZXMocHJvZ3JhbSwgdW5pZm9ybU5hbWVzKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtSW5kaWNlczo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFZlY3RvcjxHQ0dMaW50
PiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2Vz
LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBWZWN0b3I8aW50MzJfdD4gcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRB
Y3RpdmVVbmlmb3Jtcyhwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcywgcG5hbWUpLCBNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1zOjpSZXBseShyZXR1cm5W
YWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1zKHByb2dyYW0s
IHVuaWZvcm1JbmRpY2VzLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0QWN0aXZlVW5pZm9ybXM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOwogfQogCiBHQ0dMdWludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZv
cm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1CbG9ja0luZGV4OjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0s
IHVuaWZvcm1CbG9ja05hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFVuaWZvcm1CbG9ja0luZGV4OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKIH0KIAogU3RyaW5nIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1
bmlmb3JtQmxvY2tJbmRleCkKIHsKICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAg
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlm
b3JtQmxvY2tOYW1lKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4KSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lOjpSZXBseShyZXR1
cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWU6OlJlcGx5KHJldHVyblZhbHVlKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybUJs
b2NrQmluZGluZyhwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGlu
ZyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybUJsb2NrQmluZGluZyhwcm9ncmFtLCB1bmlmb3JtQmxv
Y2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gcGFyYW1zKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gcGFyYW1z
UmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihwcm9ncmFtLCB1bmlmb3Jt
QmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdjo6UmVwbHkocGFyYW1zUmVwbHkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1
bHQpCi0gICAgICAgIG1lbWNweShwYXJhbXMuZGF0YSwgcGFyYW1zUmVwbHkuZGF0YSgpLCBwYXJh
bXMuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihwcm9ncmFtLCB1
bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdjo6UmVwbHkocGFyYW1z
UmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmRhdGEsIHBhcmFtc1Jl
cGx5LmRhdGEoKSwgcGFyYW1zLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOworICAgIH0KIH0K
IAogR0NHTGludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkI6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkI6OlJlcGx5KHJldHVyblZhbHVlKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKICAgICB1aW50
MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5T0VTKCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJyYXlPRVM6OlJlcGx5KHJldHVyblZhbHVl
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJyYXlPRVMoKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheU9FUzo6UmVwbHko
cmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9i
amVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpEZWxldGVWZXJ0ZXhBcnJheU9FUyhhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVWZXJ0ZXhB
cnJheU9FUyhhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdh
c0xvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJv
b2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpJc1ZlcnRleEFycmF5T0VTKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OklzVmVydGV4QXJyYXlPRVM6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6SXNWZXJ0ZXhBcnJheU9FUyhhcmcwKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1ZlcnRleEFycmF5T0VTOjpSZXBseShyZXR1cm5WYWx1
ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7Cisg
ICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUpOwog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkJpbmRWZXJ0ZXhBcnJheU9FUyhhcmcwKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpC
aW5kVmVydGV4QXJyYXlPRVMoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmpl
Y3QgYXJnMCkKIHsKICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShhcmcwKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEU6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRyYXdCdWZmZXJzRVhUKEdDR0xTcGFu
PGNvbnN0IEdDR0xlbnVtPiBidWZzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpEcmF3QnVmZmVyc0VYVChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90
PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYnVmcy5kYXRhKSwgYnVmcy5idWZT
aXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0J1ZmZlcnNFWFQoSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZnMuZGF0YSksIGJ1
ZnMuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2Fz
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpk
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xl
bnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTHZvaWRwdHIgb2Zm
c2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwg
dHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHByaW1jb3VudCksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihvZmZzZXQpLCBwcmltY291bnQpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvciks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0SW50ZXJuYWxmb3Jt
YXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTFNwYW48R0NHTGludD4gcGFyYW1zKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVu
Y2U8aW50MzJfdD4gcGFyYW1zUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBwYXJhbXMuYnVmU2l6ZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZXJuYWxmb3JtYXRpdjo6UmVwbHkocGFyYW1z
UmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNl
bmRSZXN1bHQpCi0gICAgICAgIG1lbWNweShwYXJhbXMuZGF0YSwgcGFyYW1zUmVwbHkuZGF0YSgp
LCBwYXJhbXMuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBwYXJhbXMuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZXJuYWxmb3JtYXRpdjo6UmVwbHkocGFyYW1zUmVwbHkp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmRhdGEsIHBhcmFtc1JlcGx5LmRh
dGEoKSwgcGFyYW1zLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdBcnJheXNBTkdMRShtb2Rl
LCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50
MzJfdCo+KGZpcnN0cy5kYXRhKSwgZmlyc3RzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNl
PGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwg
Y291bnRzLmJ1ZlNpemUpLCBkcmF3Y291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0FycmF5
c0FOR0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBpbnQzMl90Kj4oZmlyc3RzLmRhdGEpLCBmaXJzdHMuYnVmU2l6ZSksIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291
bnRzLmRhdGEpLCBjb3VudHMuYnVmU2l6ZSksIGRyYXdjb3VudCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICB3YXNMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdD
R0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29u
c3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VD
b3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90
Kj4oZmlyc3RzLmRhdGEpLCBmaXJzdHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50
MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3Vu
dHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBpbnQzMl90Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSksIGluc3RhbmNlQ291bnRzLmJ1
ZlNpemUpLCBkcmF3Y291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBpbnQzMl90Kj4oZmlyc3RzLmRhdGEpLCBmaXJzdHMuYnVmU2l6ZSksIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291
bnRzLmRhdGEpLCBjb3VudHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSksIGlu
c3RhbmNlQ291bnRzLmJ1ZlNpemUpLCBkcmF3Y291bnQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgd2FzTG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjptdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUs
IEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdFbGVtZW50c0FO
R0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMuYnVmU2l6ZSksIHR5cGUsIElQQzo6
QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4o
b2Zmc2V0cy5kYXRhKSwgb2Zmc2V0cy5idWZTaXplKSwgZHJhd2NvdW50KSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpNdWx0aURyYXdFbGVtZW50c0FOR0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJf
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMu
YnVmU2l6ZSksIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBpbnQzMl90Kj4ob2Zmc2V0cy5kYXRhKSwgb2Zmc2V0cy5idWZTaXplKSwgZHJh
d2NvdW50KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bXVsdGlE
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NHTHNp
emVpIGRyYXdjb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBJUEM6OkFycmF5UmVm
ZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5k
YXRhKSwgY291bnRzLmJ1ZlNpemUpLCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KG9mZnNldHMuZGF0YSksIG9mZnNldHMu
YnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBpbnQzMl90Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSksIGluc3RhbmNlQ291bnRzLmJ1ZlNp
emUpLCBkcmF3Y291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUobW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0
PGNvbnN0IGludDMyX3QqPihjb3VudHMuZGF0YSksIGNvdW50cy5idWZTaXplKSwgdHlwZSwgSVBD
OjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3Qq
PihvZmZzZXRzLmRhdGEpLCBvZmZzZXRzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGlu
dDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGluc3RhbmNlQ291bnRzLmRh
dGEpLCBpbnN0YW5jZUNvdW50cy5idWZTaXplKSwgZHJhd2NvdW50KSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKKyAgICB9CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NjExYTcxODgz
NDA0ODE0Y2ExZThhMGYyOGU3M2U3ZTFkMmVjZGIxLi5hNGY1MzA1NmIyYTBhMzFiZWY3YjNkODQx
YWNmMGJiYzU2ZDZlOTMzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDItMDQgIEtpbW1vIEtpbm51bmVuICA8
a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5IHNob3VsZCBzdXBwb3J0IGxvc2luZyB0aGUgY29udGV4dCBhbmQgc2hvdWxkIGxvc2UgdGhl
IGNvbnRleHQgb24gdGltZW91dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEdlbmVyYXRlIGNhbGxzIHRvIGxvc2UgdGhlIGNvbnRleHQgb24gdGltZW91
dHMuCisKKyAgICAgICAgR2VuZXJhdGUgdGhlIHNlbmQgY2FsbHMgYXMgY2FsbHMgdG8gdGhlIGhl
bHBlciBmdW5jdGlvbnMgdG8gc2VuZCB0aGUKKyAgICAgICAgbWVzc2FnZXMuIFRoZSBoZWxwZXIg
ZnVuY3Rpb25zIHdpbGwgcHJvdmlkZSB0aGUgbm9uLWNoYW5naW5nIGFyZ3VtZW50cy4KKworICAg
ICAgICBNb3ZlIGZldyBtZXNzYWdlcyB0byBiZSBpbXBsZW1lbnRlZCBieSBoYW5kLgorCisgICAg
ICAgICogU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsOgorCiAyMDIxLTAyLTA0ICBFbGVuaSBN
YXJpYSBTdGVhICA8ZXN0ZWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb2RpZmljYXRpb25zIHRv
IFRvb2xzL3dwZS9pbnN0YWxsLWRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9nZW5lcmF0ZS1ncHVwLXdlYmdsIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmds
CmluZGV4IGYxNmI0MjIyOWNmMmY4MjhjNjZjN2U3YjQxNzczYzJlYmU0NDMxMTQuLjQ5NjFmZDVi
OWZlNjJhMzUzM2RhM2Q3NDE5NGFlZDI1MGM4NDJlZjIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAorKysgYi9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAt
d2ViZ2wKQEAgLTk5LDYgKzk5LDggQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wgTm90UmVmQ291bnRlZCB7ewogI2VuZGlmCiAgICAgdm9pZCBFbnN1cmVFeHRlbnNpb25FbmFi
bGVkKFN0cmluZyBleHRlbnNpb24pCiAgICAgdm9pZCBOb3RpZnlNYXJrQ29udGV4dENoYW5nZWQo
KQorICAgIHZvaWQgU3ludGhlc2l6ZUdMRXJyb3IodWludDMyX3QgZXJyb3IpCisgICAgdm9pZCBH
ZXRFcnJvcigpIC0+ICh1aW50MzJfdCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKIHt9CiB9fQog
CkBAIC01ODUsMjIgKzU4NywyNCBAQCBjbGFzcyB3ZWJraXRfaXBjX2NwcF9wcm94eV9pbXBsKG9i
amVjdCk6CiAgICAgICAgIGluX2V4cHJzID0gIiwgIi5qb2luKFtzdHIoaSkgZm9yIGkgaW4gc2Vs
Zi5pbl9leHByc10pCiAgICAgICAgIG91dF9leHBycyA9ICIsICIuam9pbihzdHIobykgZm9yIG8g
aW4gc2VsZi5vdXRfZXhwcnMpCiAgICAgICAgIGlzX2FzeW5jID0gc2VsZi5yZXR1cm5fdHlwZS5p
c192b2lkKCkgYW5kIGxlbihvdXRfZXhwcnMpID09IDAKKyAgICAgICAgc2VsZi5jYWxsX3N0bXRz
ICs9IFsgImlmICghaXNDb250ZXh0TG9zdCgpKSB7IiBdCiAgICAgICAgIGlmIGlzX2FzeW5jOgog
ICAgICAgICAgICAgc2VsZi5jYWxsX3N0bXRzICs9IFsKLSAgICAgICAgICAgICAgICBmInNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp7c2VsZi5tc2dfbmFtZX0oe2luX2V4
cHJzfSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsiLAorICAgICAgICAgICAgICAg
IGYiICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjp7c2VsZi5tc2dfbmFtZX0oe2luX2V4cHJzfSkpOyIsCiAgICAgICAgICAgICBdCiAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZW5kX3Jlc3VsdCA9ICIiCi0gICAgICAgICAgICBp
ZiBzZWxmLnBvc3RfY2FsbF9zdG10czogCi0gICAgICAgICAgICAgICAgc2VuZF9yZXN1bHQgPSAi
YXV0byBzZW5kUmVzdWx0ID0gIgotICAgICAgICAgICAgICAgIHNlbGYucG9zdF9jYWxsX3N0bXRz
ID0gWwotICAgICAgICAgICAgICAgICAgICAiaWYgKHNlbmRSZXN1bHQpIiArICgiIHsiIGlmIGxl
bihzZWxmLnBvc3RfY2FsbF9zdG10cykgPiAxIGVsc2UgIiIpCi0gICAgICAgICAgICAgICAgXSAr
IFsiICAgICIgKyBzIGZvciBzIGluIHNlbGYucG9zdF9jYWxsX3N0bXRzXSArIFsKLSAgICAgICAg
ICAgICAgICAgICAgKCJ9IiBpZiBsZW4oc2VsZi5wb3N0X2NhbGxfc3RtdHMpID4gMSBlbHNlICIi
KQotICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIHNlbGYuY2FsbF9zdG10cyArPSBbCi0g
ICAgICAgICAgICAgICAgZiJ7c2VuZF9yZXN1bHR9c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjp7c2VsZi5tc2dfbmFtZX0oe2luX2V4cHJzfSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6e3NlbGYubXNnX25hbWV9OjpSZXBseSh7b3V0X2V4cHJz
fSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsiLAorICAgICAgICAgICAg
ICAgIGYiICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6e3NlbGYubXNnX25hbWV9KHtpbl9leHByc30pLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OntzZWxmLm1zZ19uYW1lfTo6UmVwbHkoe291dF9leHByc30p
KTsiCiAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuY2FsbF9zdG10cyArPSBbCisgICAgICAg
ICAgICAiICAgIGlmICghc2VuZFJlc3VsdCkiLAorICAgICAgICAgICAgIiAgICAgICAgd2FzTG9z
dCgpOyIsCisgICAgICAgIF0KKyAgICAgICAgaWYgc2VsZi5wb3N0X2NhbGxfc3RtdHM6CisgICAg
ICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0gWyIgICAgZWxzZSB7Il0gaWYgbGVuKHNlbGYucG9z
dF9jYWxsX3N0bXRzKSA+IDEgZWxzZSBbICIgICAgZWxzZSJdCisgICAgICAgICAgICBzZWxmLnBv
c3RfY2FsbF9zdG10cyA9IFsgIiAgICAiICsgbCBmb3IgbCBpbiBzZWxmLnBvc3RfY2FsbF9zdG10
cyBdCisgICAgICAgICAgICBzZWxmLnBvc3RfY2FsbF9zdG10cyArPSBbICIgICAgfSIgXSBpZiBs
ZW4oc2VsZi5wb3N0X2NhbGxfc3RtdHMpID4gMSBlbHNlIFtdCisgICAgICAgIHNlbGYucG9zdF9j
YWxsX3N0bXRzICs9IFsgIn0iIF0KIAogCiAgICAgZGVmIHByb2Nlc3NfaW5fYXJncyhzZWxmLCBp
bl9hcmdzOiBMaXN0W2NwcF9hcmddKToKQEAgLTYyMSw4ICs2MjUsOCBAQCBjbGFzcyB3ZWJraXRf
aXBjX2NwcF9wcm94eV9pbXBsKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgc2VsZi5vdXRfZXhw
cnMgKz0gW2VdCiAgICAgICAgICAgICAgICAgc2VsZi5wb3N0X2NhbGxfc3RtdHMgKz0gWwogICAg
ICAgICAgICAgICAgICAgICAjZm10OiBvZmYKLSAgICAgICAgICAgICAgICAgICAgZiJpZiAoe28u
bmFtZX0pIiwKLSAgICAgICAgICAgICAgICAgICAgZiIgICAgKntvLm5hbWV9ID0ge3dlYmtpdF9p
cGNfY29udmVydF9leHByKGUsIHZhbHVlX3R5cGUpfTsiCisgICAgICAgICAgICAgICAgICAgIGYi
ICAgIGlmICh7by5uYW1lfSkiLAorICAgICAgICAgICAgICAgICAgICBmIiAgICAgICAgKntvLm5h
bWV9ID0ge3dlYmtpdF9pcGNfY29udmVydF9leHByKGUsIHZhbHVlX3R5cGUpfTsiCiAgICAgICAg
ICAgICAgICAgICAgICNmbXQ6IG9uCiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgZWxp
ZiBvLnR5cGUuaXNfc3BhbigpOgpAQCAtNjM0LDcgKzYzOCw3IEBAIGNsYXNzIHdlYmtpdF9pcGNf
Y3BwX3Byb3h5X2ltcGwob2JqZWN0KToKICAgICAgICAgICAgICAgICBpZiBvLnR5cGUuaXNfZHlu
YW1pY19zcGFuKCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5fZXhwcnMgKz0gW2NwcF9l
eHByKGdldF9jcHBfdHlwZSgic2l6ZV90IiksIGYie28ubmFtZX0uYnVmU2l6ZSIpXQogICAgICAg
ICAgICAgICAgIHNlbGYucG9zdF9jYWxsX3N0bXRzICs9IFsKLSAgICAgICAgICAgICAgICAgICAg
ZiJtZW1jcHkoe28ubmFtZX0uZGF0YSwge3YubmFtZX0uZGF0YSgpLCB7by5uYW1lfS5idWZTaXpl
ICogc2l6ZW9mKHtzdHIod2Via2l0X2lwY190eXBlLmdldF9jb250YWluZWRfdHlwZSgpKX0pKTsi
CisgICAgICAgICAgICAgICAgICAgIGYiICAgIG1lbWNweSh7by5uYW1lfS5kYXRhLCB7di5uYW1l
fS5kYXRhKCksIHtvLm5hbWV9LmJ1ZlNpemUgKiBzaXplb2Yoe3N0cih3ZWJraXRfaXBjX3R5cGUu
Z2V0X2NvbnRhaW5lZF90eXBlKCkpfSkpOyIKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYub3V0X2V4cHJzICs9IFtjcHBfZXhwcihvLnR5
cGUsIG8ubmFtZSldCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggODk0YmRhNDVlNjU0Zjg5ZDQ1YWE1YmVlZTg4MTY4MDY1YzM3
MTUwNS4uNWRjNjViOGU4MzAwNmViM2JmZmYyNmYxNmU2NmFmMzgyY2NhN2MyNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIxLTAyLTA0ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSBzaG91bGQgc3Vw
cG9ydCBsb3NpbmcgdGhlIGNvbnRleHQgYW5kIHNob3VsZCBsb3NlIHRoZSBjb250ZXh0IG9uIHRp
bWVvdXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjEzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXggdGhlIGxvc2UtY29udGV4dC1vbi1zdGF0dXMtZmFpbHVyZS5odG1sLiBUaGUgdGVzdCB3YXMg
dXNpbmcKKyAgICAgICAgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gbG9zZSB0aGUgY29udGV4dCBh
bmQgdGhlbiBzeW5jaHJvbm91c2x5CisgICAgICAgIGNoZWNraW5nIHRoYXQgdGhlIGNvbnRleHQg
d2FzIGxvc3QuIFdpdGggR1BVIHByb2Nlc3MgdGhpcyBpcyBub3QKKyAgICAgICAgcG9zc2libGUs
IHNvIGNoZWNrIGFmdGVyIG5vcm1hbCBDYW52YXMgd2ViZ2xjb250ZXh0bG9zdCBldmVudC4KKwor
ICAgICAgICBFbmFibGUgdGhlIHRlc3QgZm9yIC0tdXNlLWdwdS1wcm9jZXNzLgorCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvbG9zZS1jb250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWw6
CisgICAgICAgICogZ3B1LXByb2Nlc3MvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMS0wMi0wNCAg
Um9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2Ugc2hvdWxkQ29tcHV0
ZUxvZ2ljYWxXaWR0aEZyb21Bc3BlY3RSYXRpb0FuZEluc2V0cyB3cml0aW5nIG1vZGUgYXdhcmUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2xvc2UtY29udGV4dC1v
bi1zdGF0dXMtZmFpbHVyZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvbG9z
ZS1jb250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwKaW5kZXggY2U4NDRkMzBkYmMzZmFmZjAw
M2FhMjRlZDI4ZWIwNmRlMDY0OWIwZi4uYjgzOTE2ODY0ZGJkNmU3MGMzOGRkZmI3YTM0ZTI0NTUy
ZWMwN2I4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvbG9zZS1j
b250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvbG9zZS1jb250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwKQEAgLTI2LDYgKzI2
LDcgQEAgdmFyIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIgPSBbCiAKIHZhciB3dHUgPSBXZWJH
TFRlc3RVdGlsczsKIHZhciBnbDsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKIAogaWYg
KHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yaykKICAgICB3aW5kb3cuaW5pdE5vbktocm9u
b3NGcmFtZXdvcmsoZmFsc2UpOwpAQCAtNDEsNyArNDIsMTIgQEAgZnVuY3Rpb24gbWFrZUNhbnZh
cygpIHsKICAgICByZXR1cm4gY2FudmFzOwogfQogCi1mdW5jdGlvbiBydW5UZXN0KCkgeworYXN5
bmMgZnVuY3Rpb24gd2ViR0xDb250ZXh0TG9zdChjYW52YXMpCit7CisgICAgcmV0dXJuIG5ldyBQ
cm9taXNlKHJlc29sdmUgPT4gY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxv
c3QiLCByZXNvbHZlKSk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAKICAgICBk
ZWJ1ZygiIik7CiAgICAgZGVidWcoIlRlc3QgZHJhd0FycmF5cy4iKTsKQEAgLTY1LDYgKzcxLDcg
QEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICBpZiAod2luZG93LmludGVybmFscykKICAgICAg
ICAgd2luZG93LmludGVybmFscy5mYWlsTmV4dEdQVVN0YXR1c0NoZWNrKGdsKTsKICAgICBnbC5k
cmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisgICAgYXdhaXQgd2ViR0xDb250ZXh0TG9z
dChjYW52YXMpOwogICAgIHNob3VsZEJlVHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgpIik7CiAgICAg
c2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdMIik7CiAKQEAg
LTk2LDYgKzEwMyw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpCiAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZmFpbE5leHRHUFVTdGF0dXNDaGVjayhn
bCk7CiAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hP
UlQsIDApOworICAgIGF3YWl0IHdlYkdMQ29udGV4dExvc3QoY2FudmFzKQogICAgIHNob3VsZEJl
VHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgpIik7CiAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdMIik7CiAKQEAgLTEyMiw2ICsxMzAsNyBAQCBmdW5jdGlv
biBydW5UZXN0KCkgewogICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQogICAgICAgICB3aW5kb3cu
aW50ZXJuYWxzLmZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soZ2wpOwogICAgIGV4dC5kcmF3QXJyYXlz
SW5zdGFuY2VkQU5HTEUoZ2wuVFJJQU5HTEVTLCAwLCA2LCAxMCk7CisgICAgYXdhaXQgd2ViR0xD
b250ZXh0TG9zdChjYW52YXMpOwogICAgIHNob3VsZEJlVHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgp
Iik7CiAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdM
Iik7CiAKQEAgLTE1NCwxMyArMTYzLDE2IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCiAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZmFpbE5leHRHUFVT
dGF0dXNDaGVjayhnbCk7CiAgICAgZXh0LmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKGdsLlRS
SUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAsIDgpOworICAgIGF3YWl0IHdlYkdMQ29u
dGV4dExvc3QoY2FudmFzKTsKICAgICBzaG91bGRCZVRydWUoImdsLmlzQ29udGV4dExvc3QoKSIp
OwogICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLkNPTlRFWFRfTE9TVF9XRUJHTCIp
OwogCiAgICAgZmluaXNoVGVzdCgpOwogfQogCi13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHJ1blRlc3QsIGZhbHNlKTsKK3J1blRlc3QoKTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworCiA8L3NjcmlwdD4KIDxib2R5PgotPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2dwdS1wcm9jZXNzL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9ncHUtcHJvY2Vzcy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IGE2YmI5MmNiYTUyNmFjMTkyZWRlYTE5ODIyOGM0YjJmNzhiNmFlZDkuLjM2M2EzZjM4
MmU5YzM2NzgyOGZiN2Q2YTJhY2I2MzQ0NjExNTJmOWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2dwdS1wcm9jZXNzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvZ3B1LXByb2Nl
c3MvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODcsNyArODcsNiBAQCBmYXN0L2NhbnZhcy93ZWJnbC9j
YW52YXMtdGVzdC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWNy
ZWF0aW9uLWF0dHJpYnV0ZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9jYW52YXMvd2ViZ2wvY29u
dGV4dC11cGRhdGUtb24tZGlzcGxheS1jb25maWd1cmF0aW9uLmh0bWwgWyBUaW1lb3V0IF0KIGZh
c3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvY2Fu
dmFzL3dlYmdsL2xvc2UtY29udGV4dC1vbi1zdGF0dXMtZmFpbHVyZS5odG1sIFsgRmFpbHVyZSBd
CiBmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbCBbIEZhaWx1cmUg
XQogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRl
by1yZ2I1NjUuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFu
ZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1yZ2JhNDQ0NC5odG1sIFsgRmFpbHVyZSBdCkBAIC03
MjgsNCArNzI3LDQgQEAgd2ViZ2wvbWF4LWFjdGl2ZS1jb250ZXh0cy1nYy5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJnbC9tYXgtYWN0aXZlLWNvbnRleHRzLW9sZGVzdC1jb250ZXh0LWxvc3QuaHRtbCBb
IEZhaWx1cmUgXQogd2ViZ2wvbWF4LWFjdGl2ZS1jb250ZXh0cy13ZWJnbGNvbnRleHRsb3N0LXBy
ZXZlbnQtZGVmYXVsdC5odG1sIFsgVGltZW91dCBdCiAKLXdlYnJ0Yy9hdWRpby12aWRlby1lbGVt
ZW50LXBsYXlpbmcuaHRtbCBbIEZhaWx1cmUgXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
K3dlYnJ0Yy9hdWRpby12aWRlby1lbGVtZW50LXBsYXlpbmcuaHRtbCBbIEZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419377</attachid>
            <date>2021-02-05 02:17:38 -0800</date>
            <delta_ts>2021-02-09 05:35:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221396-20210205121735.patch</filename>
            <type>text/plain</type>
            <size>174570</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkODAyMTA4ODk5OTYxMmYz
MjU5MTE3MzhhYTlhZGFlNTVjNDVmZjQuLjI1MGI3YjEyZWQ5ZWQ1ODE1YTFhYmNkZjQyMWJiNTQ2
MjllZTZiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcgQEAKKzIwMjEtMDItMDQgIEtpbW1vIEtp
bm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5IHNob3VsZCBzdXBwb3J0IGxvc2luZyB0aGUgY29udGV4dCBhbmQgc2hvdWxk
IGxvc2UgdGhlIGNvbnRleHQgb24gdGltZW91dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5IGFjdGluZyBvbgorICAgICAgICBsb3NpbmcgdGhlIGNvbnRleHQgaW4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuCisKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9y
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgdGltaW5nIG91dCBvbiBtZXNzYWdlCisgICAg
ICAgIHNlbmRzLiBGb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0LgorCisgICAgICAgIEltcGxl
bWVudCBzdXBwb3J0IGZvciBHUFVQcm9jZXNzQ29ubmVjdGlvbiBkaXNjb25uZWN0LiBGb3JjZSB0
aGUgY29udGV4dAorICAgICAgICBiZSBsb3N0LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHA6CisKKyAgICAgICAgU2VuZCBhIGJvb2wg
dmlhIFdhc0NyZWF0ZWQgbWV0aG9kLCBzbyB0aGF0IHRoZQorICAgICAgICByZWNlaXZlciBrbm93
cyBpZiBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgICAgICAgIEN1cnJlbnRseSB0
aGUgY3JlYXRpb24gYWx3YXlzIHN1Y2NlZWRzLgorCisgICAgICAgIFByZXZpb3VzbHkgaXQgd2Fz
IGRlc2lnbmVkIHRvIHVzZSB3YXNMb3N0IGluc3RlYWQsCisgICAgICAgIGJ1dCB0aGlzIGhhcyB0
aGUgcHJvYmxlbSB0aGF0IHRoZSBjbGllbnQgd2lsbCB3YWl0CisgICAgICAgIGZvciBXYXNDcmVh
dGVkIGluIHBhcnRpY3VsYXIgY2FzZXMgdG8gZW5zdXJlIGluaXRpYWxpemF0aW9uLAorICAgICAg
ICBhbmQgdGh1cyB3ZSBjYW5ub3Qgd2FpdCBmb3IgICJXYXNDcmVhdGVkIE9SIFdhc0xvc3QiLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpz
eW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpnZXRFcnJvcik6CisKKyAgICAgICAgTWFudWFsbHkgaW1wbGVtZW50IGZldyBtZXRob2Rz
IHRoYXQgY29udGFpbiBjdXN0b20gY2xpZW50LXNpZGUKKyAgICAgICAgbG9naWMgd3J0LiBsb3N0
IGNvbnRleHQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg6CisgICAgICAgIChzZXRG
YWlsTmV4dEdQVVN0YXR1c0NoZWNrKToKKyAgICAgICAgKGdldEJvb2xlYW52KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorCisgICAgICAgIFNr
aXAgdGhlIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgbWVzc2FnZXMgdGhhdCBkbyBub3Qg
aGF2ZQorICAgICAgICBhIHJlY2VpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBhcyB3ZSBjYW5ub3Qg
YXNzdW1lIHRoYXQgb25seSBleHBlY3RlZAorICAgICAgICBtZXNzYWdlcyBhcnJpdmUgdG8gdGhl
IG1lc3NhZ2UgaGFuZGVyLgorCisgICAgICAgIFRoZSBjbGllbnQsIGkuZS4gdGhlIHdlYiBwcm9j
ZXNzLCBtaWdodAorICAgICAgICAgLSBqdXN0IGRlbGV0ZSB0aGUgcHJveHkKKyAgICAgICAgIC0g
Zm9yY2UgdGhlIGNvbnRleHQgdG8gYmUgbG9zdAorICAgICAgICAgLSBub3RpY2UgYSB0aW1lb3V0
IGFuZCBmb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0CisKKyAgICAgICAgd2hpbGUgdGhlIEdQ
VSBwcm9jZXNzIGNhbm5vdCBrbm93IHRoaXMuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIG1pZ2h0
CisgICAgICAgIGFscmVhZHkgaGF2ZSBzZW50IG1lc3NhZ2VzIHRvIHRoZSBQcm94eS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkpOgorCisg
ICAgICAgIExpc3RlbiB0byBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IG5vdGlmaWNhdGlv
bnMgYWJvdXQKKyAgICAgICAgY29ubmVjdGlvbiBjbG9zdXJlLiBXaGVuIHRoZSBjb25uZWN0aW9u
IGNsb3NlcywgbWFyayB0aGUgY29udGV4dCBvYmplY3QKKyAgICAgICAgbG9zdC4KKworICAgICAg
ICBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIEdQVVByb2Nlc3NDb25uZWN0aW9uIHNvIHRoYXQgd2hl
biB0aGUgY29ubmVjdGlvbgorICAgICAgICBpcyBzaHV0IGRvd24gYW5kIG5ldyBvbmUgaXMgaW5z
dGFudGlhdGVkLCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5CisgICAgICAgIGRlc3RydWN0
aW9uIGxvZ2ljIHdpbGwgY29ycmVjdGx5IHJlZmVyIHRvIHRoZSBvbmUgaXQgd2FzIHVzaW5nLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnJlc2hhcGUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwcmVwYXJl
Rm9yRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojpub3RpZnlNYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzeW50aGVzaXplR0xFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEVycm9y
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FzQ3Jl
YXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondh
c0xvc3QpOgorCisgICAgICAgIFdoZW4gdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXBwZW5zLCBk
aXNjb25uZWN0IHdpdGgKKyAgICAgICAgdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondhc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptYXJrQ29udGV4
dExvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3
YWl0VW50aWxJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorCisgICAgICAgIFdo
ZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLCBtYXJrIHRoZSBjb250ZXh0IG9iamVjdAorICAgICAg
ICBsb3N0LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlv
bnNHZW5lcmF0ZWQuY3BwOgorCisgICAgICAgIENoYW5nZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb2Rl
LWdlbmVyYXRvciB3cnQgaGFuZGxpbmcgdGltZW91dHMgZnJvbSB0aGUgc2VuZHMuCisKIDIwMjEt
MDItMDQgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9uc1dQRS5jbWFrZSBhbmQgTkVXUyBmb3IgdGhl
IDIuMzEuMSByZWxlYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCBkODA0ZDFmYTk5
OTRkNWZmZjMxNDM2NGQ1OWJlZjk1ZWI0OWVhOTk5Li43OWIzNDU5NmZiZjJkMGRmYzk4MTg2NTFi
ZGNmZWI0YjBhMGM4NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEcKICAgICBtX2NvbnRleHQtPmFkZENsaWVudCgq
dGhpcyk7CiAgICAgU3RyaW5nIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFw
aGljc0NvbnRleHRHTDo6RVhURU5TSU9OUyk7CiAgICAgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5z
aW9ucyA9IG1fY29udGV4dC0+Z2V0U3RyaW5nKEV4dGVuc2lvbnNHTDo6UkVRVUVTVEFCTEVfRVhU
RU5TSU9OU19BTkdMRSk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6V2FzQ3JlYXRlZChleHRlbnNpb25zLCByZXF1ZXN0YWJsZUV4dGVuc2lvbnMpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6V2FzQ3JlYXRlZCh0cnVlLCBleHRlbnNpb25zLCByZXF1
ZXN0YWJsZUV4dGVuc2lvbnMpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CiB9CiAK
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0woKQpAQCAt
MTE3LDYgKzExNywxNiBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9y
RGlzcGxheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcAogfQogI2VuZGlmCiAKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVy
cm9yKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Ioc3RhdGljX2Nhc3Q8R0NH
TGVudW0+KGVycm9yKSk7Cit9CisKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmdldEVy
cm9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbnRl
eHQtPmdldEVycm9yKCkpKTsKK30KKwogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6ZW5z
dXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcmJiBleHRlbnNpb24pCiB7CiAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZChleHRlbnNpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuaAppbmRleCA3ZGIwY2Y1MThhYmY5YmIyNWFiMzM2ZGRkZTAzOTk5MjVhYTA1ZjMyLi4w
MDE1OWFjOGI1ODZhOGI2MmEzZGRhM2E1NzAwNGU4ODNlMTU2ZDA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuaApAQCAtOTAsNiArOTAsOCBAQCBwcm90ZWN0ZWQ6CiAjZWxzZQogICAgIHZvaWQgcHJl
cGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgorICAg
IHZvaWQgZ2V0RXJyb3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYpOworICAg
IHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodWludDMyX3QgZXJyb3IpOwogCiAjaW5jbHVkZSAiUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaCIgLy8gTk9MSU5UCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgppbmRleCA5NzdmNWYxMWM4ZWMx
OWQ5YzU3YzdiZGMyOTZhYTVmYmRkYmQ0NTlmLi5kMzI4Y2QxY2NkNjIxYjA1YWMyODMxOGU2MjVh
N2JhNzJkY2M0YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmlu
CkBAIC0zNCw5ICszNCwxMCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBO
b3RSZWZDb3VudGVkIHsKICNlbmRpZgogICAgIHZvaWQgRW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChT
dHJpbmcgZXh0ZW5zaW9uKQogICAgIHZvaWQgTm90aWZ5TWFya0NvbnRleHRDaGFuZ2VkKCkKKyAg
ICB2b2lkIFN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVycm9yKQorICAgIHZvaWQgR2V0RXJy
b3IoKSAtPiAodWludDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAKICAgICB2b2lkIFNl
dEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKQotICAgIHZvaWQgU3ludGhlc2l6ZUdMRXJyb3IodWlu
dDMyX3QgZXJyb3IpCiAgICAgdm9pZCBNb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSAt
PiAoYm9vbCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKICAgICB2b2lkIEFjdGl2ZVRleHR1cmUo
dWludDMyX3QgdGV4dHVyZSkKICAgICB2b2lkIEF0dGFjaFNoYWRlcih1aW50MzJfdCBwcm9ncmFt
LCB1aW50MzJfdCBzaGFkZXIpCkBAIC05OSw3ICsxMDAsNiBAQCBtZXNzYWdlcyAtPiBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3VudGVkIHsKICAgICB2b2lkIEdldEludGVnZXI2NGko
dWludDMyX3QgcG5hbWUsIHVpbnQzMl90IGluZGV4KSAtPiAoaW50NjRfdCByZXR1cm5WYWx1ZSkg
U3luY2hyb25vdXMKICAgICB2b2lkIEdldFByb2dyYW1pKHVpbnQzMl90IHByb2dyYW0sIHVpbnQz
Ml90IHBuYW1lKSAtPiAoaW50MzJfdCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKICAgICB2b2lk
IEdldEJvb2xlYW52KHVpbnQzMl90IHBuYW1lLCB1aW50NjRfdCB2YWx1ZVNpemUpIC0+IChJUEM6
OkFycmF5UmVmZXJlbmNlPGJvb2w+IHZhbHVlKSBTeW5jaHJvbm91cwotICAgIHZvaWQgR2V0RXJy
b3IoKSAtPiAodWludDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qg
YXR0YWNobWVudCwgdWludDMyX3QgcG5hbWUpIC0+IChpbnQzMl90IHJldHVyblZhbHVlKSBTeW5j
aHJvbm91cwogICAgIHZvaWQgR2V0UHJvZ3JhbUluZm9Mb2codWludDMyX3QgYXJnMCkgLT4gKFN0
cmluZyByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKICAgICB2b2lkIEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcmkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSkgLT4gKGludDMyX3QgcmV0
dXJuVmFsdWUpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TEZ1bmN0aW9uc0dlbmVyYXRlZC5oCmluZGV4IDE3NjQ4NzUzNDg4ZjRiMGIzYTVlNjBlNzkyZmVm
ZTdhODJiMjFlNTUuLmJkZTc2ZjliZTdlOGVmMGM1MDIxY2E3NDAwMzU5OWMwYWZjNGQ3YzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5o
CkBAIC0yOSwxMCArMjksNiBAQAogICAgIHsKICAgICAgICAgbV9jb250ZXh0LT5zZXRGYWlsTmV4
dEdQVVN0YXR1c0NoZWNrKCk7CiAgICAgfQotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodWlu
dDMyX3QgZXJyb3IpCi0gICAgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KGVycm9yKTsKLSAgICB9CiAgICAgdm9pZCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Qo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7
CiAgICAgICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07CkBAIC0zMjEsMTIgKzMxNyw2IEBACiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPihyZWludGVycHJldF9jYXN0
PGJvb2wqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9Ci0gICAgdm9pZCBn
ZXRFcnJvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLSAgICB7Ci0gICAgICAgIEdDR0xlbnVtIHJldHVyblZhbHVlID0geyB9OwotICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIocmV0dXJuVmFsdWUpOwotICAgIH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcmkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhdHRhY2htZW50LCB1
aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwCmluZGV4IGEyOTMwN2Y3MGI2ZWRmN2Y4NDkzNmVkYTZkYmNmYjhkYjNhNmQwMDcuLmNl
NDA3OTgyYmU4ZjdlNjdiMmU5YWNkM2QzZjUxNTQ4YjliYTYzYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02
Nyw2ICs2NywxMCBAQAogI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlNZXNzYWdlcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE2OCw3ICsxNzIsMTYgQEAgYm9vbCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCi0gICAg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKKyAgICBpZiAobWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFNraXAg
bWVzc2FnZXMgaW50ZW5kZWQgZm9yIGFscmVhZHkgcmVtb3ZlZCBtZXNzYWdlUmVjZWl2ZXJNYXAo
KSBkZXN0aW5hdGlvbnMuCisjaWYgRU5BQkxFKFdFQkdMKQorICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgor
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNw
YXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKaW5kZXggMTdkZjJkYmQ2
ZjE3YTNlNmY2MjM5NjFhZWUyMzJhY2ZlYjEyMTVhMy4uMGU1M2VmMzdkNWQwYmJkNmI2NTg2YTRm
ODM1ZjkxYzI2ZGRhNjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHkuY3BwCkBAIC00NSw0OSArNDUsNDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJl
ZlB0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5PiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5OjpjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eShhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCksIGF0dHJpYnV0ZXMpKTsKIH0KIAotUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eShjb25zdCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmIGF0dHJzKQorUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eShHUFVQcm9jZXNzQ29ubmVjdGlvbiYgZ3B1UHJvY2Vzc0Nv
bm5lY3Rpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpCiAgICAg
OiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZShhdHRycykKKyAgICAsIG1fZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24oJmdwdVByb2Nlc3NDb25uZWN0aW9uKQogewotICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOwotICAg
IG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOwotICAgIHNlbmQoTWVzc2FnZXM6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZUdyYXBoaWNzQ29udGV4dEdMKGF0dHJz
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciksIDApOworICAgIGdwdVByb2Nlc3NDb25u
ZWN0aW9uLmFkZENsaWVudCgqdGhpcyk7CisgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKyAgICBjb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlR3JhcGhpY3NDb250ZXh0
R0woYXR0cnMsIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSwgMCk7CiB9CiAKIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6On5SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KCkK
IHsKLSAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdl
UmVjZWl2ZXJNYXAoKTsKLSAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKCp0aGlzKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpSZWxlYXNlR3JhcGhpY3NDb250ZXh0R0wobV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
LCAwKTsKKyAgICBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgcGxhdGZvcm1Td2FwQ2hhaW4oKS5yZWN5Y2xlQnVmZmVyKCk7CiAjZW5kaWYK
IH0KIAotSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKLX0K
LQotdWludDY0X3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdAotewotICAgIHJldHVybiBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllci50b1VJbnQ2NCgpOwotfQotCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogeworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6UmVzaGFwZSh3aWR0aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpSZXNoYXBlKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKKyAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
TWFjaFNlbmRSaWdodCBkaXNwbGF5QnVmZmVyU2VuZFJpZ2h0OwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHkoZGlz
cGxheUJ1ZmZlclNlbmRSaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9z
KTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXk6OlJlcGx5KGRpc3BsYXlCdWZmZXJTZW5kUmln
aHQpKTsKKyAgICBpZiAoIXNlbmRSZXN1bHQpIHsKKyAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgYXV0byBkaXNwbGF5QnVmZmVyID0gSU9TdXJm
YWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoZGlzcGxheUJ1ZmZlclNlbmRSaWdodCks
IHNSR0JDb2xvclNwYWNlUmVmKCkpOwogICAgIGlmIChkaXNwbGF5QnVmZmVyKSB7CiAgICAgICAg
IC8vIENsYWltIGluIHRoZSBXZWJQcm9jZXNzIG93bmVyc2hpcCBvZiB0aGUgSU9TdXJmYWNlIGNv
bnN0cnVjdGVkIGJ5IHRoZSBHUFVQcm9jZXNzIHNvIHRoYXQgSmV0c2FtIGtub3dzIHdoaWNoIHBy
b2Nlc3NlcyB0byBraWxsLgpAQCAtOTgsMTkgKzk3LDMxIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6cHJlcGFyZUZvckRpc3BsYXkoKQogICAgICAgICBzYy5wcmVzZW50KHsg
V1RGTW92ZShkaXNwbGF5QnVmZmVyKSwgbnVsbHB0ciB9KTsKICAgICB9CiAjZWxzZQotICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3Bs
YXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQcmVwYXJlRm9yRGlzcGxh
eTo6UmVwbHkoKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6UHJlcGFyZUZvckRpc3BsYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpQcmVwYXJlRm9yRGlzcGxheTo6UmVwbHkoKSk7CisgICAgaWYgKCFzZW5kUmVzdWx0KSB7Cisg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQogI2VuZGlm
CiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuc3Vy
ZUV4dGVuc2lvbkVuYWJsZWQoZXh0ZW5zaW9uKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RW5z
dXJlRXh0ZW5zaW9uRW5hYmxlZChleHRlbnNpb24pKTsKKyAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6Om5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpOb3RpZnlNYXJrQ29udGV4dENoYW5nZWQoKSk7CisgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKQEAg
LTEzNSwzOSArMTQ2LDk4IEBAIFJlZlB0cjxJbWFnZURhdGE+IFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FzQ3JlYXRl
ZChTdHJpbmcmJiBhdmFpbGFibGVFeHRlbnNpb25zLCBTdHJpbmcmJiByZXF1ZXN0ZWRFeHRlbnNp
b25zKQordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzeW50aGVzaXplR0xFcnJv
cihHQ0dMZW51bSBlcnJvcikKIHsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplKSB7Ci0gICAgICAg
IC8vIEluaXRpYWxpemF0aW9uIHRpbWVkIG91dCBiZWZvcmUsIHNvIGxvc2UgdGhlIGNvbnRleHQg
bm93LgotICAgICAgICB3YXNMb3N0KCk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlN5bnRoZXNpemVHTEVycm9yKGVycm9yKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIHdhc0xvc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
bml0aWFsaXplKGF2YWlsYWJsZUV4dGVuc2lvbnMsIHJlcXVlc3RlZEV4dGVuc2lvbnMpOworICAg
IG1fZXJyb3JXaGVuQ29udGV4dElzTG9zdCA9IGVycm9yOworfQorCitHQ0dMZW51bSBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSAwOworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldEVycm9yKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RXJyb3I6
OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIHdhc0xvc3QoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xlbnVtPihyZXR1
cm5WYWx1ZSk7CisgICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZXJyb3JXaGVuQ29u
dGV4dElzTG9zdCwgTk9fRVJST1IpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6Ondhc0NyZWF0ZWQoYm9vbCBkaWRTdWNjZWVkLCBTdHJpbmcmJiBhdmFpbGFibGVFeHRl
bnNpb25zLCBTdHJpbmcmJiByZXF1ZXN0ZWRFeHRlbnNpb25zKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRpZFN1Y2NlZWQpIHsKKyAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJU
KCFtX2RpZEluaXRpYWxpemUpOwogICAgIG1fZGlkSW5pdGlhbGl6ZSA9IHRydWU7CisgICAgaW5p
dGlhbGl6ZShhdmFpbGFibGVFeHRlbnNpb25zLCByZXF1ZXN0ZWRFeHRlbnNpb25zKTsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3YXNMb3N0KCkKIHsKLSAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQt
PmZvcmNlQ29udGV4dExvc3QoKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgbWFya0NvbnRleHRMb3N0KCk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6d2FzQ2hhbmdlZCgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCiAgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNh
dGlvbigpOwogfQogCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1hcmtDb250
ZXh0TG9zdCgpCit7CisgICAgZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCgpOworICAgIGZv
ciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVu
dC0+Zm9yY2VDb250ZXh0TG9zdCgpOworfQorCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OndhaXRVbnRpbEluaXRpYWxpemVkKCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZSkKICAgICAgICAgcmV0
dXJuOwotICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKLSAg
ICBpZiAoY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Oldhc0NyZWF0ZWQ+KG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyLCAxMF9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRp
bmdJZlN5bmNNZXNzYWdlQXJyaXZlcykpCisgICAgaWYgKGNvbm5lY3Rpb24oKS53YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6V2FzQ3JlYXRlZD4obV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIGRlZmF1bHRTZW5k
VGltZW91dCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBUaW1lZCBvdXQsIHNvIHJlcG9ydCBp
bml0aWFsaXplZCB3aXRoIGR1bW15IGRhdGEuIFdlIHNob3VsZCBsb3NlIHRoZSBjb250ZXh0Lgot
ICAgIHdhc0NyZWF0ZWQoIiIsICIiKTsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYXJrIHRoZSBj
b250ZXh0IGFzIGxvc3QsIGJ1dCBpdCdzIG5vdCBzYWZlIHRvIGZvcmNlIGxvc3QgaW4gdGhpcyBj
YWxsIHN0YWNrLgorICAgIG1hcmtDb250ZXh0TG9zdCgpOworfQorCit2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24mKQoreworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBhYmFu
ZG9uR3B1UHJvY2VzcygpOworICAgIG1hcmtDb250ZXh0TG9zdCgpOworfQorCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmFiYW5kb25HcHVQcm9jZXNzKCkKK3sKKyAgICBhdXRv
IGdwdVByb2Nlc3NDb25uZWN0aW9uID0gc3RkOjpleGNoYW5nZShtX2dwdVByb2Nlc3NDb25uZWN0
aW9uLCBudWxscHRyKTsKKyAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKKyAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRv
VUludDY0KCkpOworICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24gPSBudWxscHRyOworfQorCit2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZO
ZWVkZWQoKQoreworICAgIGlmIChhdXRvIGdwdVByb2Nlc3NDb25uZWN0aW9uID0gc3RkOjpleGNo
YW5nZShtX2dwdVByb2Nlc3NDb25uZWN0aW9uLCBudWxscHRyKSkgeworICAgICAgICBncHVQcm9j
ZXNzQ29ubmVjdGlvbi0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nv
bm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAgICAgZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlR3JhcGhpY3NDb250ZXh0R0wobV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpLCAwKTsKKyAgICB9CisgICAgQVNTRVJUKGlzQ29udGV4dExvc3QoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHkuaAppbmRleCBlNTAxYmRiMjExZmM5NzNlNWY1Nzk5MmJhMDBjZTliNjExMTdmNzY3
Li41NDE3MmZiMGI1MTZiNjM5ZTk1MTA5NjRkYTNhZGRhZDY2YTIzYWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaApAQCAtMjcsMTkgKzI3LDE4IEBACiAKICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkKIAorI2luY2x1ZGUgIkdQVVByb2Nl
c3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5o
IgogI2luY2x1ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKLQogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCi0KIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiAvLyBXZWIgcHJvY2VzcyBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNz
Q29udGV4dEdMIGludGVyZmFjZS4gVGhlIGltcGxlbWVudGF0aW9uCkBAIC00NywxOCArNDYsMTMg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBpbiBHUFUg
cHJvY2Vzcy4KIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IGdlbmVyYXRlZCBieSBy
dW5uaW5nIFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbC4KIGNsYXNzIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkgZmluYWwKLSAgICA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIKLSAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICAsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5PgorICAgIDogcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHJpdmF0ZSBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
Q2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYpOwogICAgIH5SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KCkgZmluYWw7CiAKLSAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIgb3ZlcnJpZGVzLgotICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBmaW5hbDsKLSAgICB1aW50NjRfdCBtZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IGZpbmFsOwotCiAgICAgLy8gSVBDOjpNZXNzYWdl
UmVjZWl2ZXIgb3ZlcnJpZGVzLgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKQEAgLTcyLDEwICs2NiwxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpJbWFn
ZUJ1ZmZlciopIGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqKSBmaW5hbDsKKyAgICB2b2lk
IHN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKSBmaW5hbDsKKyAgICBHQ0dMZW51bSBn
ZXRFcnJvcigpIGZpbmFsOwogCiAgICAgLy8gRnVuY3Rpb25zIHdpdGggYSBnZW5lcmF0ZWQgaW1w
bGVtZW50YXRpb24uIFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGdlbmVyYXRlLWdwdXAtd2ViZ2wgc2Ny
aXB0LgogICAgIHZvaWQgc2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpIGZpbmFsOwotICAgIHZv
aWQgc3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpIGZpbmFsOwogICAgIGJvb2wgbW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkgZmluYWw7CiAgICAgdm9pZCBhY3RpdmVUZXh0
dXJlKEdDR0xlbnVtIHRleHR1cmUpIGZpbmFsOwogICAgIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpIGZpbmFsOwpAQCAt
MTM4LDcgKzEzMyw2IEBAIHB1YmxpYzoKICAgICBHQ0dMaW50NjQgZ2V0SW50ZWdlcjY0aShHQ0dM
ZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgpIGZpbmFsOwogICAgIEdDR0xpbnQgZ2V0UHJvZ3Jh
bWkoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CiAgICAg
dm9pZCBnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZh
bHVlKSBmaW5hbDsKLSAgICBHQ0dMZW51bSBnZXRFcnJvcigpIGZpbmFsOwogICAgIEdDR0xpbnQg
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lKSBmaW5hbDsKICAgICBTdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBhcmcwKSBmaW5hbDsKICAgICBHQ0dMaW50IGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkg
ZmluYWw7CkBAIC0zMzMsMTQgKzMyNyw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUJhc2Ugb3ZlcnJpZGVzLgogICAgIHZvaWQgd2FpdFVudGlsSW5p
dGlhbGl6ZWQoKSBmaW5hbDsKIAorICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0IHsgcmV0
dXJuICFtX2dwdVByb2Nlc3NDb25uZWN0aW9uOyB9CisgICAgdm9pZCBtYXJrQ29udGV4dExvc3Qo
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgU2Vjb25kcyBkZWZhdWx0U2VuZFRpbWVvdXQgPSAzMF9z
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
c2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbm5lY3Rpb24oKS5zZW5kKFdURk1v
dmUobWVzc2FnZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRvVUludDY0KCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBXQVJOX1VOVVNFRF9SRVRVUk4gSVBDOjpDb25uZWN0aW9uOjpTZW5kU3luY1Jlc3VsdCBzZW5k
U3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb25uZWN0aW9uKCkuc2VuZFN5bmMoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92
ZShyZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLnRvVUludDY0KCksIGRlZmF1
bHRTZW5kVGltZW91dCk7CisgICAgfQorICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKTsgfQor
CiBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgotICAgIHZvaWQgd2Fz
Q3JlYXRlZChTdHJpbmcmJiBhdmFpbGFibGVFeHRlbnNpb25zLCBTdHJpbmcmJiByZXF1ZXN0ZWRF
eHRlbnNpb25zKTsKKyAgICB2b2lkIHdhc0NyZWF0ZWQoYm9vbCBkaWRTdWNjZWVkLCBTdHJpbmcm
JiBhdmFpbGFibGVFeHRlbnNpb25zLCBTdHJpbmcmJiByZXF1ZXN0ZWRFeHRlbnNpb25zKTsKICAg
ICB2b2lkIHdhc0xvc3QoKTsKICAgICB2b2lkIHdhc0NoYW5nZWQoKTsKIAotICAgIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzJik7CisgICAgLy8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudCBvdmVycmlkZXMu
CisgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0
aW9uJikgZmluYWw7CisKKyAgICB2b2lkIGRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKTsK
KyAgICB2b2lkIGFiYW5kb25HcHVQcm9jZXNzKCk7CisKKyAgICBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5KEdQVVByb2Nlc3NDb25uZWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzJik7CisgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24qIG1fZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb247CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemUgeyBmYWxzZSB9OworICAg
IEdDR0xlbnVtIG1fZXJyb3JXaGVuQ29udGV4dElzTG9zdCA9IE5PX0VSUk9SOworCiAgICAgR3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIHsg
R3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
NWYyYjMyYjJiYzEwMTBlZjhlY2QwYWY1Nzc3YWJkNGZhMDhhM2M5MC4uYTdjNjQxMmFjOTQ2ZTI1
OGNlMDEzOGJjNDdiYzM4NjIxOTUwMjFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOSArMjMsOSBAQAogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdFQkdMKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5IE5vdFJlZkNvdW50ZWQgewotICAgIHZvaWQgV2FzQ3JlYXRl
ZChTdHJpbmcgYXZhaWxhYmxlRXh0ZW5zaW9ucywgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5zaW9u
cykKKyAgICB2b2lkIFdhc0NyZWF0ZWQoYm9vbCBkaWRTdWNjZWVkLCBTdHJpbmcgYXZhaWxhYmxl
RXh0ZW5zaW9ucywgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5zaW9ucykKICAgICB2b2lkIFdhc0xv
c3QoKQotICAgIHZvaWQgV2FzQ2hhbmdlZCgpOworICAgIHZvaWQgV2FzQ2hhbmdlZCgpCiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAKaW5kZXggNTIzMTU5ODE0Zjg2NWEzNTMyNjBi
NGU4MWQzNjU4YTViODRmMGEzNC4uMjk0NzVlMTE0N2MxN2RlNTk5NWQ4ODI0MzE1MDUwZjhjZDBj
MzNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCkBAIC0zMiw0MDcgKzMyLDY2NCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzZXRG
YWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6U2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN5bnRoZXNpemVHTEVycm9yKGVycm9yKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpTZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIGJv
b2wgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdDo6UmVwbHko
cmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRl
eHR1cmUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkFj
dGl2ZVRleHR1cmUodGV4dHVyZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjphdHRh
Y2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QXR0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QXR0YWNoU2hhZGVyKHByb2dy
YW0sIHNoYWRlcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgR0NHTHVpbnQg
aW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmluZEF0dHJpYkxvY2F0aW9uKGFyZzAsIGluZGV4LCBuYW1lKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCaW5kQXR0cmliTG9jYXRpb24oYXJnMCwgaW5kZXgsIG5hbWUpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRCdWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGFyZzEpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRCdWZmZXIodGFyZ2V0LCBhcmcxKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCaW5kQnVmZmVyKHRhcmdldCwgYXJnMSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhcmcxKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhcmcxKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgYXJnMSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGFyZzEpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRUZXh0dXJlKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kVGV4dHVyZSh0YXJnZXQsIGFyZzEpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkJpbmRUZXh0dXJlKHRhcmdldCwgYXJnMSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwg
R0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCbGVuZENvbG9yKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCbGVuZENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRXF1YXRpb24obW9kZSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6QmxlbmRFcXVhdGlvbihtb2RlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9k
ZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpibGVu
ZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0
b3IpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpibGVuZEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdD
R0xlbnVtIGRzdEFscGhhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFs
cGhhKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3Jj
QWxwaGEsIGRzdEFscGhhKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGVudW0gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7
CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1
czo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBf
cyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHRhcmdldCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1czo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXIobWFzayksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXIobWFz
aykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xl
YXJDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVl
LCBHQ0dMY2xhbXBmIGFscGhhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYg
ZGVwdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNs
ZWFyRGVwdGgoZGVwdGgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyRGVwdGgoZGVwdGgpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyU3RlbmNpbChH
Q0dMaW50IHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkNsZWFyU3RlbmNpbChzKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhclN0ZW5jaWwocykpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29sb3JNYXNrKEdDR0xi
b29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29s
ZWFuIGFscGhhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpDb2xvck1hc2soc3RhdGljX2Nhc3Q8Ym9vbD4ocmVkKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZ3Jl
ZW4pLCBzdGF0aWNfY2FzdDxib29sPihibHVlKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oYWxwaGEpKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpDb2xvck1hc2soc3RhdGljX2Nhc3Q8Ym9vbD4ocmVkKSwgc3RhdGljX2Nh
c3Q8Ym9vbD4oZ3JlZW4pLCBzdGF0aWNfY2FzdDxib29sPihibHVlKSwgc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxwaGEpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5Ojpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcGlsZVNoYWRlcihhcmcwKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDb21waWxlU2hhZGVyKGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zm
c2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
UGxhdGZvcm1HTE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVCdWZm
ZXIoKQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlQnVmZmVyKCksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlQnVmZmVyOjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUJ1ZmZlcigpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CiAgICAg
dWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVGcmFtZWJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUZyYW1lYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUZyYW1lYnVmZmVyKCksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlRnJhbWVidWZmZXI6OlJlcGx5KHJldHVyblZh
bHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xP
YmplY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlUHJvZ3JhbSgpCiB7CiAg
ICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVQcm9ncmFtKCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVQcm9ncmFtKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewogICAgIHVpbnQz
Ml90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlUmVuZGVyYnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlUmVuZGVyYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVJlbmRlcmJ1ZmZlcigpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVJlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFs
dWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1HTE9i
amVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVTaGFkZXIoR0NHTGVudW0g
YXJnMCkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNoYWRlcihhcmcwKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVTaGFkZXI6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2hhZGVyKGFyZzApLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNoYWRlcjo6UmVwbHkocmV0dXJu
VmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1H
TE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVUZXh0dXJlKCkKIHsK
ICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRleHR1cmUoKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlOjpSZXBseShyZXR1cm5WYWx1ZSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRleHR1cmUoKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkN1bGxGYWNlKG1vZGUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkN1bGxGYWNlKG1vZGUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAg
bWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZUJ1ZmZlcihhcmcwKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpEZWxldGVCdWZmZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpEZWxldGVGcmFtZWJ1ZmZlcihhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVGcmFtZWJ1ZmZl
cihhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250
ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlUHJvZ3JhbShhcmcwKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpEZWxldGVQcm9ncmFtKGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRl
bGV0ZVJlbmRlcmJ1ZmZlcihhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVSZW5kZXJidWZmZXIo
YXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlU2hhZGVyKGFyZzApLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkRlbGV0ZVNoYWRlcihhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlVGV4dHVy
ZShhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVUZXh0dXJlKGFyZzApKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlcHRoRnVuYyhHQ0dMZW51bSBm
dW5jKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0
aEZ1bmMoZnVuYyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVwdGhGdW5jKGZ1bmMpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlcHRoTWFzayhHQ0dMYm9vbGVh
biBmbGFnKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpE
ZXB0aE1hc2soc3RhdGljX2Nhc3Q8Ym9vbD4oZmxhZykpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlcHRoTWFz
ayhzdGF0aWNfY2FzdDxib29sPihmbGFnKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xh
bXBmIHpGYXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlcHRoUmFuZ2Uoek5lYXIs
IHpGYXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzAsIFBsYXRmb3JtR0xPYmplY3QgYXJn
MSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGV0YWNo
U2hhZGVyKGFyZzAsIGFyZzEpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRldGFjaFNoYWRlcihhcmcwLCBhcmcx
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkaXNh
YmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6RGlzYWJsZShjYXApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRpc2FibGUoY2FwKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3RWxlbWVudHMoR0NH
TGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0
KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6RHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RW5hYmxlKGNhcCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
RW5hYmxlKGNhcCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZmluaXNo
KCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RmluaXNo
KCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6RmluaXNoKCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Zmx1c2goKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpGbHVzaCgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZsdXNoKCkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMykKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGFyZzMpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCBhcmczKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcz
LCBHQ0dMaW50IGxldmVsKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdl
dCwgYXJnMywgbGV2ZWwpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdl
dCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCBhcmczLCBsZXZlbCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZyb250RmFj
ZShtb2RlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcm9udEZhY2UobW9kZSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0g
dGFyZ2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZW5lcmF0ZU1pcG1hcCh0YXJnZXQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdlbmVyYXRlTWlwbWFwKHRhcmdl
dCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIGJvb2wgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0
QWN0aXZlQXR0cmliKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGFyZzIpCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZUF0dHJpYihw
cm9ncmFtLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0
aXZlQXR0cmliOjpSZXBseShyZXR1cm5WYWx1ZSwgYXJnMiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0QWN0aXZlQXR0cmliOjpSZXBseShyZXR1cm5WYWx1ZSwgYXJnMikp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBib29sIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgYXJnMikKIHsKICAgICBib29sIHJldHVy
blZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybTo6UmVwbHkocmV0dXJuVmFsdWUsIGFy
ZzIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGlu
ZGV4KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3Jt
OjpSZXBseShyZXR1cm5WYWx1ZSwgYXJnMikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJMb2NhdGlvbihhcmcwLCBuYW1lKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJMb2NhdGlvbjo6UmVwbHko
cmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJMb2NhdGlvbihh
cmcwLCBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBdHRyaWJM
b2NhdGlvbjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKIH0KIAogR0NHTGludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRCdWZm
ZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaW50
MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldEJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSksIE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QnVmZmVyUGFyYW1ldGVyaTo6UmVwbHko
cmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEJ1
ZmZlclBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIFN0cmluZyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07
Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTdHJp
bmcobmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3RyaW5nOjpS
ZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN0cmluZyhuYW1l
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTdHJpbmc6OlJlcGx5KHJl
dHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBH
Q0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8Zmxv
YXQ+IHZhbHVlUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmJ1ZlNpemUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZsb2F0djo6UmVwbHkodmFs
dWVSZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAo
c2VuZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgp
LCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlLmJ1ZlNpemUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZsb2F0djo6UmVwbHkodmFs
dWVSZXBseSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEs
IHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKGZsb2F0KSk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEludGVnZXJ2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMaW50PiB2YWx1ZSkKIHsKICAgICBJUEM6OkFycmF5
UmVmZXJlbmNlPGludDMyX3Q+IHZhbHVlUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2VydihwbmFt
ZSwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
SW50ZWdlcnY6OlJlcGx5KHZhbHVlUmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1bHQpCi0gICAgICAgIG1lbWNweSh2YWx1ZS5kYXRh
LCB2YWx1ZVJlcGx5LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0g
ICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2Vy
dihwbmFtZSwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0SW50ZWdlcnY6OlJlcGx5KHZhbHVlUmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwgdmFsdWUuYnVmU2l6
ZSAqIHNpemVvZihpbnQzMl90KSk7CisgICAgfQogfQogCiBHQ0dMaW50NjQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6Z2V0SW50ZWdlcjY0KEdDR0xlbnVtIHBuYW1lKQogewogICAgIGlu
dDY0X3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2VyNjQocG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldEludGVnZXI2NDo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlZ2VyNjQocG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldEludGVnZXI2NDo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMaW50NjQ+KHJldHVyblZhbHVlKTsKIH0KIAog
R0NHTGludDY0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEludGVnZXI2NGkoR0NH
TGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4KQogewogICAgIGludDY0X3QgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRJbnRlZ2VyNjRpKHBuYW1lLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0SW50ZWdlcjY0aTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRJbnRlZ2VyNjRpKHBuYW1lLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcjY0aTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMaW50NjQ+KHJldHVyblZhbHVlKTsKIH0KIAog
R0NHTGludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRQcm9ncmFtaShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpHZXRQcm9ncmFtaShwcm9ncmFtLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0UHJvZ3JhbWk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldFByb2dyYW1pOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMU3BhbjxHQ0dMYm9v
bGVhbj4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPiB2YWx1ZVJlcGx5
OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEJvb2xlYW52OjpSZXBseSh2YWx1ZVJlcGx5KSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0
KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1
ZlNpemUgKiBzaXplb2YoYm9vbCkpOwotICAgIAotfQotCi1HQ0dMZW51bSBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpnZXRFcnJvcigpCi17Ci0gICAgdWludDMyX3QgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRFcnJvcigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEVycm9yOjpS
ZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsK
LSAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRCb29sZWFudihwbmFtZSwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0Qm9vbGVhbnY6OlJlcGx5KHZhbHVlUmVwbHkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5
LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihib29sKSk7CisgICAgfQogfQogCiBHQ0dM
aW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51
bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpOjpS
ZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKIH0KIAogU3RyaW5nIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFByb2dyYW1J
bmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBTdHJpbmcgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRQcm9ncmFtSW5mb0xvZyhhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRQcm9ncmFtSW5mb0xvZzo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRQcm9ncmFtSW5mb0xvZyhhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRQcm9ncmFtSW5mb0xvZzo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogR0NHTGludCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5h
bWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U2hh
ZGVyaShQbGF0Zm9ybUdMT2JqZWN0IGFyZzAsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMy
X3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRTaGFkZXJpKGFyZzAsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJpOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldFNoYWRlcmkoYXJnMCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFN0cmluZyBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsK
ICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJJbmZvTG9nKGFyZzApLCBNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlckluZm9Mb2c6OlJlcGx5KHJldHVyblZh
bHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVySW5mb0xvZyhhcmcwKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJJbmZvTG9nOjpSZXBseShy
ZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCkBAIC00
NDAsMTAyNCArNjk3LDE3NDkgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwKIHsKICAgICBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3QsIDI+IHJhbmdlUmVwbHk7CiAgICAgaW50MzJfdCBwcmVj
aXNpb25SZXBseSA9IHsgfTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFk
ZXJUeXBlLCBwcmVjaXNpb25UeXBlKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ6OlJlcGx5KHJhbmdlUmVwbHksIHByZWNpc2lvblJl
cGx5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5k
UmVzdWx0KSB7Ci0gICAgICAgIG1lbWNweShyYW5nZS5kYXRhLCByYW5nZVJlcGx5LmRhdGEoKSwg
cmFuZ2UuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgICAgIGlmIChwcmVjaXNpb24p
Ci0gICAgICAgICAgICAqcHJlY2lzaW9uID0gcHJlY2lzaW9uUmVwbHk7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hh
ZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpSZXBseShyYW5nZVJlcGx5LCBwcmVjaXNpb25S
ZXBseSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkocmFuZ2UuZGF0YSwg
cmFuZ2VSZXBseS5kYXRhKCksIHJhbmdlLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOworICAg
ICAgICAgICAgaWYgKHByZWNpc2lvbikKKyAgICAgICAgICAgICAgICAqcHJlY2lzaW9uID0gcHJl
Y2lzaW9uUmVwbHk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIFN0cmluZyBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQog
ewogICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclNvdXJjZShhcmcwKSwgTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJTb3VyY2U6OlJlcGx5KHJldHVyblZh
bHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVyU291cmNlKGFyZzApLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclNvdXJjZTo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogR0NHTGZs
b2F0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFRleFBhcmFtZXRlcmYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBmbG9hdCByZXR1cm5WYWx1ZSA9IHsg
fTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0VGV4UGFyYW1ldGVyZjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRleFBhcmFtZXRlcmY6OlJlcGx5KHJldHVyblZhbHVl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xpbnQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0VGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAg
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUZXhQYXJhbWV0
ZXJpKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFRleFBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRUZXhQYXJhbWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xmbG9hdD4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJh
eVJlZmVyZW5jZTxmbG9hdD4gdmFsdWVSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1mdihwcm9n
cmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0VW5pZm9ybWZ2OjpSZXBseSh2YWx1ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0KQotICAgICAgICBtZW1j
cHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2Yo
ZmxvYXQpKTsKLSAgICAKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybWZ2OjpSZXBseSh2YWx1ZVJlcGx5
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVS
ZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoZmxvYXQpKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0VW5pZm9ybWl2KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48R0NHTGludD4gdmFs
dWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiB2YWx1ZVJlcGx5OwotICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5idWZTaXplKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtaXY6OlJlcGx5KHZhbHVl
UmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNl
bmRSZXN1bHQpCi0gICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwg
dmFsdWUuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVu
aWZvcm1pdjo6UmVwbHkodmFsdWVSZXBseSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6
ZW9mKGludDMyX3QpKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xTcGFuPEdDR0x1aW50PiB2YWx1ZSkKIHsKICAgICBJUEM6OkFycmF5UmVmZXJl
bmNlPHVpbnQzMl90PiB2YWx1ZVJlcGx5OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybXVpdihwcm9ncmFt
LCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0VW5pZm9ybXVpdjo6UmVwbHkodmFsdWVSZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2VuZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5
KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKHVp
bnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRVbmlmb3JtdWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5idWZTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtdWl2OjpSZXBseSh2YWx1ZVJl
cGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFs
dWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9
CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgYXJnMCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtTG9jYXRpb24oYXJnMCwgbmFtZSksIE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybUxvY2F0aW9uOjpSZXBseShy
ZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1Mb2NhdGlvbihh
cmcwLCBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3Jt
TG9jYXRpb246OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKIEdDR0xzaXplaXB0ciBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewog
ICAgIHVpbnQ2NF90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFt
ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VmVydGV4QXR0cmliT2Zm
c2V0OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAx
MF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFZlcnRl
eEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldFZlcnRleEF0dHJpYk9mZnNldDo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KHJldHVyblZhbHVlKTsKIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpoaW50KEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gbW9kZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6SGludCh0YXJnZXQsIG1vZGUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkhpbnQodGFyZ2V0LCBt
b2RlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpJc0J1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c0J1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0J1
ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0J1ZmZlcjo6
UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dM
Ym9vbGVhbj4ocmV0dXJuVmFsdWUpOwogfQogCiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5Ojppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewogICAgIGJvb2wgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpJc0VuYWJsZWQoY2FwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c0VuYWJsZWQ6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNF
bmFibGVkKGNhcCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNFbmFibGVk
OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdD
R0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewog
ICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0ZyYW1lYnVmZmVyKGFyZzApLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzRnJhbWVidWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6SXNGcmFtZWJ1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpJc0ZyYW1lYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7
CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmlzUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUHJvZ3Jh
bShhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1Byb2dyYW06OlJl
cGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNQcm9ncmFtKGFyZzAp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUHJvZ3JhbTo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4o
cmV0dXJuVmFsdWUpOwogfQogCiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzUmVuZGVyYnVmZmVyKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzUmVuZGVyYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OklzUmVuZGVyYnVmZmVyKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OklzUmVuZGVyYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAK
IEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmlzU2hhZGVyKFBsYXRm
b3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwotICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTaGFkZXIoYXJnMCks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTaGFkZXI6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTaGFkZXIoYXJnMCksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTaGFkZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgp
OworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVl
KTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNUZXh0
dXJlKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9
OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUZXh0
dXJlKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzVGV4dHVyZTo6
UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1RleHR1cmUoYXJn
MCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUZXh0dXJlOjpSZXBseShy
ZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFu
PihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
bGluZVdpZHRoKEdDR0xmbG9hdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpMaW5lV2lkdGgoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TGluZVdpZHRo
KGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TGlua1Byb2dyYW0oYXJnMCksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6TGlua1Byb2dyYW0oYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0p
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpwb2x5
Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UG9seWdvbk9mZnNldChmYWN0b3Is
IHVuaXRzKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1w
ZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgc3RhdGljX2Nhc3Q8Ym9v
bD4oaW52ZXJ0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIHN0YXRpY19j
YXN0PGJvb2w+KGludmVydCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpT
Y2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IGFyZzAs
IGNvbnN0IFN0cmluZyYgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6U2hhZGVyU291cmNlKGFyZzAsIGFyZzEpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlNoYWRl
clNvdXJjZShhcmcwLCBhcmcxKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NH
THVpbnQgbWFzaykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywg
cmVmLCBtYXNrKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzaykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbE1hc2sobWFzayksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
U3RlbmNpbE1hc2sobWFzaykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBt
YXNrKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVu
Y2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxNYXNrU2Vw
YXJhdGUoZmFjZSwgbWFzaykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6U3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbE9w
KGZhaWwsIHpmYWlsLCB6cGFzcykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0g
ZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZh
aWwsIHpmYWlsLCB6cGFzcykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCBwYXJhbSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJh
bSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5p
Zm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMWYobG9jYXRpb24sIHgpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm0xZihsb2NhdGlvbiwgeCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0xZnYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVu
Y2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNp
emUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZT
aXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgeCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB4KSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtMWkobG9jYXRpb24sIHgpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPih2LmRhdGEpLCB2LmJ1
ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVm
ZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHYuZGF0YSks
IHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0
IHkpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZv
cm0yZihsb2NhdGlvbiwgeCwgeSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB4
LCB5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJm
dihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBmbG9hdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0y
ZnYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGludCB4LCBHQ0dMaW50IHkpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5p
Zm9ybTJpKGxvY2F0aW9uLCB4LCB5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IHYpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlVuaWZvcm0yaXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odi5kYXRhKSwgdi5idWZTaXplKSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQz
Ml90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPih2LmRhdGEpLCB2LmJ1ZlNpemUp
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlm
b3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxv
YXQgeikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5p
Zm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2YobG9jYXRp
b24sIHgsIHksIHopKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZs
b2F0PiB2KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpV
bmlmb3JtM2Z2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
VW5pZm9ybTNmdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2kobG9jYXRpb24sIHgsIHks
IHopLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeikpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTNpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiB2KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+
KHYuZGF0YSksIHYuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zaXYobG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQz
Ml90Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHosIEdDR0xmbG9hdCB3KQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGYobG9jYXRpb24sIHgs
IHksIHosIHcpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdykp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9y
bTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00ZnYobG9j
YXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGZ2KGxv
Y2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6
LCB3KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm00aXYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRpdihsb2NhdGlvbiwg
SVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMy
X3QqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGl2KGxvY2F0
aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
aW50MzJfdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVl
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3Jt
TWF0cml4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWUu
ZGF0YSksIHZhbHVlLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNl
PGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWUuZGF0YSksIHZhbHVl
LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5Ojp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZSkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwg
c3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlLmRhdGEpLCB2YWx1ZS5idWZTaXpl
KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8
Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlLmRhdGEpLCB2YWx1ZS5idWZTaXplKSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDRm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0
IEdDR0xmbG9hdD4gdmFsdWUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRy
YW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPih2YWx1ZS5kYXRhKSwgdmFsdWUuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2
YWx1ZS5kYXRhKSwgdmFsdWUuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBhcmcwKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVc2VQcm9ncmFt
KGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVzZVByb2dyYW0oYXJnMCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VmFsaWRhdGVQcm9ncmFtKGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZhbGlkYXRlUHJvZ3Jh
bShhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250
ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Ojp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjFmKGluZGV4
LCB4KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCkpOworICAgICAgICBp
ZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliMWZ2KEdD
R0x1aW50IGluZGV4LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDE+IHZhbHVlcykKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMWZ2
KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0LCAxPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlZlcnRleEF0dHJpYjFmdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMT4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUp
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0
ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgeCwgeSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRl
eEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAyPiB2
YWx1ZXMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZl
cnRleEF0dHJpYjJmdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8
ZmxvYXQsIDI+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZh
bHVlcy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dM
ZmxvYXQgeSwgR0NHTGZsb2F0IHopCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeikpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDM+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliM2Z2KGluZGV4LCBJUEM6
OkFycmF5UmVmZXJlbmNlPGZsb2F0LCAzPihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
dmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJp
YjNmdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMz4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWI0ZihH
Q0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5LCBHQ0dMZmxvYXQgeiwgR0NH
TGZsb2F0IHcpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlZlcnRleEF0dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhB
dHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMZmxvYXQsIDQ+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBJUEM6OkFycmF5
UmVmZXJlbmNlPGZsb2F0LCA0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWVz
LmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjRmdihp
bmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdD
R0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5v
cm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBzdGF0aWNfY2FzdDxib29sPihub3JtYWxpemVkKSwgc3RyaWRl
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0
cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RhdGljX2Nhc3Q8Ym9vbD4obm9ybWFsaXpl
ZCksIHN0cmlkZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZpZXdwb3J0KEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZpZXdwb3J0KHgsIHksIHdpZHRo
LCBoZWlnaHQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJ1ZmZlckRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgYXJnMSwgR0NHTGVudW0gdXNhZ2UpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJ1ZmZlckRhdGEw
KHRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFyZzEpLCB1c2FnZSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6QnVmZmVyRGF0YTAodGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnMSksIHVzYWdl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpidWZm
ZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEsIEdD
R0xlbnVtIHVzYWdlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpCdWZmZXJEYXRhMSh0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSwg
dXNhZ2UpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkJ1ZmZlckRhdGExKHRhcmdldCwgSVBDOjpBcnJheVJlZmVy
ZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEp
LCBkYXRhLmJ1ZlNpemUpLCB1c2FnZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRw
dHIgb2Zmc2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6
ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4ob2Zmc2V0KSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZWFkblBpeGVscyhHQ0dM
aW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPEdDR0x2b2lkPiBkYXRhKQogewog
ICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4gZGF0YVJlcGx5OwotICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVh
ZG5QaXhlbHMwKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5idWZTaXpl
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFkblBpeGVsczA6OlJlcGx5
KGRhdGFSZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBp
ZiAoc2VuZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSwgZGF0YVJlcGx5LmRhdGEo
KSwgZGF0YS5idWZTaXplICogc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICAKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlYWRuUGl4ZWxzMCh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6UmVhZG5QaXhlbHMwOjpSZXBseShkYXRhUmVwbHkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEsIGRhdGFSZXBseS5kYXRhKCksIGRhdGEu
YnVmU2l6ZSAqIHNpemVvZih1aW50OF90KSk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnJlYWRuUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlJlYWRuUGl4ZWxzMSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFk
blBpeGVsczEoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFu
PGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlRleEltYWdlMkQwKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0YSks
IHBpeGVscy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4SW1hZ2UyRDAodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlMkQxKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlMkQxKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBwaXhlbHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFN1YkltYWdlMkQwKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0
YSksIHBpeGVscy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UyRDAodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UyRDEodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
b2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UyRDEodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRh
KSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdlMkQwKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdl
U2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdlMkQxKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFn
ZTJEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRh
dGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90
PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNp
emUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDAodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDEodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNp
emUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRDEodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQp
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQs
IHByaW1jb3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJz
dCwgY291bnQsIHByaW1jb3VudCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xz
aXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaSBw
cmltY291bnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG9mZnNldCksIHByaW1jb3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0VsZW1lbnRzSW5z
dGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSwg
cHJpbWNvdW50KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29y
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhB
dHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yKGluZGV4LCBkaXZpc29yKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogUGxhdGZvcm1HTE9iamVjdCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiB7CiAgICAg
dWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheSgpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5OjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5KCksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJyYXk6OlJlcGx5KHJldHVyblZh
bHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVj
dCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpE
ZWxldGVWZXJ0ZXhBcnJheShhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVWZXJ0ZXhBcnJheShh
cmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzVmVydGV4QXJyYXkoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6SXNWZXJ0ZXhBcnJheTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpJc1ZlcnRleEFycmF5KGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzVmVydGV4QXJyYXk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpCaW5kVmVydGV4QXJyYXkoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFZlcnRleEFycmF5
KGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFy
Z2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xz
aXplaXB0ciBhcmc0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHJlYWRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od3JpdGVPZmZz
ZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnNCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvcHlCdWZm
ZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cmVhZE9mZnNldCksIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih3cml0ZU9mZnNldCksIHN0YXRpY19j
YXN0PHVpbnQ2NF90Pihhcmc0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRw
dHIgb2Zmc2V0LCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBJUEM6OkFycmF5UmVm
ZXJlbmNlPHVpbnQ4X3Q+IGRhdGFSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSwgZGF0YS5idWZTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJTdWJEYXRhOjpSZXBseShkYXRh
UmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNl
bmRSZXN1bHQpCi0gICAgICAgIG1lbWNweShkYXRhLmRhdGEsIGRhdGFSZXBseS5kYXRhKCksIGRh
dGEuYnVmU2l6ZSAqIHNpemVvZih1aW50OF90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG9mZnNldCksIGRhdGEuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0QnVmZmVyU3ViRGF0YTo6UmVwbHkoZGF0YVJlcGx5KSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhLCBkYXRhUmVwbHkuZGF0YSgp
LCBkYXRhLmJ1ZlNpemUgKiBzaXplb2YodWludDhfdCkpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwg
R0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RY
MCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZp
ZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpCbGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBk
c3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RnJhbWVidWZm
ZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmludmFs
aWRhdGVGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVt
PiBhdHRhY2htZW50cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6SW52YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRzLmRh
dGEpLCBhdHRhY2htZW50cy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SW52YWxpZGF0ZUZyYW1l
YnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRzLmRhdGEpLCBhdHRhY2htZW50cy5idWZT
aXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTFNwYW48Y29uc3Qg
R0NHTGVudW0+IGF0dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYXR0
YWNobWVudHMuZGF0YSksIGF0dGFjaG1lbnRzLmJ1ZlNpemUpLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBJUEM6OkFy
cmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
YXR0YWNobWVudHMuZGF0YSksIGF0dGFjaG1lbnRzLmJ1ZlNpemUpLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpy
ZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6UmVhZEJ1ZmZlcihzcmMpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlYWRCdWZmZXIo
c3JjKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkg
c2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0
ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdG9yYWdlMkQodGFy
Z2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0
ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxz
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhJbWFn
ZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUp
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpUZXhJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVs
cy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojp0ZXhJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhJbWFnZTNEMSh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4SW1hZ2UzRDEo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnRleFN1YkltYWdlM0Qo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQg
eW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJ
bWFnZTNEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy5kYXRhKSwgcGl4ZWxzLmJ1
ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250
ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Ojp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFN1YkltYWdlM0QxKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdWJJbWFn
ZTNEMSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29weVRl
eFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZz
ZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQg
eSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5VGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDb3B5VGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2Vk
VGV4SW1hZ2UzRDAodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90Pihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUp
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4SW1hZ2UzRDAodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgSVBD
OjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2VkVGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdD
R0xzaXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4SW1hZ2UzRDEodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGlt
YWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNv
bXByZXNzZWRUZXhJbWFnZTNEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
b2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0
YSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJl
c3NlZFRleFN1YkltYWdlM0QwKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJl
ZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRh
dGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RDAodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6
ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNv
bXByZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTNE
MSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQp
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRDEodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwg
aW1hZ2VTaXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAK
IEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0RnJhZ0RhdGFMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBp
bnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0RnJhZ0RhdGFMb2NhdGlvbihwcm9ncmFtLCBuYW1lKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFnRGF0YUxvY2F0aW9uOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYWdEYXRhTG9jYXRp
b24ocHJvZ3JhbSwgbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
RnJhZ0RhdGFMb2NhdGlvbjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMXVpKGxvY2F0aW9uLCB2MCks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0ydWkoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm0ydWkobG9jYXRpb24sIHYwLCB2MSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM3VpKGxvY2F0aW9uLCB2
MCwgdjEsIHYyKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYy
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlm
b3JtNHVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVp
bnQgdjIsIEdDR0x1aW50IHYzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2MyksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0xdWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgSVBD
OjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJf
dCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0xdWl2
KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBp
ZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTJ1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTJ1
aXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtM3VpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTN1aXYobG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3Jt
M3Vpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm00dWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNHVpdihsb2NhdGlv
biwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MzJfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZv
cm00dWl2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJp
eDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJv
b2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9z
ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZv
cm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRh
dGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgzeDJm
dihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRh
dGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDJ4NGZ2KGxvY2F0
aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZT
aXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDJ4NGZ2KGxvY2F0aW9uLCBzdGF0aWNf
Y2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJp
eDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJv
b2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9z
ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRh
dGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZv
cm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRh
dGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgzeDRm
dihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRh
dGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gZGF0YSkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDR4M2Z2KGxvY2F0
aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZT
aXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDR4M2Z2KGxvY2F0aW9uLCBzdGF0aWNf
Y2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmli
STRpKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dM
aW50IHcpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZl
cnRleEF0dHJpYkk0aShpbmRleCwgeCwgeSwgeiwgdyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0
cmliSTRpKGluZGV4LCB4LCB5LCB6LCB3KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50IGluZGV4LCBHQ0dM
U3Bhbjxjb25zdCBHQ0dMaW50LCA0PiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8aW50MzJfdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odmFs
dWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYkk0
aXYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdCwgND4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYkk0
dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdD
R0x1aW50IHcpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OlZlcnRleEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRl
eEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludCwgND4gdmFsdWVzKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwgSVBD
OjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0
ZXhBdHRyaWJJNHVpdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdCwgND4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNp
emUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2
ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliSVBvaW50ZXIo
aW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBz
dHJpZGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5k
LCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0YXJ0LCBlbmQsIGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0J1ZmZlcnMoR0NHTFNwYW48Y29uc3QgR0NHTGVudW0+
IGJ1ZnMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRy
YXdCdWZmZXJzKElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDMyX3QqPihidWZzLmRhdGEpLCBidWZzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpEcmF3QnVmZmVycyhJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQzMl90Kj4oYnVmcy5kYXRhKSwgYnVmcy5idWZTaXplKSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xlYXJCdWZmZXJpdihH
Q0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTGlu
dD4gdmFsdWVzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpDbGVhckJ1ZmZlcml2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPih2YWx1ZXMuZGF0YSksIHZh
bHVlcy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdi
dWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQnVmZmVydWl2KEdDR0xl
bnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4g
dmFsdWVzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpD
bGVhckJ1ZmZlcnVpdihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWlu
dDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2YWx1ZXMuZGF0YSksIHZh
bHVlcy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3
YnVmZmVyLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVmU2l6ZSkpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQnVmZmVyZnYoR0NH
TGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9h
dD4gdmFsdWVzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxm
bG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVz
LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZl
ciwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9h
dCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhckJ1ZmZlcmZpKEdDR0xlbnVtIGJ1ZmZl
ciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xpbnQgc3RlbmNpbCkK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZm
ZXJmaShidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpD
bGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNy
ZWF0ZVF1ZXJ5KCkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVF1ZXJ5KCksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUXVlcnk6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUXVlcnkoKSwgTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVRdWVyeTo6UmVwbHkocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVRdWVy
eShxdWVyeSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlUXVlcnkocXVlcnkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojppc1F1ZXJ5KFBsYXRm
b3JtR0xPYmplY3QgcXVlcnkpCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnkocXVlcnkp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnk6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNRdWVyeShxdWVyeSksIE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNRdWVyeTo6UmVwbHkocmV0dXJuVmFsdWUpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUp
OwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJlZ2luUXVlcnkoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkJlZ2luUXVlcnkodGFyZ2V0LCBxdWVyeSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbmRRdWVy
eSh0YXJnZXQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuZFF1ZXJ5KHRhcmdldCkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAK
IFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0UXVlcnko
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICB1aW50MzJfdCByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFF1ZXJ5KHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldFF1ZXJ5OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFF1ZXJ5KHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldFF1ZXJ5OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwogfQogCiBHQ0dMdWludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpnZXRRdWVyeU9iamVjdHVpKFBsYXRmb3JtR0xPYmplY3QgcXVlcnksIEdDR0xlbnVtIHBuYW1l
KQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UXVlcnlPYmplY3R1aShxdWVyeSwgcG5h
bWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFF1ZXJ5T2JqZWN0dWk6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UXVlcnlPYmpl
Y3R1aShxdWVyeSwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFF1ZXJ5T2JqZWN0dWk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6Y3JlYXRlU2FtcGxlcigpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVh
dGVTYW1wbGVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2Ft
cGxlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwg
MTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVT
YW1wbGVyKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2FtcGxl
cjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVTYW1wbGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RGVsZXRlU2FtcGxlcihzYW1wbGVyKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxl
dGVTYW1wbGVyKHNhbXBsZXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQog
ewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1NhbXBsZXIoc2FtcGxlciksIE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6SXNTYW1wbGVyOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzU2FtcGxlcihzYW1wbGVyKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpJc1NhbXBsZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kU2FtcGxlcihHQ0dMdWludCB1
bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xP
YmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNh
bXBsZXIsIHBuYW1lLCBwYXJhbSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2FtcGxlclBhcmFtZXRlcmkoc2Ft
cGxlciwgcG5hbWUsIHBhcmFtKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1l
LCBwYXJhbSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUs
IHBhcmFtKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250
ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGZsb2F0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NH
TGVudW0gcG5hbWUpCiB7CiAgICAgZmxvYXQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5
bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTYW1wbGVyUGFyYW1ldGVy
ZihzYW1wbGVyLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
U2FtcGxlclBhcmFtZXRlcmY6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNhbXBsZXJQYXJhbWV0ZXJmOjpSZXBseShyZXR1cm5W
YWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBHQ0dMaW50IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgaW50MzJfdCByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTYW1wbGVyUGFyYW1ldGVyaTo6UmVwbHkocmV0dXJuVmFs
dWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVy
LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBh
cmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKIEdDR0xzeW5jIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmZlbmNl
U3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKIHsKICAgICB1aW50
NjRfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkZlbmNlU3luYyhjb25kaXRpb24sIGZsYWdzKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGZW5jZVN5bmM6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZlbmNlU3luYzo6UmVwbHkocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ocmV0dXJuVmFsdWUpKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6aXNTeW5jKEdDR0xzeW5jIGFyZzApCiB7CiAgICAgYm9vbCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzU3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oYXJnMCkpKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1N5
bmM6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEw
X3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTeW5jKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSkpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU3luYzo6UmVwbHkocmV0dXJuVmFs
dWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJu
VmFsdWUpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVN5
bmMoR0NHTHN5bmMgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6RGVsZXRlU3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oYXJnMCkpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVTeW5jKHN0YXRpY19jYXN0
PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSkpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiBHQ0dMZW51bSBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGllbnRXYWl0U3lu
YyhHQ0dMc3luYyBhcmcwLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91dCkK
IHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudFdhaXRTeW5jKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odGltZW91dCkpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkNsaWVudFdhaXRTeW5jOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkNsaWVudFdhaXRTeW5jKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9j
YXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odGltZW91
dCkpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudFdhaXRTeW5jOjpS
ZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OndhaXRTeW5jKEdDR0xzeW5jIGFy
ZzAsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OldhaXRTeW5jKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNf
Y2FzdDxpbnQ2NF90Pih0aW1lb3V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6V2FpdFN5bmMoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgZmxhZ3MsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGludCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRTeW5jaShHQ0dMc3luYyBhcmcwLCBHQ0dMZW51
bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3luY2koc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgcG5hbWUpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN5bmNpOjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN5bmNpKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSksIHBuYW1lKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTeW5jaTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7CiAg
ICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRyYW5zZm9ybUZl
ZWRiYWNrKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVHJhbnNm
b3JtRmVlZGJhY2s6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRl
VHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCBpZCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soaWQp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0K
IAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IGlkKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1Ry
YW5zZm9ybUZlZWRiYWNrKGlkKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c1RyYW5zZm9ybUZlZWRiYWNrOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OklzVHJhbnNmb3JtRmVlZGJhY2soaWQpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OklzVHJhbnNmb3JtRmVlZGJhY2s6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kVHJhbnNmb3JtRmVlZGJh
Y2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGlkKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kVHJhbnNmb3JtRmVlZGJhY2sodGFy
Z2V0LCBpZCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgaWQp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJlZ2lu
VHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhw
cmltaXRpdmVNb2RlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1p
dGl2ZU1vZGUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6RW5kVHJhbnNmb3JtRmVlZGJhY2soKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpF
bmRUcmFuc2Zvcm1GZWVkYmFjaygpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZl
ck1vZGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWluZ3Ms
IGJ1ZmZlck1vZGUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBhcmcyKQogewotICAgIHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKHByb2dyYW0sIGluZGV4KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmc6OlJlcGx5KGFyZzIpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcocHJvZ3JhbSwgaW5kZXgpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Zzo6UmVwbHkoYXJnMikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpQYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZXN1bWVUcmFuc2Zv
cm1GZWVkYmFjaygpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZEJ1ZmZl
ckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBi
dWZmZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJp
bmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZEJ1
ZmZlckJhc2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zm
c2V0LCBHQ0dMc2l6ZWlwdHIgYXJnNCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihhcmc0KSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihhcmc0KSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIFZlY3RvcjxHQ0dMdWludD4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewogICAgIFZlY3Rvcjx1aW50MzJfdD4gcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRVbmlmb3JtSW5kaWNlcyhwcm9ncmFtLCB1bmlmb3JtTmFtZXMpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1JbmRpY2VzOjpSZXBseShyZXR1
cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1JbmRpY2VzKHByb2dy
YW0sIHVuaWZvcm1OYW1lcyksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
VW5pZm9ybUluZGljZXM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIFZlY3RvcjxHQ0dMaW50PiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5OjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAg
ICBWZWN0b3I8aW50MzJfdD4gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3Jtcyhwcm9ncmFtLCB1
bmlmb3JtSW5kaWNlcywgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldEFjdGl2ZVVuaWZvcm1zOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1zKHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybXM6OlJl
cGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAK
IEdDR0x1aW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFVuaWZvcm1CbG9ja0lu
ZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tO
YW1lKQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJv
Z3JhbSwgdW5pZm9ybUJsb2NrTmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0VW5pZm9ybUJsb2NrSW5kZXg6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2NrTmFt
ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybUJsb2NrSW5k
ZXg6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CiB9CiAKIFN0cmluZyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRBY3RpdmVVbmlm
b3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgpCiB7CiAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybUJsb2Nr
TmFtZShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZTo6UmVwbHkocmV0dXJuVmFsdWUp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKHByb2dy
YW0sIHVuaWZvcm1CbG9ja0luZGV4KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybUJs
b2NrQmluZGluZyhwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGlu
ZyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybUJsb2NrQmluZGluZyhwcm9ncmFtLCB1bmlmb3JtQmxv
Y2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0NHTHVpbnQg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
U3BhbjxHQ0dMaW50PiBwYXJhbXMpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PiBwYXJhbXNSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KHByb2dyYW0s
IHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2OjpSZXBseShwYXJh
bXNSZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAo
c2VuZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5KHBhcmFtcy5kYXRhLCBwYXJhbXNSZXBseS5kYXRh
KCksIHBhcmFtcy5idWZTaXplICogc2l6ZW9mKGludDMyX3QpKTsKLSAgICAKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KHBy
b2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zLmJ1ZlNpemUpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2OjpSZXBs
eShwYXJhbXNSZXBseSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KHBhcmFt
cy5kYXRhLCBwYXJhbXNSZXBseS5kYXRhKCksIHBhcmFtcy5idWZTaXplICogc2l6ZW9mKGludDMy
X3QpKTsKKyAgICB9CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSwgTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCOjpSZXBs
eShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQ
bGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCkKIHsKICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5
T0VTKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJy
YXlPRVM6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIs
IDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRl
VmVydGV4QXJyYXlPRVMoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVh
dGVWZXJ0ZXhBcnJheU9FUzo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVZlcnRleEFycmF5T0VTKGFy
ZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVZlcnRleEFycmF5T0VTKGFyZzApKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojppc1ZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0g
eyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNW
ZXJ0ZXhBcnJheU9FUyhhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c1ZlcnRleEFycmF5T0VTOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OklzVmVydGV4QXJyYXlPRVMoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6SXNWZXJ0ZXhBcnJheU9FUzo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUpOwogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRWZXJ0ZXhBcnJheU9FUyhhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kVmVydGV4
QXJyYXlPRVMoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIFN0cmluZyBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVj
dCBhcmcwKQogewogICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2VBTkdMRShhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEU6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKGFyZzApLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkcmF3QnVmZmVyc0VYVChH
Q0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYnVmcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0J1ZmZlcnNFWFQoSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZnMuZGF0YSksIGJ1
ZnMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdCdWZmZXJzRVhUKElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihidWZzLmRh
dGEpLCBidWZzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NH
TGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3QXJyYXlzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMdm9pZHB0ciBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0
KSwgcHJpbWNvdW50KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSht
b2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHByaW1jb3Vu
dCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRy
aWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gcGFyYW1zKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gcGFyYW1z
UmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHBuYW1lLCBwYXJhbXMuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0SW50ZXJuYWxmb3JtYXRpdjo6UmVwbHkocGFyYW1zUmVwbHkpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1bHQpCi0gICAgICAg
IG1lbWNweShwYXJhbXMuZGF0YSwgcGFyYW1zUmVwbHkuZGF0YSgpLCBwYXJhbXMuYnVmU2l6ZSAq
IHNpemVvZihpbnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBu
YW1lLCBwYXJhbXMuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0SW50ZXJuYWxmb3JtYXRpdjo6UmVwbHkocGFyYW1zUmVwbHkpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1lbWNweShwYXJhbXMuZGF0YSwgcGFyYW1zUmVwbHkuZGF0YSgpLCBwYXJh
bXMuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6Om11bHRpRHJhd0FycmF5c0FOR0xFKEdDR0xlbnVtIG1vZGUs
IEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBjb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0FycmF5c0FOR0xFKG1vZGUsIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oZmly
c3RzLmRhdGEpLCBmaXJzdHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMuYnVm
U2l6ZSksIGRyYXdjb3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TXVsdGlEcmF3QXJyYXlzQU5HTEUobW9k
ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGlu
dDMyX3QqPihmaXJzdHMuZGF0YSksIGZpcnN0cy5idWZTaXplKSwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihjb3VudHMuZGF0YSks
IGNvdW50cy5idWZTaXplKSwgZHJhd2NvdW50KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjptdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dM
ZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291
bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+
KGZpcnN0cy5kYXRhKSwgZmlyc3RzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwgY291bnRz
LmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgaW50MzJfdCo+KGluc3RhbmNlQ291bnRzLmRhdGEpLCBpbnN0YW5jZUNvdW50cy5idWZT
aXplKSwgZHJhd2NvdW50KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdBcnJheXNJbnN0YW5jZWRB
TkdMRShtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgaW50MzJfdCo+KGZpcnN0cy5kYXRhKSwgZmlyc3RzLmJ1ZlNpemUpLCBJUEM6OkFycmF5
UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50
cy5kYXRhKSwgY291bnRzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGluc3RhbmNlQ291bnRzLmRhdGEpLCBpbnN0
YW5jZUNvdW50cy5idWZTaXplKSwgZHJhd2NvdW50KSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVt
IG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdFbGVt
ZW50c0FOR0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMuYnVmU2l6ZSksIHR5cGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQz
Ml90Kj4ob2Zmc2V0cy5kYXRhKSwgb2Zmc2V0cy5idWZTaXplKSwgZHJhd2NvdW50KSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpNdWx0aURyYXdFbGVtZW50c0FOR0xFKG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBj
b3VudHMuYnVmU2l6ZSksIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4ob2Zmc2V0cy5kYXRhKSwgb2Zmc2V0cy5idWZTaXpl
KSwgZHJhd2NvdW50KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1h
cmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5OjptdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNl
Q291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpNdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQz
Ml90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMuYnVmU2l6ZSksIHR5cGUsIElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4ob2Zmc2V0cy5k
YXRhKSwgb2Zmc2V0cy5idWZTaXplKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihpbnN0YW5jZUNvdW50cy5kYXRhKSwgaW5zdGFu
Y2VDb3VudHMuYnVmU2l6ZSksIGRyYXdjb3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TXVsdGlEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwgY291bnRzLmJ1ZlNp
emUpLCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgaW50MzJfdCo+KG9mZnNldHMuZGF0YSksIG9mZnNldHMuYnVmU2l6ZSksIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oaW5z
dGFuY2VDb3VudHMuZGF0YSksIGluc3RhbmNlQ291bnRzLmJ1ZlNpemUpLCBkcmF3Y291bnQpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggNWVlNjhiYzA5ZDA1MzFmNGI2ZDgyNmQ2MGM3NGFiNGY0N2ZjNmU1ZS4uOTQ1
YTllYzFjYWZkNzk4YmIzYTkyZTVjOGU5ZTBiMjY2MjcwZDVjMyAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTAy
LTA0ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSBzaG91bGQgc3VwcG9ydCBsb3NpbmcgdGhlIGNvbnRl
eHQgYW5kIHNob3VsZCBsb3NlIHRoZSBjb250ZXh0IG9uIHRpbWVvdXRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEzOTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0ZSBjYWxscyB0byBsb3Nl
IHRoZSBjb250ZXh0IG9uIHRpbWVvdXRzLgorCisgICAgICAgIEdlbmVyYXRlIHRoZSBzZW5kIGNh
bGxzIGFzIGNhbGxzIHRvIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIHNlbmQgdGhlCisgICAgICAg
IG1lc3NhZ2VzLiBUaGUgaGVscGVyIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdGhlIG5vbi1jaGFu
Z2luZyBhcmd1bWVudHMuCisKKyAgICAgICAgTW92ZSBmZXcgbWVzc2FnZXMgdG8gYmUgaW1wbGVt
ZW50ZWQgYnkgaGFuZC4KKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbDoK
KwogMjAyMS0wMi0wNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2J1aWxkLndlYmtpdC5vcmddIFVwZGF0ZSBkYXNoYm9hcmQgbGlua3MgZm9yIGxheW91
dCB0ZXN0IHJlc3VsdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13
ZWJnbCBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAppbmRleCBmMTZiNDIyMjlj
ZjJmODI4YzY2YzdlN2I0MTc3M2MyZWJlNDQzMTE0Li5hZWRlZWQzZDZlMjViYTRlMWQ4NWYzNGFi
MmQ5ZTNhY2ViYjQ0ZmRjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAt
d2ViZ2wKKysrIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCkBAIC05OSw2ICs5
OSw4IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIE5vdFJlZkNvdW50ZWQg
e3sKICNlbmRpZgogICAgIHZvaWQgRW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcgZXh0ZW5z
aW9uKQogICAgIHZvaWQgTm90aWZ5TWFya0NvbnRleHRDaGFuZ2VkKCkKKyAgICB2b2lkIFN5bnRo
ZXNpemVHTEVycm9yKHVpbnQzMl90IGVycm9yKQorICAgIHZvaWQgR2V0RXJyb3IoKSAtPiAodWlu
dDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiB7fQogfX0KIApAQCAtNTg1LDIyICs1ODcs
MjQgQEAgY2xhc3Mgd2Via2l0X2lwY19jcHBfcHJveHlfaW1wbChvYmplY3QpOgogICAgICAgICBp
bl9leHBycyA9ICIsICIuam9pbihbc3RyKGkpIGZvciBpIGluIHNlbGYuaW5fZXhwcnNdKQogICAg
ICAgICBvdXRfZXhwcnMgPSAiLCAiLmpvaW4oc3RyKG8pIGZvciBvIGluIHNlbGYub3V0X2V4cHJz
KQogICAgICAgICBpc19hc3luYyA9IHNlbGYucmV0dXJuX3R5cGUuaXNfdm9pZCgpIGFuZCBsZW4o
b3V0X2V4cHJzKSA9PSAwCisgICAgICAgIHNlbGYuY2FsbF9zdG10cyArPSBbICJpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeyIgXQogICAgICAgICBpZiBpc19hc3luYzoKICAgICAgICAgICAgIHNlbGYu
Y2FsbF9zdG10cyArPSBbCi0gICAgICAgICAgICAgICAgZiJzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6e3NlbGYubXNnX25hbWV9KHtpbl9leHByc30pLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7IiwKKyAgICAgICAgICAgICAgICBmIiAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6e3NlbGYubXNn
X25hbWV9KHtpbl9leHByc30pKTsiLAogICAgICAgICAgICAgXQogICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgc2VuZF9yZXN1bHQgPSAiIgotICAgICAgICAgICAgaWYgc2VsZi5wb3N0X2NhbGxf
c3RtdHM6IAotICAgICAgICAgICAgICAgIHNlbmRfcmVzdWx0ID0gImF1dG8gc2VuZFJlc3VsdCA9
ICIKLSAgICAgICAgICAgICAgICBzZWxmLnBvc3RfY2FsbF9zdG10cyA9IFsKLSAgICAgICAgICAg
ICAgICAgICAgImlmIChzZW5kUmVzdWx0KSIgKyAoIiB7IiBpZiBsZW4oc2VsZi5wb3N0X2NhbGxf
c3RtdHMpID4gMSBlbHNlICIiKQotICAgICAgICAgICAgICAgIF0gKyBbIiAgICAiICsgcyBmb3Ig
cyBpbiBzZWxmLnBvc3RfY2FsbF9zdG10c10gKyBbCi0gICAgICAgICAgICAgICAgICAgICgifSIg
aWYgbGVuKHNlbGYucG9zdF9jYWxsX3N0bXRzKSA+IDEgZWxzZSAiIikKLSAgICAgICAgICAgICAg
ICBdCiAgICAgICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0gWwotICAgICAgICAgICAgICAgIGYi
e3NlbmRfcmVzdWx0fXNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
e3NlbGYubXNnX25hbWV9KHtpbl9leHByc30pLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OntzZWxmLm1zZ19uYW1lfTo6UmVwbHkoe291dF9leHByc30pLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgMTBfcyk7IiwKKyAgICAgICAgICAgICAgICBmIiAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ontz
ZWxmLm1zZ19uYW1lfSh7aW5fZXhwcnN9KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjp7c2VsZi5tc2dfbmFtZX06OlJlcGx5KHtvdXRfZXhwcnN9KSk7IgogICAgICAgICAgICAg
XQorICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0gWworICAgICAgICAgICAgIiAgICBpZiAoIXNl
bmRSZXN1bHQpIiwKKyAgICAgICAgICAgICIgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOyIsCisg
ICAgICAgIF0KKyAgICAgICAgaWYgc2VsZi5wb3N0X2NhbGxfc3RtdHM6CisgICAgICAgICAgICBz
ZWxmLmNhbGxfc3RtdHMgKz0gWyIgICAgZWxzZSB7Il0gaWYgbGVuKHNlbGYucG9zdF9jYWxsX3N0
bXRzKSA+IDEgZWxzZSBbICIgICAgZWxzZSJdCisgICAgICAgICAgICBzZWxmLnBvc3RfY2FsbF9z
dG10cyA9IFsgIiAgICAiICsgbCBmb3IgbCBpbiBzZWxmLnBvc3RfY2FsbF9zdG10cyBdCisgICAg
ICAgICAgICBzZWxmLnBvc3RfY2FsbF9zdG10cyArPSBbICIgICAgfSIgXSBpZiBsZW4oc2VsZi5w
b3N0X2NhbGxfc3RtdHMpID4gMSBlbHNlIFtdCisgICAgICAgIHNlbGYucG9zdF9jYWxsX3N0bXRz
ICs9IFsgIn0iIF0KIAogCiAgICAgZGVmIHByb2Nlc3NfaW5fYXJncyhzZWxmLCBpbl9hcmdzOiBM
aXN0W2NwcF9hcmddKToKQEAgLTYyMSw4ICs2MjUsOCBAQCBjbGFzcyB3ZWJraXRfaXBjX2NwcF9w
cm94eV9pbXBsKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgc2VsZi5vdXRfZXhwcnMgKz0gW2Vd
CiAgICAgICAgICAgICAgICAgc2VsZi5wb3N0X2NhbGxfc3RtdHMgKz0gWwogICAgICAgICAgICAg
ICAgICAgICAjZm10OiBvZmYKLSAgICAgICAgICAgICAgICAgICAgZiJpZiAoe28ubmFtZX0pIiwK
LSAgICAgICAgICAgICAgICAgICAgZiIgICAgKntvLm5hbWV9ID0ge3dlYmtpdF9pcGNfY29udmVy
dF9leHByKGUsIHZhbHVlX3R5cGUpfTsiCisgICAgICAgICAgICAgICAgICAgIGYiICAgIGlmICh7
by5uYW1lfSkiLAorICAgICAgICAgICAgICAgICAgICBmIiAgICAgICAgKntvLm5hbWV9ID0ge3dl
YmtpdF9pcGNfY29udmVydF9leHByKGUsIHZhbHVlX3R5cGUpfTsiCiAgICAgICAgICAgICAgICAg
ICAgICNmbXQ6IG9uCiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgZWxpZiBvLnR5cGUu
aXNfc3BhbigpOgpAQCAtNjM0LDcgKzYzOCw3IEBAIGNsYXNzIHdlYmtpdF9pcGNfY3BwX3Byb3h5
X2ltcGwob2JqZWN0KToKICAgICAgICAgICAgICAgICBpZiBvLnR5cGUuaXNfZHluYW1pY19zcGFu
KCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5fZXhwcnMgKz0gW2NwcF9leHByKGdldF9j
cHBfdHlwZSgic2l6ZV90IiksIGYie28ubmFtZX0uYnVmU2l6ZSIpXQogICAgICAgICAgICAgICAg
IHNlbGYucG9zdF9jYWxsX3N0bXRzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgZiJtZW1jcHko
e28ubmFtZX0uZGF0YSwge3YubmFtZX0uZGF0YSgpLCB7by5uYW1lfS5idWZTaXplICogc2l6ZW9m
KHtzdHIod2Via2l0X2lwY190eXBlLmdldF9jb250YWluZWRfdHlwZSgpKX0pKTsiCisgICAgICAg
ICAgICAgICAgICAgIGYiICAgIG1lbWNweSh7by5uYW1lfS5kYXRhLCB7di5uYW1lfS5kYXRhKCks
IHtvLm5hbWV9LmJ1ZlNpemUgKiBzaXplb2Yoe3N0cih3ZWJraXRfaXBjX3R5cGUuZ2V0X2NvbnRh
aW5lZF90eXBlKCkpfSkpOyIKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgICAgIHNlbGYub3V0X2V4cHJzICs9IFtjcHBfZXhwcihvLnR5cGUsIG8ubmFt
ZSldCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggNDJlMTA4NWI0OWM4YWJhZDcxZDBmMzExN2RmNGY0MDAxYjA2MDY3NC4uYjk5
NDgzNDZmOGQwMjAyYWMxZmFhZTc2OTMwMTdkN2RiOWE3ODBjMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDIxLTAyLTA0ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSBzaG91bGQgc3VwcG9ydCBsb3Np
bmcgdGhlIGNvbnRleHQgYW5kIHNob3VsZCBsb3NlIHRoZSBjb250ZXh0IG9uIHRpbWVvdXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEzOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGhlIGxv
c2UtY29udGV4dC1vbi1zdGF0dXMtZmFpbHVyZS5odG1sLiBUaGUgdGVzdCB3YXMgdXNpbmcKKyAg
ICAgICAgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gbG9zZSB0aGUgY29udGV4dCBhbmQgdGhlbiBz
eW5jaHJvbm91c2x5CisgICAgICAgIGNoZWNraW5nIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3Qu
IFdpdGggR1BVIHByb2Nlc3MgdGhpcyBpcyBub3QKKyAgICAgICAgcG9zc2libGUsIHNvIGNoZWNr
IGFmdGVyIG5vcm1hbCBDYW52YXMgd2ViZ2xjb250ZXh0bG9zdCBldmVudC4KKworICAgICAgICBF
bmFibGUgdGhlIHRlc3QgZm9yIC0tdXNlLWdwdS1wcm9jZXNzLgorCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvbG9zZS1jb250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWw6CisgICAgICAg
ICogZ3B1LXByb2Nlc3MvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMS0wMi0wNSAgRGV2aW4gUm91
c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGludGVybWVkaWF0ZSB2b2x1
bWUgaWNvbiBzdGF0ZXMgYmV0d2VlbiAibXV0ZSIgYW5kICJtYXgiCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9sb3NlLWNvbnRleHQtb24tc3RhdHVzLWZhaWx1cmUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2xvc2UtY29udGV4dC1vbi1zdGF0
dXMtZmFpbHVyZS5odG1sCmluZGV4IGNlODQ0ZDMwZGJjM2ZhZmYwMDNhYTI0ZWQyOGViMDZkZTA2
NDliMGYuLmI4MzkxNjg2NGRiZDZlNzBjMzhkZGZiN2EzNGUyNDU1MmVjMDdiODEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2xvc2UtY29udGV4dC1vbi1zdGF0dXMt
ZmFpbHVyZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2xvc2UtY29u
dGV4dC1vbi1zdGF0dXMtZmFpbHVyZS5odG1sCkBAIC0yNiw2ICsyNiw3IEBAIHZhciBzaW1wbGVD
b2xvckZyYWdtZW50U2hhZGVyID0gWwogCiB2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CiB2YXIg
Z2w7Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CiAKIGlmICh3aW5kb3cuaW5pdE5vbkto
cm9ub3NGcmFtZXdvcmspCiAgICAgd2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKGZhbHNl
KTsKQEAgLTQxLDcgKzQyLDEyIEBAIGZ1bmN0aW9uIG1ha2VDYW52YXMoKSB7CiAgICAgcmV0dXJu
IGNhbnZhczsKIH0KIAotZnVuY3Rpb24gcnVuVGVzdCgpIHsKK2FzeW5jIGZ1bmN0aW9uIHdlYkdM
Q29udGV4dExvc3QoY2FudmFzKQoreworICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+
IGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwgcmVzb2x2ZSkpOwor
fQorCithc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgewogCiAgICAgZGVidWcoIiIpOwogICAgIGRl
YnVnKCJUZXN0IGRyYXdBcnJheXMuIik7CkBAIC02NSw2ICs3MSw3IEBAIGZ1bmN0aW9uIHJ1blRl
c3QoKSB7CiAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCiAgICAgICAgIHdpbmRvdy5pbnRlcm5h
bHMuZmFpbE5leHRHUFVTdGF0dXNDaGVjayhnbCk7CiAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklB
TkdMRVMsIDAsIDYpOworICAgIGF3YWl0IHdlYkdMQ29udGV4dExvc3QoY2FudmFzKTsKICAgICBz
aG91bGRCZVRydWUoImdsLmlzQ29udGV4dExvc3QoKSIpOwogICAgIHNob3VsZEJlKCJnbC5nZXRF
cnJvcigpIiwgImdsLkNPTlRFWFRfTE9TVF9XRUJHTCIpOwogCkBAIC05Niw2ICsxMDMsNyBAQCBm
dW5jdGlvbiBydW5UZXN0KCkgewogICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQogICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLmZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soZ2wpOwogICAgIGdsLmRyYXdF
bGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTsKKyAgICBhd2Fp
dCB3ZWJHTENvbnRleHRMb3N0KGNhbnZhcykKICAgICBzaG91bGRCZVRydWUoImdsLmlzQ29udGV4
dExvc3QoKSIpOwogICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLkNPTlRFWFRfTE9T
VF9XRUJHTCIpOwogCkBAIC0xMjIsNiArMTMwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAg
ICBpZiAod2luZG93LmludGVybmFscykKICAgICAgICAgd2luZG93LmludGVybmFscy5mYWlsTmV4
dEdQVVN0YXR1c0NoZWNrKGdsKTsKICAgICBleHQuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKGds
LlRSSUFOR0xFUywgMCwgNiwgMTApOworICAgIGF3YWl0IHdlYkdMQ29udGV4dExvc3QoY2FudmFz
KTsKICAgICBzaG91bGRCZVRydWUoImdsLmlzQ29udGV4dExvc3QoKSIpOwogICAgIHNob3VsZEJl
KCJnbC5nZXRFcnJvcigpIiwgImdsLkNPTlRFWFRfTE9TVF9XRUJHTCIpOwogCkBAIC0xNTQsMTMg
KzE2MywxNiBAQCBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KQogICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soZ2wpOwog
ICAgIGV4dC5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShnbC5UUklBTkdMRVMsIDYsIGdsLlVO
U0lHTkVEX1NIT1JULCAwLCA4KTsKKyAgICBhd2FpdCB3ZWJHTENvbnRleHRMb3N0KGNhbnZhcyk7
CiAgICAgc2hvdWxkQmVUcnVlKCJnbC5pc0NvbnRleHRMb3N0KCkiKTsKICAgICBzaG91bGRCZSgi
Z2wuZ2V0RXJyb3IoKSIsICJnbC5DT05URVhUX0xPU1RfV0VCR0wiKTsKIAogICAgIGZpbmlzaFRl
c3QoKTsKIH0KIAotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBydW5UZXN0LCBmYWxz
ZSk7CitydW5UZXN0KCk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwogPC9zY3Jp
cHQ+CiA8Ym9keT4KLTwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2JvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9ncHUtcHJvY2Vzcy9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvZ3B1LXByb2Nlc3MvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhNmJiOTJjYmE1
MjZhYzE5MmVkZWExOTgyMjhjNGIyZjc4YjZhZWQ5Li4zNjNhM2YzODJlOWMzNjc4MjhmYjdkNmEy
YWNiNjM0NDYxMTUyZjlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9ncHUtcHJvY2Vzcy9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL2dwdS1wcm9jZXNzL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTg3LDcgKzg3LDYgQEAgZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbCBb
IEZhaWx1cmUgXQogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1jcmVhdGlvbi1hdHRyaWJ1dGVz
Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtdXBkYXRlLW9uLWRp
c3BsYXktY29uZmlndXJhdGlvbi5odG1sIFsgVGltZW91dCBdCiBmYXN0L2NhbnZhcy93ZWJnbC9n
bC1waXhlbHN0b3JlaS5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2NhbnZhcy93ZWJnbC9sb3NlLWNv
bnRleHQtb24tc3RhdHVzLWZhaWx1cmUuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9jYW52YXMvd2Vi
Z2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtdmlkZW8tcmdiNTY1Lmh0bWwgWyBG
YWlsdXJlIF0KIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtdmlkZW8tcmdiYTQ0NDQuaHRtbCBbIEZhaWx1cmUgXQpAQCAtNzI4LDQgKzcyNyw0IEBAIHdl
YmdsL21heC1hY3RpdmUtY29udGV4dHMtZ2MuaHRtbCBbIEZhaWx1cmUgXQogd2ViZ2wvbWF4LWFj
dGl2ZS1jb250ZXh0cy1vbGRlc3QtY29udGV4dC1sb3N0Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmds
L21heC1hY3RpdmUtY29udGV4dHMtd2ViZ2xjb250ZXh0bG9zdC1wcmV2ZW50LWRlZmF1bHQuaHRt
bCBbIFRpbWVvdXQgXQogCi13ZWJydGMvYXVkaW8tdmlkZW8tZWxlbWVudC1wbGF5aW5nLmh0bWwg
WyBGYWlsdXJlIF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit3ZWJydGMvYXVkaW8tdmlk
ZW8tZWxlbWVudC1wbGF5aW5nLmh0bWwgWyBGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419701</attachid>
            <date>2021-02-09 05:35:36 -0800</date>
            <delta_ts>2021-02-10 04:04:55 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-221396-20210209153533.patch</filename>
            <type>text/plain</type>
            <size>174498</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk0ZmJiNmJkZmQ5NTRmOWYz
YWRlYmE0N2Y3NWEyZGE0ZTEwYmUzNGYuLmY4ZGJiYjM4M2RiYzA4NTc5MjJiMjFlODQ5ODA4NTJl
M2I2YzVkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcgQEAKKzIwMjEtMDItMDQgIEtpbW1vIEtp
bm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5IHNob3VsZCBzdXBwb3J0IGxvc2luZyB0aGUgY29udGV4dCBhbmQgc2hvdWxk
IGxvc2UgdGhlIGNvbnRleHQgb24gdGltZW91dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5IGFjdGluZyBvbgorICAgICAgICBsb3NpbmcgdGhlIGNvbnRleHQgaW4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuCisKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9y
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgdGltaW5nIG91dCBvbiBtZXNzYWdlCisgICAg
ICAgIHNlbmRzLiBGb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0LgorCisgICAgICAgIEltcGxl
bWVudCBzdXBwb3J0IGZvciBHUFVQcm9jZXNzQ29ubmVjdGlvbiBkaXNjb25uZWN0LiBGb3JjZSB0
aGUgY29udGV4dAorICAgICAgICBiZSBsb3N0LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHA6CisKKyAgICAgICAgU2VuZCBhIGJvb2wg
dmlhIFdhc0NyZWF0ZWQgbWV0aG9kLCBzbyB0aGF0IHRoZQorICAgICAgICByZWNlaXZlciBrbm93
cyBpZiBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgICAgICAgIEN1cnJlbnRseSB0
aGUgY3JlYXRpb24gYWx3YXlzIHN1Y2NlZWRzLgorCisgICAgICAgIFByZXZpb3VzbHkgaXQgd2Fz
IGRlc2lnbmVkIHRvIHVzZSB3YXNMb3N0IGluc3RlYWQsCisgICAgICAgIGJ1dCB0aGlzIGhhcyB0
aGUgcHJvYmxlbSB0aGF0IHRoZSBjbGllbnQgd2lsbCB3YWl0CisgICAgICAgIGZvciBXYXNDcmVh
dGVkIGluIHBhcnRpY3VsYXIgY2FzZXMgdG8gZW5zdXJlIGluaXRpYWxpemF0aW9uLAorICAgICAg
ICBhbmQgdGh1cyB3ZSBjYW5ub3Qgd2FpdCBmb3IgICJXYXNDcmVhdGVkIE9SIFdhc0xvc3QiLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpz
eW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpnZXRFcnJvcik6CisKKyAgICAgICAgTWFudWFsbHkgaW1wbGVtZW50IGZldyBtZXRob2Rz
IHRoYXQgY29udGFpbiBjdXN0b20gY2xpZW50LXNpZGUKKyAgICAgICAgbG9naWMgd3J0LiBsb3N0
IGNvbnRleHQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmg6CisgICAgICAgIChzZXRG
YWlsTmV4dEdQVVN0YXR1c0NoZWNrKToKKyAgICAgICAgKGdldEJvb2xlYW52KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorCisgICAgICAgIFNr
aXAgdGhlIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkgbWVzc2FnZXMgdGhhdCBkbyBub3Qg
aGF2ZQorICAgICAgICBhIHJlY2VpdmVyLiBUaGlzIGlzIGV4cGVjdGVkLCBhcyB3ZSBjYW5ub3Qg
YXNzdW1lIHRoYXQgb25seSBleHBlY3RlZAorICAgICAgICBtZXNzYWdlcyBhcnJpdmUgdG8gdGhl
IG1lc3NhZ2UgaGFuZGVyLgorCisgICAgICAgIFRoZSBjbGllbnQsIGkuZS4gdGhlIHdlYiBwcm9j
ZXNzLCBtaWdodAorICAgICAgICAgLSBqdXN0IGRlbGV0ZSB0aGUgcHJveHkKKyAgICAgICAgIC0g
Zm9yY2UgdGhlIGNvbnRleHQgdG8gYmUgbG9zdAorICAgICAgICAgLSBub3RpY2UgYSB0aW1lb3V0
IGFuZCBmb3JjZSB0aGUgY29udGV4dCB0byBiZSBsb3N0CisKKyAgICAgICAgd2hpbGUgdGhlIEdQ
VSBwcm9jZXNzIGNhbm5vdCBrbm93IHRoaXMuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIG1pZ2h0
CisgICAgICAgIGFscmVhZHkgaGF2ZSBzZW50IG1lc3NhZ2VzIHRvIHRoZSBQcm94eS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkpOgorCisg
ICAgICAgIExpc3RlbiB0byBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50IG5vdGlmaWNhdGlv
bnMgYWJvdXQKKyAgICAgICAgY29ubmVjdGlvbiBjbG9zdXJlLiBXaGVuIHRoZSBjb25uZWN0aW9u
IGNsb3NlcywgbWFyayB0aGUgY29udGV4dCBvYmplY3QKKyAgICAgICAgbG9zdC4KKworICAgICAg
ICBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIEdQVVByb2Nlc3NDb25uZWN0aW9uIHNvIHRoYXQgd2hl
biB0aGUgY29ubmVjdGlvbgorICAgICAgICBpcyBzaHV0IGRvd24gYW5kIG5ldyBvbmUgaXMgaW5z
dGFudGlhdGVkLCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5CisgICAgICAgIGRlc3RydWN0
aW9uIGxvZ2ljIHdpbGwgY29ycmVjdGx5IHJlZmVyIHRvIHRoZSBvbmUgaXQgd2FzIHVzaW5nLgor
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnJlc2hhcGUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwcmVwYXJl
Rm9yRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojpub3RpZnlNYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpzeW50aGVzaXplR0xFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEVycm9y
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FzQ3Jl
YXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondh
c0xvc3QpOgorCisgICAgICAgIFdoZW4gdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXBwZW5zLCBk
aXNjb25uZWN0IHdpdGgKKyAgICAgICAgdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondhc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptYXJrQ29udGV4
dExvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3
YWl0VW50aWxJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UpOgorCisgICAgICAgIFdo
ZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLCBtYXJrIHRoZSBjb250ZXh0IG9iamVjdAorICAgICAg
ICBsb3N0LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlv
bnNHZW5lcmF0ZWQuY3BwOgorCisgICAgICAgIENoYW5nZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb2Rl
LWdlbmVyYXRvciB3cnQgaGFuZGxpbmcgdGltZW91dHMgZnJvbSB0aGUgc2VuZHMuCisKIDIwMjEt
MDItMDkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHTGliXSBQZXJtaXNzaW9uIHJlcXVlc3QgQVBJIGZvciBNZWRpYUtleVN5c3RlbSBhY2Nlc3Mg
c3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggZDgwNGQxZmE5OTk0ZDVmZmYz
MTQzNjRkNTliZWY5NWViNDllYTk5OS4uNzliMzQ1OTZmYmYyZDBkZmM5ODE4NjUxYmRjZmViNGIw
YTBjODc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC01Niw3ICs1Niw3IEBAIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHCiAgICAgbV9jb250ZXh0LT5hZGRDbGllbnQoKnRoaXMpOwog
ICAgIFN0cmluZyBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250
ZXh0R0w6OkVYVEVOU0lPTlMpOwogICAgIFN0cmluZyByZXF1ZXN0YWJsZUV4dGVuc2lvbnMgPSBt
X2NvbnRleHQtPmdldFN0cmluZyhFeHRlbnNpb25zR0w6OlJFUVVFU1RBQkxFX0VYVEVOU0lPTlNf
QU5HTEUpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
Oldhc0NyZWF0ZWQoZXh0ZW5zaW9ucywgcmVxdWVzdGFibGVFeHRlbnNpb25zKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6Oldhc0NyZWF0ZWQodHJ1ZSwgZXh0ZW5zaW9ucywgcmVxdWVzdGFibGVF
eHRlbnNpb25zKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwogfQogCiBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKCkKQEAgLTExNyw2ICsx
MTcsMTYgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3BsYXko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXAKIH0KICNlbmRpZgogCit2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpzeW50aGVzaXplR0xFcnJvcih1aW50MzJfdCBlcnJvcikKK3sK
KyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKHN0YXRpY19jYXN0PEdDR0xlbnVtPihl
cnJvcikpOworfQorCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpnZXRFcnJvcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb250ZXh0LT5nZXRF
cnJvcigpKSk7Cit9CisKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQoU3RyaW5nJiYgZXh0ZW5zaW9uKQogewogICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoZXh0ZW5zaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgK
aW5kZXggN2RiMGNmNTE4YWJmOWJiMjVhYjMzNmRkZGUwMzk5OTI1YWEwNWYzMi4uMDAxNTlhYzhi
NTg2YThiNjJhM2RkYTNhNTcwMDRlODgzZTE1NmQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgK
QEAgLTkwLDYgKzkwLDggQEAgcHJvdGVjdGVkOgogI2Vsc2UKICAgICB2b2lkIHByZXBhcmVGb3JE
aXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAjZW5kaWYKKyAgICB2b2lkIGdl
dEVycm9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmKTsKKyAgICB2b2lkIHN5
bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVycm9yKTsKIAogI2luY2x1ZGUgIlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgiIC8vIE5PTElOVAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggOTc3ZjVmMTFjOGVjMTlkOWM1N2M3
YmRjMjk2YWE1ZmJkZGJkNDU5Zi4uZDMyOGNkMWNjZDYyMWIwNWFjMjgzMThlNjI1YTdiYTcyZGNj
NGExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgpAQCAtMzQs
OSArMzQsMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UmVmQ291
bnRlZCB7CiAjZW5kaWYKICAgICB2b2lkIEVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoU3RyaW5nIGV4
dGVuc2lvbikKICAgICB2b2lkIE5vdGlmeU1hcmtDb250ZXh0Q2hhbmdlZCgpCisgICAgdm9pZCBT
eW50aGVzaXplR0xFcnJvcih1aW50MzJfdCBlcnJvcikKKyAgICB2b2lkIEdldEVycm9yKCkgLT4g
KHVpbnQzMl90IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwogCiAgICAgdm9pZCBTZXRGYWlsTmV4
dEdQVVN0YXR1c0NoZWNrKCkKLSAgICB2b2lkIFN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVy
cm9yKQogICAgIHZvaWQgTW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkgLT4gKGJvb2wg
cmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBBY3RpdmVUZXh0dXJlKHVpbnQzMl90
IHRleHR1cmUpCiAgICAgdm9pZCBBdHRhY2hTaGFkZXIodWludDMyX3QgcHJvZ3JhbSwgdWludDMy
X3Qgc2hhZGVyKQpAQCAtOTksNyArMTAwLDYgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wgTm90UmVmQ291bnRlZCB7CiAgICAgdm9pZCBHZXRJbnRlZ2VyNjRpKHVpbnQzMl90
IHBuYW1lLCB1aW50MzJfdCBpbmRleCkgLT4gKGludDY0X3QgcmV0dXJuVmFsdWUpIFN5bmNocm9u
b3VzCiAgICAgdm9pZCBHZXRQcm9ncmFtaSh1aW50MzJfdCBwcm9ncmFtLCB1aW50MzJfdCBwbmFt
ZSkgLT4gKGludDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBHZXRCb29s
ZWFudih1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXplKSAtPiAoSVBDOjpBcnJheVJl
ZmVyZW5jZTxib29sPiB2YWx1ZSkgU3luY2hyb25vdXMKLSAgICB2b2lkIEdldEVycm9yKCkgLT4g
KHVpbnQzMl90IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwogICAgIHZvaWQgR2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFjaG1l
bnQsIHVpbnQzMl90IHBuYW1lKSAtPiAoaW50MzJfdCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMK
ICAgICB2b2lkIEdldFByb2dyYW1JbmZvTG9nKHVpbnQzMl90IGFyZzApIC0+IChTdHJpbmcgcmV0
dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgcG5hbWUpIC0+IChpbnQzMl90IHJldHVyblZhbHVl
KSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlv
bnNHZW5lcmF0ZWQuaAppbmRleCAxNzY0ODc1MzQ4OGY0YjBiM2E1ZTYwZTc5MmZlZmU3YTgyYjIx
ZTU1Li5iZGU3NmY5YmU3ZThlZjBjNTAyMWNhNzQwMDM1OTljMGFmYzRkN2MwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaApAQCAtMjks
MTAgKzI5LDYgQEAKICAgICB7CiAgICAgICAgIG1fY29udGV4dC0+c2V0RmFpbE5leHRHUFVTdGF0
dXNDaGVjaygpOwogICAgIH0KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVpbnQzMl90IGVy
cm9yKQotICAgIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7
Ci0gICAgfQogICAgIHZvaWQgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAg
ICBib29sIHJldHVyblZhbHVlID0geyB9OwpAQCAtMzIxLDEyICszMTcsNiBAQAogICAgICAgICBt
X2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4ocmVpbnRlcnByZXRfY2FzdDxib29sKj4o
dmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQotICAgIHZvaWQgZ2V0RXJyb3Io
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi0g
ICAgewotICAgICAgICBHQ0dMZW51bSByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmdldEVycm9yKCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKLSAgICB9CiAgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXR0YWNobWVudCwgdWludDMyX3Qg
cG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApp
bmRleCBhMjkzMDdmNzBiNmVkZjdmODQ5MzZlZGE2ZGJjZmI4ZGIzYTZkMDA3Li5jZTQwNzk4MmJl
OGY3ZTY3YjJlOWFjZDNkM2Y1MTU0OGI5YmE2M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjcsNiArNjcs
MTAgQEAKICNpbmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VzLmgiCiAjZW5k
aWYKIAorI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5TWVzc2FnZXMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xNjgsNyArMTcyLDE2IEBAIGJvb2wgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
CisgICAgaWYgKG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBTa2lwIG1lc3NhZ2Vz
IGludGVuZGVkIGZvciBhbHJlYWR5IHJlbW92ZWQgbWVzc2FnZVJlY2VpdmVyTWFwKCkgZGVzdGlu
YXRpb25zLgorI2lmIEVOQUJMRShXRUJHTCkKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCmluZGV4IDE3ZGYyZGJkNmYxN2EzZTZm
NjIzOTYxYWVlMjMyYWNmZWIxMjE1YTMuLjBlNTNlZjM3ZDVkMGJiZDZiNjU4NmE0ZjgzNWY5MWMy
NmRkYTY2MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcApA
QCAtNDUsNDkgKzQ1LDQ4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZWZQdHI8UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
Y3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoYXR0
cmlidXRlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlv
bigpLCBhdHRyaWJ1dGVzKSk7CiB9CiAKLVJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiBhdHRycykKK1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHkoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mIGdwdVByb2Nlc3NDb25uZWN0aW9u
LCBjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKQogICAgIDogUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UoYXR0cnMpCisgICAgLCBtX2dwdVByb2Nlc3NDb25u
ZWN0aW9uKCZncHVQcm9jZXNzQ29ubmVjdGlvbikKIHsKLSAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKLSAgICBtZXNzYWdl
UmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVHcmFwaGljc0NvbnRleHRHTChhdHRycywgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpLCAwKTsKKyAgICBncHVQcm9jZXNzQ29ubmVjdGlvbi5h
ZGRDbGllbnQoKnRoaXMpOworICAgIGdwdVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VSZWNlaXZl
ck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisgICAgY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZUdyYXBoaWNzQ29udGV4dEdMKGF0dHJz
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciksIDApOwogfQogCiBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSgpCiB7Ci0gICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVy
TWFwKCk7Ci0gICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhp
cyk7Ci0gICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFz
ZUdyYXBoaWNzQ29udGV4dEdMKG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKSwgMCk7Cisg
ICAgZGlzY29ubmVjdEdwdVByb2Nlc3NJZk5lZWRlZCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHBsYXRmb3JtU3dhcENoYWluKCkucmVjeWNsZUJ1ZmZlcigpOwogI2VuZGlmCiB9CiAKLUlQ
Qzo6Q29ubmVjdGlvbiogUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Ci19Ci0KLXVpbnQ2
NF90IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIu
dG9VSW50NjQoKTsKLX0KLQogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQor
ICAgICAgICByZXR1cm47CiAgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKICAgICBtX2N1cnJl
bnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlJlc2hhcGUod2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6UmVzaGFwZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpwcmVwYXJlRm9yRGlzcGxheSgpCiB7CisgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIE1hY2hTZW5k
UmlnaHQgZGlzcGxheUJ1ZmZlclNlbmRSaWdodDsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXk6OlJlcGx5KGRpc3BsYXlCdWZm
ZXJTZW5kUmlnaHQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpQcmVwYXJlRm9yRGlzcGxheSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlByZXBhcmVGb3JEaXNwbGF5OjpSZXBseShkaXNwbGF5QnVmZmVyU2VuZFJpZ2h0KSk7Cisg
ICAgaWYgKCFzZW5kUmVzdWx0KSB7CisgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIGF1dG8gZGlzcGxheUJ1ZmZlciA9IElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKGRpc3BsYXlCdWZmZXJTZW5kUmlnaHQpLCBzUkdCQ29s
b3JTcGFjZVJlZigpKTsKICAgICBpZiAoZGlzcGxheUJ1ZmZlcikgewogICAgICAgICAvLyBDbGFp
bSBpbiB0aGUgV2ViUHJvY2VzcyBvd25lcnNoaXAgb2YgdGhlIElPU3VyZmFjZSBjb25zdHJ1Y3Rl
ZCBieSB0aGUgR1BVUHJvY2VzcyBzbyB0aGF0IEpldHNhbSBrbm93cyB3aGljaCBwcm9jZXNzZXMg
dG8ga2lsbC4KQEAgLTk4LDE5ICs5NywzMSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnByZXBhcmVGb3JEaXNwbGF5KCkKICAgICAgICAgc2MucHJlc2VudCh7IFdURk1vdmUo
ZGlzcGxheUJ1ZmZlciksIG51bGxwdHIgfSk7CiAgICAgfQogI2Vsc2UKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBhcmVGb3JEaXNwbGF5KCksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFyZUZvckRpc3BsYXk6OlJlcGx5
KCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlByZXBh
cmVGb3JEaXNwbGF5KCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UHJlcGFy
ZUZvckRpc3BsYXk6OlJlcGx5KCkpOworICAgIGlmICghc2VuZFJlc3VsdCkgeworICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICNlbmRpZgogICAgIG1h
cmtMYXllckNvbXBvc2l0ZWQoKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbnN1cmVFeHRlbnNp
b25FbmFibGVkKGV4dGVuc2lvbiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuc3VyZUV4dGVu
c2lvbkVuYWJsZWQoZXh0ZW5zaW9uKSk7CisgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Ojpub3RpZnlNYXJrQ29udGV4dENoYW5nZWQoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpOb3RpZnlNYXJrQ29udGV4dENoYW5nZWQoKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Tm90aWZ5TWFya0NvbnRleHRDaGFuZ2VkKCkpOworICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCkBAIC0xMzUsMzkg
KzE0Niw5OCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YQogICAgIHJldHVybiBudWxscHRyOwog
fQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Ondhc0NyZWF0ZWQoU3RyaW5n
JiYgYXZhaWxhYmxlRXh0ZW5zaW9ucywgU3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9ucykKK3Zv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVu
dW0gZXJyb3IpCiB7Ci0gICAgaWYgKG1fZGlkSW5pdGlhbGl6ZSkgewotICAgICAgICAvLyBJbml0
aWFsaXphdGlvbiB0aW1lZCBvdXQgYmVmb3JlLCBzbyBsb3NlIHRoZSBjb250ZXh0IG5vdy4KLSAg
ICAgICAgd2FzTG9zdCgpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpT
eW50aGVzaXplR0xFcnJvcihlcnJvcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICB3YXNMb3N0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5pdGlhbGl6
ZShhdmFpbGFibGVFeHRlbnNpb25zLCByZXF1ZXN0ZWRFeHRlbnNpb25zKTsKKyAgICBtX2Vycm9y
V2hlbkNvbnRleHRJc0xvc3QgPSBlcnJvcjsKK30KKworR0NHTGVudW0gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Z2V0RXJyb3IoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0gMDsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRFcnJv
cigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEVycm9yOjpSZXBseShy
ZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICB3YXNM
b3N0KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMZW51bT4ocmV0dXJuVmFsdWUp
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Vycm9yV2hlbkNvbnRleHRJc0xv
c3QsIE5PX0VSUk9SKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3
YXNDcmVhdGVkKGJvb2wgZGlkU3VjY2VlZCwgU3RyaW5nJiYgYXZhaWxhYmxlRXh0ZW5zaW9ucywg
U3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9ucykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkaWRTdWNjZWVkKSB7CisgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbV9kaWRJ
bml0aWFsaXplKTsKICAgICBtX2RpZEluaXRpYWxpemUgPSB0cnVlOworICAgIGluaXRpYWxpemUo
YXZhaWxhYmxlRXh0ZW5zaW9ucywgcmVxdWVzdGVkRXh0ZW5zaW9ucyk7CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6d2FzTG9zdCgpCiB7Ci0gICAgZm9yIChhdXRvKiBj
bGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5mb3JjZUNv
bnRleHRMb3N0KCk7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1hcmtDb250ZXh0TG9zdCgpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6Ondhc0NoYW5nZWQoKQogeworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAg
IHJldHVybjsKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMp
KQogICAgICAgICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsK
IH0KIAordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptYXJrQ29udGV4dExvc3Qo
KQoreworICAgIGRpc2Nvbm5lY3RHcHVQcm9jZXNzSWZOZWVkZWQoKTsKKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmZvcmNl
Q29udGV4dExvc3QoKTsKK30KKwogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3
YWl0VW50aWxJbml0aWFsaXplZCgpCiB7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChtX2RpZEluaXRpYWxpemUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Ci0gICAgaWYgKGNv
bm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpXYXNDcmVhdGVkPihtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllciwgMTBfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5j
TWVzc2FnZUFycml2ZXMpKQorICAgIGlmIChjb25uZWN0aW9uKCkud2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Oldhc0Ny
ZWF0ZWQ+KG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCBkZWZhdWx0U2VuZFRpbWVvdXQp
KQogICAgICAgICByZXR1cm47Ci0gICAgLy8gVGltZWQgb3V0LCBzbyByZXBvcnQgaW5pdGlhbGl6
ZWQgd2l0aCBkdW1teSBkYXRhLiBXZSBzaG91bGQgbG9zZSB0aGUgY29udGV4dC4KLSAgICB3YXND
cmVhdGVkKCIiLCAiIik7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFyayB0aGUgY29udGV4dCBh
cyBsb3N0LCBidXQgaXQncyBub3Qgc2FmZSB0byBmb3JjZSBsb3N0IGluIHRoaXMgY2FsbCBzdGFj
ay4KKyAgICBtYXJrQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0
aW9uJikKK3sKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgYWJhbmRvbkdwdVBy
b2Nlc3MoKTsKKyAgICBtYXJrQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjphYmFuZG9uR3B1UHJvY2VzcygpCit7CisgICAgYXV0byBncHVQcm9j
ZXNzQ29ubmVjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2UobV9ncHVQcm9jZXNzQ29ubmVjdGlvbiwgbnVs
bHB0cik7CisgICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPnJlbW92ZUNsaWVudCgqdGhpcyk7Cisg
ICAgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgp
KTsKKyAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCkK
K3sKKyAgICBpZiAoYXV0byBncHVQcm9jZXNzQ29ubmVjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2UobV9n
cHVQcm9jZXNzQ29ubmVjdGlvbiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ3B1UHJvY2Vzc0Nvbm5l
Y3Rpb24tPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgICAgIGdwdVByb2Nlc3NDb25uZWN0aW9u
LT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgICAgIGdwdVByb2Nlc3ND
b25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UmVsZWFzZUdyYXBoaWNzQ29udGV4dEdMKG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKSwgMCk7CisgICAgfQorICAgIEFTU0VSVChpc0NvbnRleHRMb3N0KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
LmgKaW5kZXggZTUwMWJkYjIxMWZjOTczZTVmNTc5OTJiYTAwY2U5YjYxMTE3Zjc2Ny4uNTQxNzJm
YjBiNTE2YjYzOWU5NTEwOTY0ZGEzYWRkYWQ2NmEyM2FmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5LmgKQEAgLTI3LDE5ICsyNywxOCBAQAogCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpCiAKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVj
dGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNs
dWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
Ci0KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogLy8gV2ViIHByb2Nlc3Mgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRH
TCBpbnRlcmZhY2UuIFRoZSBpbXBsZW1lbnRhdGlvbgpAQCAtNDcsMTggKzQ2LDEzIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogLy8gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgaW4gR1BVIHByb2Nlc3Mu
CiAvLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgbGFyZ2VseSBnZW5lcmF0ZWQgYnkgcnVubmluZyBU
b29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wuCiBjbGFzcyBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5IGZpbmFsCi0gICAgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eT4KKyAgICA6IHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKKyAgICAsIHByaXZhdGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OkNsaWVudAog
ICAgICwgcHVibGljIFdlYkNvcmU6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlCYXNlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk+
IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmKTsKICAg
ICB+UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eSgpIGZpbmFsOwogCi0gICAgLy8gSVBDOjpN
ZXNzYWdlU2VuZGVyIG92ZXJyaWRlcy4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBmaW5hbDsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
IG92ZXJyaWRlcy4KICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIGZpbmFsOwogCkBAIC03MiwxMCArNjYsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6SW1hZ2VCdWZmZXIq
KSBmaW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKFdlYkNvcmU6OkltYWdlQnVmZmVyKikgZmluYWw7CisgICAgdm9pZCBzeW50aGVz
aXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgZmluYWw7CisgICAgR0NHTGVudW0gZ2V0RXJyb3Io
KSBmaW5hbDsKIAogICAgIC8vIEZ1bmN0aW9ucyB3aXRoIGEgZ2VuZXJhdGVkIGltcGxlbWVudGF0
aW9uLiBUaGlzIGxpc3QgaXMgdXNlZCBieSBnZW5lcmF0ZS1ncHVwLXdlYmdsIHNjcmlwdC4KICAg
ICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSBmaW5hbDsKLSAgICB2b2lkIHN5bnRo
ZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKSBmaW5hbDsKICAgICBib29sIG1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpIGZpbmFsOwogICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQ0dM
ZW51bSB0ZXh0dXJlKSBmaW5hbDsKICAgICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKSBmaW5hbDsKQEAgLTEzOCw3ICsx
MzMsNiBAQCBwdWJsaWM6CiAgICAgR0NHTGludDY0IGdldEludGVnZXI2NGkoR0NHTGVudW0gcG5h
bWUsIEdDR0x1aW50IGluZGV4KSBmaW5hbDsKICAgICBHQ0dMaW50IGdldFByb2dyYW1pKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwogICAgIHZvaWQgZ2V0
Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xib29sZWFuPiB2YWx1ZSkgZmlu
YWw7Ci0gICAgR0NHTGVudW0gZ2V0RXJyb3IoKSBmaW5hbDsKICAgICBHQ0dMaW50IGdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBHQ0dMZW51bSBwbmFtZSkgZmluYWw7CiAgICAgU3RyaW5nIGdldFByb2dyYW1JbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkgZmluYWw7CiAgICAgR0NHTGludCBnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpIGZpbmFsOwpA
QCAtMzMzLDE0ICszMjcsNDAgQEAgcHJvdGVjdGVkOgogICAgIC8vIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlCYXNlIG92ZXJyaWRlcy4KICAgICB2b2lkIHdhaXRVbnRpbEluaXRpYWxpemVk
KCkgZmluYWw7CiAKKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdCB7IHJldHVybiAhbV9n
cHVQcm9jZXNzQ29ubmVjdGlvbjsgfQorICAgIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CisKKyAg
ICBzdGF0aWMgaW5saW5lIFNlY29uZHMgZGVmYXVsdFNlbmRUaW1lb3V0ID0gMzBfczsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIHNlbmQoVCYm
IG1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25uZWN0aW9uKCkuc2VuZChXVEZNb3ZlKG1lc3Nh
Z2UpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgV0FSTl9V
TlVTRURfUkVUVVJOIElQQzo6Q29ubmVjdGlvbjo6U2VuZFN5bmNSZXN1bHQgc2VuZFN5bmMoVCYm
IG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHkpCisgICAgeworICAgICAgICByZXR1
cm4gY29ubmVjdGlvbigpLnNlbmRTeW5jKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUocmVwbHkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci50b1VJbnQ2NCgpLCBkZWZhdWx0U2VuZFRp
bWVvdXQpOworICAgIH0KKyAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCk7IH0KKwogcHJpdmF0
ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KLSAgICB2b2lkIHdhc0NyZWF0ZWQo
U3RyaW5nJiYgYXZhaWxhYmxlRXh0ZW5zaW9ucywgU3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9u
cyk7CisgICAgdm9pZCB3YXNDcmVhdGVkKGJvb2wgZGlkU3VjY2VlZCwgU3RyaW5nJiYgYXZhaWxh
YmxlRXh0ZW5zaW9ucywgU3RyaW5nJiYgcmVxdWVzdGVkRXh0ZW5zaW9ucyk7CiAgICAgdm9pZCB3
YXNMb3N0KCk7CiAgICAgdm9pZCB3YXNDaGFuZ2VkKCk7CiAKLSAgICBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYp
OworICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZv
aWQgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZp
bmFsOworCisgICAgdm9pZCBkaXNjb25uZWN0R3B1UHJvY2Vzc0lmTmVlZGVkKCk7CisgICAgdm9p
ZCBhYmFuZG9uR3B1UHJvY2VzcygpOworCisgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eShHUFVQcm9jZXNzQ29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYpOworICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKiBtX2dwdVByb2Nlc3NDb25u
ZWN0aW9uOwogICAgIGJvb2wgbV9kaWRJbml0aWFsaXplIHsgZmFsc2UgfTsKKyAgICBHQ0dMZW51
bSBtX2Vycm9yV2hlbkNvbnRleHRJc0xvc3QgPSBOT19FUlJPUjsKKwogICAgIEdyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciB7IEdyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDVmMmIzMmIy
YmMxMDEwZWY4ZWNkMGFmNTc3N2FiZDRmYTA4YTNjOTAuLmE3YzY0MTJhYzk0NmUyNThjZTAxMzhi
YzQ3YmMzODYyMTk1MDIxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHkubWVzc2FnZXMuaW4KQEAgLTIzLDkgKzIzLDkgQEAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkKIAogbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eSBOb3RSZWZDb3VudGVkIHsKLSAgICB2b2lkIFdhc0NyZWF0ZWQoU3RyaW5n
IGF2YWlsYWJsZUV4dGVuc2lvbnMsIFN0cmluZyByZXF1ZXN0YWJsZUV4dGVuc2lvbnMpCisgICAg
dm9pZCBXYXNDcmVhdGVkKGJvb2wgZGlkU3VjY2VlZCwgU3RyaW5nIGF2YWlsYWJsZUV4dGVuc2lv
bnMsIFN0cmluZyByZXF1ZXN0YWJsZUV4dGVuc2lvbnMpCiAgICAgdm9pZCBXYXNMb3N0KCkKLSAg
ICB2b2lkIFdhc0NoYW5nZWQoKTsKKyAgICB2b2lkIFdhc0NoYW5nZWQoKQogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlG
dW5jdGlvbnNHZW5lcmF0ZWQuY3BwCmluZGV4IDUyMzE1OTgxNGY4NjVhMzUzMjYwYjRlODFkMzY1
OGE1Yjg0ZjBhMzQuLjI5NDc1ZTExNDdjMTdkZTU5OTVkODgyNDMxNTA1MGY4Y2QwYzMzYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
RnVuY3Rpb25zR2VuZXJhdGVkLmNwcApAQCAtMzIsNDA3ICszMiw2NjQgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6c2V0RmFpbE5leHRH
UFVTdGF0dXNDaGVjaygpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnN5bnRo
ZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpTeW50aGVzaXplR0xFcnJvcihlcnJvciksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6U2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiBib29sIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
CiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdDo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpN
b3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpNb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3Q6OlJlcGx5KHJldHVyblZh
bHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVUZXh0
dXJlKHRleHR1cmUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkF0dGFjaFNoYWRlcihw
cm9ncmFtLCBzaGFkZXIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFk
ZXIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJp
bmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IGFyZzAsIEdDR0x1aW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkJpbmRBdHRyaWJMb2NhdGlvbihhcmcwLCBpbmRleCwgbmFtZSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6QmluZEF0dHJpYkxvY2F0aW9uKGFyZzAsIGluZGV4LCBuYW1lKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kQnVmZmVyKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBhcmcxKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kQnVmZmVyKHRhcmdldCwgYXJnMSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6QmluZEJ1ZmZlcih0YXJnZXQsIGFyZzEpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6QmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYXJnMSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6QmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYXJnMSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGFyZzEpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBhcmcxKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6QmluZFRleHR1cmUodGFyZ2V0LCBhcmcxKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIGFyZzEpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFt
cGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmxlbmRDb2xvcihyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCbGVuZEVxdWF0aW9uKG1vZGUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkJsZW5kRXF1YXRpb24obW9kZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdD
R0xlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6QmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6QmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3RvcikpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVu
dW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBk
c3RBbHBoYSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBk
c3RBbHBoYSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xlbnVtIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewogICAgIHVp
bnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXM6OlJlcGx5
KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyh0YXJnZXQpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNoZWNrRnJh
bWVidWZmZXJTdGF0dXM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xl
YXIoR0NHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNsZWFyKG1hc2spLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyKG1hc2spKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQ29sb3Io
R0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNs
YW1wZiBhbHBoYSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6Q2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xl
YXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhckRlcHRo
KGRlcHRoKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhckRlcHRoKGRlcHRoKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhclN0ZW5jaWwoR0NHTGludCBz
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGVhclN0
ZW5jaWwocyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJTdGVuY2lsKHMpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiBy
ZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBo
YSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29sb3JN
YXNrKHN0YXRpY19jYXN0PGJvb2w+KHJlZCksIHN0YXRpY19jYXN0PGJvb2w+KGdyZWVuKSwgc3Rh
dGljX2Nhc3Q8Ym9vbD4oYmx1ZSksIHN0YXRpY19jYXN0PGJvb2w+KGFscGhhKSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6Q29sb3JNYXNrKHN0YXRpY19jYXN0PGJvb2w+KHJlZCksIHN0YXRpY19jYXN0PGJvb2w+
KGdyZWVuKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oYmx1ZSksIHN0YXRpY19jYXN0PGJvb2w+KGFscGhh
KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29t
cGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXBpbGVTaGFkZXIoYXJnMCksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6Q29tcGlsZVNoYWRlcihhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlciks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIFBsYXRmb3Jt
R0xPYmplY3QgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlQnVmZmVyKCkKIHsK
ICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZUJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpDcmVhdGVCdWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewogICAgIHVpbnQzMl90
IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q3JlYXRlRnJhbWVidWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDcmVhdGVGcmFtZWJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDcmVhdGVGcmFtZWJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNyZWF0ZUZyYW1lYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNyZWF0ZVByb2dyYW0oKQogewogICAgIHVpbnQz
Ml90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkNyZWF0ZVByb2dyYW06OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q3JlYXRlUHJvZ3JhbSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkNyZWF0ZVByb2dyYW06OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKICAgICB1aW50MzJfdCByZXR1
cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkNyZWF0ZVJlbmRlcmJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkNyZWF0ZVJlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpDcmVhdGVSZW5kZXJidWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpDcmVhdGVSZW5kZXJidWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwor
ICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIGFyZzApCiB7
CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVTaGFkZXIoYXJnMCksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2hhZGVyOjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNoYWRlcihhcmcwKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVTaGFkZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgp
OworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3Qg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgdWlu
dDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q3JlYXRlVGV4dHVyZTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpDcmVhdGVUZXh0dXJlKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6Q3JlYXRlVGV4dHVyZTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDdWxsRmFjZShtb2RlKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDdWxsRmFj
ZShtb2RlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250
ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVCdWZmZXIoYXJnMCksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6RGVsZXRlQnVmZmVyKGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYXJn
MCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRl
RnJhbWVidWZmZXIoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlRnJhbWVidWZmZXIoYXJnMCkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVByb2dyYW0oYXJnMCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
RGVsZXRlUHJvZ3JhbShhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVSZW5k
ZXJidWZmZXIoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlUmVuZGVyYnVmZmVyKGFyZzApKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVNoYWRlcihhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxl
dGVTaGFkZXIoYXJnMCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVRleHR1cmUoYXJnMCks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RGVsZXRlVGV4dHVyZShhcmcwKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVwdGhGdW5jKGZ1
bmMpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRlcHRoRnVuYyhmdW5jKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVwdGhNYXNr
KHN0YXRpY19jYXN0PGJvb2w+KGZsYWcpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0aE1hc2soc3RhdGlj
X2Nhc3Q8Ym9vbD4oZmxhZykpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFy
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0aFJh
bmdlKHpOZWFyLCB6RmFyKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZXRhY2hT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwLCBQbGF0Zm9ybUdMT2JqZWN0IGFyZzEpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRldGFjaFNoYWRlcihh
cmcwLCBhcmcxKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZXRhY2hTaGFkZXIoYXJnMCwgYXJnMSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGlzYWJsZShHQ0dM
ZW51bSBjYXApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkRpc2FibGUoY2FwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEaXNhYmxlKGNhcCkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dM
aW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1v
ZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdFbGVtZW50
cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAg
bWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuYWJsZShjYXApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkVuYWJsZShj
YXApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmZpbmlzaCgpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZpbmlzaCgpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkZpbmlzaCgpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmZsdXNoKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Rmx1c2goKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGbHVzaCgpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVy
YnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGFyZzMpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBhcmczKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYXJnMykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYXJnMywgR0NHTGlu
dCBsZXZlbCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIGFyZzMs
IGxldmVsKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgYXJnMywgbGV2ZWwpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpGcm9udEZhY2UobW9kZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RnJvbnRGYWNlKG1vZGUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2VuZXJhdGVN
aXBtYXAodGFyZ2V0KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiBib29sIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEFjdGl2ZUF0
dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBhcmcyKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwg
aW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZUF0dHJp
Yjo6UmVwbHkocmV0dXJuVmFsdWUsIGFyZzIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRB
Y3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEFjdGl2ZUF0dHJpYjo6UmVwbHkocmV0dXJuVmFsdWUsIGFyZzIpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogYm9vbCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
THVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGFyZzIpCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm06OlJlcGx5KHJldHVyblZhbHVlLCBhcmcyKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybTo6UmVwbHko
cmV0dXJuVmFsdWUsIGFyZzIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0K
IAogR0NHTGludCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IGFyZzAsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpbnQz
Ml90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0QXR0cmliTG9jYXRpb24oYXJnMCwgbmFtZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QXR0cmliTG9jYXRpb246OlJlcGx5KHJldHVyblZh
bHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QXR0cmliTG9jYXRpb24oYXJnMCwgbmFt
ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QXR0cmliTG9jYXRpb246
OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9
CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0QnVmZmVyUGFyYW1l
dGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMyX3QgcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEJ1ZmZlclBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZh
bHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQs
IHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJQYXJh
bWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U3RyaW5n
KEdDR0xlbnVtIG5hbWUpCiB7CiAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9OwotICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3RyaW5nKG5hbWUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN0cmluZzo6UmVwbHkocmV0
dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTdHJpbmcobmFtZSksIE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U3RyaW5nOjpSZXBseShyZXR1cm5WYWx1
ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48
R0NHTGZsb2F0PiB2YWx1ZSkKIHsKICAgICBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiB2YWx1
ZVJlcGx5OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5idWZTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHY6OlJlcGx5KHZhbHVlUmVwbHkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1
bHQpCi0gICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwgdmFsdWUu
YnVmU2l6ZSAqIHNpemVvZihmbG9hdCkpOwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZS5idWZTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGbG9hdHY6OlJlcGx5KHZhbHVlUmVwbHkp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweSh2YWx1ZS5kYXRhLCB2YWx1ZVJl
cGx5LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihmbG9hdCkpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRJbnRlZ2VydihHQ0dMZW51bSBw
bmFtZSwgR0NHTFNwYW48R0NHTGludD4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5j
ZTxpbnQzMl90PiB2YWx1ZVJlcGx5OwotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVl
LmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVnZXJ2
OjpSZXBseSh2YWx1ZVJlcGx5KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OwotICAgIGlmIChzZW5kUmVzdWx0KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVS
ZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOwotICAgIAorICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdlcnYocG5hbWUs
IHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldElu
dGVnZXJ2OjpSZXBseSh2YWx1ZVJlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1ZlNpemUgKiBzaXpl
b2YoaW50MzJfdCkpOworICAgIH0KIH0KIAogR0NHTGludDY0IFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmdldEludGVnZXI2NChHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpbnQ2NF90IHJl
dHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0SW50ZWdlcjY0KHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRJbnRlZ2VyNjQ6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0SW50ZWdlcjY0KHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRJbnRlZ2VyNjQ6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGludDY0PihyZXR1cm5WYWx1ZSk7CiB9CiAKIEdDR0xpbnQ2
NCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRJbnRlZ2VyNjRpKEdDR0xlbnVtIHBu
YW1lLCBHQ0dMdWludCBpbmRleCkKIHsKICAgICBpbnQ2NF90IHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0SW50ZWdl
cjY0aShwbmFtZSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dEludGVnZXI2NGk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0SW50ZWdlcjY0aShwbmFtZSwgaW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEludGVnZXI2NGk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGludDY0PihyZXR1cm5WYWx1ZSk7CiB9CiAKIEdDR0xpbnQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0UHJvZ3JhbWkoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0g
eyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFByb2dyYW1pOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFByb2dyYW1pKHByb2dyYW0sIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRQcm9ncmFtaTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NHTGJvb2xlYW4+IHZh
bHVlKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4gdmFsdWVSZXBseTsKLSAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZS5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRCb29sZWFudjo6UmVwbHkodmFsdWVSZXBseSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2VuZFJlc3VsdCkKLSAgICAg
ICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICog
c2l6ZW9mKGJvb2wpKTsKLSAgICAKLX0KLQotR0NHTGVudW0gUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6Z2V0RXJyb3IoKQotewotICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RXJyb3Io
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRFcnJvcjo6UmVwbHkocmV0
dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgcmV0
dXJuIHJldHVyblZhbHVlOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldEJvb2xlYW52OjpSZXBseSh2YWx1ZVJlcGx5KSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCks
IHZhbHVlLmJ1ZlNpemUgKiBzaXplb2YoYm9vbCkpOworICAgIH0KIH0KIAogR0NHTGludCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaTo6UmVwbHkocmV0
dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmk6OlJl
cGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAg
IG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAK
IFN0cmluZyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRQcm9ncmFtSW5mb0xvZyhQ
bGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9Owot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UHJvZ3Jh
bUluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0UHJv
Z3JhbUluZm9Mb2c6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0UHJvZ3JhbUluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0UHJvZ3JhbUluZm9Mb2c6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFNoYWRlcmkoUGxh
dGZvcm1HTE9iamVjdCBhcmcwLCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVy
blZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0U2hhZGVyaShhcmcwLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0U2hhZGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpHZXRTaGFkZXJpKGFyZzAsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRTaGFkZXJpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgU3Ry
aW5nIHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0U2hhZGVySW5mb0xvZyhhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJJbmZvTG9nOjpSZXBseShyZXR1cm5WYWx1ZSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlckluZm9Mb2coYXJnMCksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVySW5mb0xvZzo6UmVwbHkocmV0dXJuVmFs
dWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApAQCAtNDQwLDEwMjQg
KzY5NywxNzQ5IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsCiB7CiAgICAgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90LCAyPiByYW5nZVJlcGx5OwogICAgIGludDMyX3QgcHJlY2lzaW9uUmVw
bHkgPSB7IH07Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwg
cHJlY2lzaW9uVHlwZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hh
ZGVyUHJlY2lzaW9uRm9ybWF0OjpSZXBseShyYW5nZVJlcGx5LCBwcmVjaXNpb25SZXBseSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2VuZFJlc3VsdCkg
ewotICAgICAgICBtZW1jcHkocmFuZ2UuZGF0YSwgcmFuZ2VSZXBseS5kYXRhKCksIHJhbmdlLmJ1
ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOwotICAgICAgICBpZiAocHJlY2lzaW9uKQotICAgICAg
ICAgICAgKnByZWNpc2lvbiA9IHByZWNpc2lvblJlcGx5OworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNo
YWRlclByZWNpc2lvbkZvcm1hdDo6UmVwbHkocmFuZ2VSZXBseSwgcHJlY2lzaW9uUmVwbHkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KHJhbmdlLmRhdGEsIHJhbmdlUmVw
bHkuZGF0YSgpLCByYW5nZS5idWZTaXplICogc2l6ZW9mKGludDMyX3QpKTsKKyAgICAgICAgICAg
IGlmIChwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgKnByZWNpc2lvbiA9IHByZWNpc2lvblJl
cGx5OworICAgICAgICB9CiAgICAgfQogfQogCiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBT
dHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJTb3VyY2UoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0U2hhZGVyU291cmNlOjpSZXBseShyZXR1cm5WYWx1ZSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNoYWRlclNvdXJjZShhcmcwKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTaGFkZXJTb3VyY2U6OlJlcGx5KHJldHVyblZhbHVl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIEdDR0xmbG9hdCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRUZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgZmxvYXQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAg
c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFRleFBhcmFtZXRlcmY6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRUZXhQYXJhbWV0ZXJmOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmdldFRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSkKIHsKICAgICBpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUZXhQYXJh
bWV0ZXJpOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
LCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6R2V0VGV4UGFyYW1ldGVyaTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMU3BhbjxHQ0dMZmxvYXQ+IHZhbHVlKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVu
Y2U8ZmxvYXQ+IHZhbHVlUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9j
YXRpb24sIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkdldFVuaWZvcm1mdjo6UmVwbHkodmFsdWVSZXBseSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyLCAxMF9zKTsKLSAgICBpZiAoc2VuZFJlc3VsdCkKLSAgICAgICAgbWVtY3B5KHZhbHVl
LmRhdGEsIHZhbHVlUmVwbHkuZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKGZsb2F0KSk7
Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlm
b3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1mdjo6UmVwbHkodmFsdWVSZXBseSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHkuZGF0
YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKGZsb2F0KSk7CisgICAgfQogfQogCiB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPEdDR0xpbnQ+IHZhbHVlKQogewog
ICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gdmFsdWVSZXBseTsKLSAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybWl2OjpSZXBseSh2YWx1ZVJlcGx5KSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0
KQotICAgICAgICBtZW1jcHkodmFsdWUuZGF0YSwgdmFsdWVSZXBseS5kYXRhKCksIHZhbHVlLmJ1
ZlNpemUgKiBzaXplb2YoaW50MzJfdCkpOwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZS5i
dWZTaXplKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtaXY6
OlJlcGx5KHZhbHVlUmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweSh2
YWx1ZS5kYXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZihpbnQz
Ml90KSk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omdl
dFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMU3BhbjxHQ0dMdWludD4gdmFsdWUpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50
MzJfdD4gdmFsdWVSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRp
b24sIHZhbHVlLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFVuaWZvcm11aXY6OlJlcGx5KHZhbHVlUmVwbHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1bHQpCi0gICAgICAgIG1lbWNweSh2YWx1ZS5k
YXRhLCB2YWx1ZVJlcGx5LmRhdGEoKSwgdmFsdWUuYnVmU2l6ZSAqIHNpemVvZih1aW50MzJfdCkp
OwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5p
Zm9ybXVpdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybXVpdjo6UmVwbHkodmFsdWVSZXBseSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KHZhbHVlLmRhdGEsIHZhbHVlUmVwbHku
ZGF0YSgpLCB2YWx1ZS5idWZTaXplICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQogfQogCiBH
Q0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFVuaWZvcm1Mb2NhdGlvbihQ
bGF0Zm9ybUdMT2JqZWN0IGFyZzAsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpbnQzMl90
IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0VW5pZm9ybUxvY2F0aW9uKGFyZzAsIG5hbWUpLCBNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1Mb2NhdGlvbjo6UmVwbHkocmV0dXJuVmFs
dWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtTG9jYXRpb24oYXJnMCwgbmFt
ZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VW5pZm9ybUxvY2F0aW9u
OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCiBHQ0dMc2l6ZWlwdHIgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAgICB1aW50
NjRfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFZlcnRleEF0dHJpYk9mZnNldDo6UmVw
bHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoaW5kZXgsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQ6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIG1vZGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkhpbnQodGFyZ2V0LCBtb2RlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpIaW50KHRhcmdldCwgbW9kZSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omlz
QnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0g
eyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNC
dWZmZXIoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNCdWZmZXI6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3Mp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNCdWZmZXIoYXJn
MCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNCdWZmZXI6OlJlcGx5KHJl
dHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+
KHJldHVyblZhbHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0g
eyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNF
bmFibGVkKGNhcCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNFbmFibGVk
OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9z
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzRW5hYmxlZChj
YXApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzRW5hYmxlZDo6UmVwbHko
cmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVh
bj4ocmV0dXJuVmFsdWUpOwogfQogCiBHQ0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5Ojppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKICAgICBib29s
IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6SXNGcmFtZWJ1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpJc0ZyYW1lYnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OklzRnJhbWVidWZmZXIoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6SXNGcmFtZWJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUpOwogfQogCiBH
Q0dMYm9vbGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojppc1Byb2dyYW0oUGxhdGZv
cm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1Byb2dyYW0oYXJnMCks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNQcm9ncmFtOjpSZXBseShyZXR1
cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUHJvZ3JhbShhcmcwKSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1Byb2dyYW06OlJlcGx5KHJldHVyblZhbHVl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZh
bHVlKTsKIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNS
ZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1JlbmRlcmJ1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1JlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpJc1JlbmRlcmJ1ZmZlcihhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpJc1JlbmRlcmJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJuVmFsdWUpOwogfQogCiBHQ0dMYm9v
bGVhbiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojppc1NoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU2hhZGVyKGFyZzApLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU2hhZGVyOjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU2hhZGVyKGFyZzApLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzU2hhZGVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAg
ICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAK
IEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmlzVGV4dHVyZShQbGF0
Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzVGV4dHVyZShhcmcw
KSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1RleHR1cmU6OlJlcGx5KHJl
dHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUZXh0dXJlKGFyZzApLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzVGV4dHVyZTo6UmVwbHkocmV0dXJuVmFs
dWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmV0dXJu
VmFsdWUpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmxpbmVXaWR0
aChHQ0dMZmxvYXQgYXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6TGluZVdpZHRoKGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkxpbmVXaWR0aChhcmcwKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpsaW5rUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkxpbmtQcm9ncmFtKGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkxpbmtQ
cm9ncmFtKGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQaXhlbFN0b3JlaShwbmFt
ZSwgcGFyYW0pLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cG9seWdvbk9mZnNl
dChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpyZW5kZXJidWZmZXJTdG9yYWdl
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUs
IEdDR0xib29sZWFuIGludmVydCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIHN0YXRpY19jYXN0PGJvb2w+KGludmVy
dCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlNhbXBsZUNvdmVyYWdlKHZhbHVlLCBzdGF0aWNfY2FzdDxib29s
PihpbnZlcnQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U2Npc3Nvcih4
LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBhcmcwLCBjb25zdCBT
dHJpbmcmIGFyZzEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlNoYWRlclNvdXJjZShhcmcwLCBhcmcxKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTaGFkZXJTb3VyY2Uo
YXJnMCwgYXJnMSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1h
c2spCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5j
aWxGdW5jKGZ1bmMsIHJlZiwgbWFzayksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFBy
b3h5OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdD
R0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFz
ayksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1h
c2spKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRM
b3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnN0
ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxNYXNrKG1hc2spLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxN
YXNrKG1hc2spKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZh
Y2UsIG1hc2spKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBh
c3MpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlN0ZW5jaWxPcChmYWlsLCB6
ZmFpbCwgenBhc3MpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdD
R0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6U3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWws
IHpwYXNzKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZs
b2F0IHBhcmFtKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBhcmFtKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhQ
YXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBhcmFtKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0p
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0xZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB4KSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtMWYobG9jYXRpb24sIHgpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTFNwYW48
Y29uc3QgR0NHTGZsb2F0PiB2KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0
PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9h
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0x
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0xaShsb2NhdGlvbiwgeCksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB4KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFu
PGNvbnN0IEdDR0xpbnQ+IHYpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm0xaXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJf
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odi5kYXRhKSwgdi5idWZTaXplKSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3Qo
KSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPih2LmRhdGEpLCB2LmJ1ZlNp
emUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHgsIEdDR0xmbG9hdCB5KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMmYobG9j
YXRpb24sIHgsIHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTJm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHYpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0yZnYobG9jYXRp
b24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMmZ2KGxvY2F0
aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQg
eCwgR0NHTGludCB5KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpVbmlmb3JtMmkobG9jYXRpb24sIHgsIHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVz
dWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0yaShs
b2NhdGlvbiwgeCwgeSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eTo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
aW50PiB2KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpV
bmlmb3JtMml2KGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpLCBtX2dyYXBoaWNz
Q29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlVuaWZvcm0yaXYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odi5kYXRhKSwgdi5idWZTaXplKSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTNmKEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHopCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zZihs
b2NhdGlvbiwgeCwgeSwgeiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5
LCB6KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdikK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTNm
dihsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBmbG9hdCo+KHYuZGF0YSksIHYuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRl
bnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0z
ZnYobG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPih2LmRhdGEpLCB2LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpVbmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0zaXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gdikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPih2LmRhdGEp
LCB2LmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICgh
aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHYu
ZGF0YSksIHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgeCwgR0NH
TGZsb2F0IHksIEdDR0xmbG9hdCB6LCBHQ0dMZmxvYXQgdykKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGYobG9jYXRpb24sIHgsIHksIHosIHcpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm00ZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2KQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNGZ2KGxvY2F0aW9uLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
di5kYXRhKSwgdi5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRmdihsb2NhdGlvbiwg
SVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHYuZGF0YSksIHYuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0K
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtNGl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHYpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm00aXYobG9jYXRpb24sIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odi5k
YXRhKSwgdi5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTRpdihsb2NhdGlvbiwgSVBD
OjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3Qq
Pih2LmRhdGEpLCB2LmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiB2YWx1ZSkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDJm
dihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlLmRhdGEpLCB2
YWx1ZS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c3RhdGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlLmRhdGEpLCB2YWx1ZS5idWZTaXpl
KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5p
Zm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
R0xTcGFuPGNvbnN0IEdDR0xmbG9hdD4gdmFsdWUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHN0YXRpY19j
YXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZS5kYXRhKSwgdmFsdWUuYnVmU2l6ZSkpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRy
YW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPih2YWx1ZS5kYXRhKSwgdmFsdWUuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxv
YXQ+IHZhbHVlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2Up
LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0
Kj4odmFsdWUuZGF0YSksIHZhbHVlLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6OkFycmF5
UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWUuZGF0
YSksIHZhbHVlLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5Ojp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VXNlUHJvZ3JhbShhcmcwKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpVc2VQcm9ncmFtKGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0
IGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZh
bGlkYXRlUHJvZ3JhbShhcmcwKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWYWxpZGF0ZVByb2dyYW0oYXJnMCkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4
QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHgpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBp
bmRleCwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0LCAxPiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwg
SVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdCwgMT4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9h
dCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDE+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmli
MmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliMmYoaW5kZXgs
IHgsIHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWIy
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xTcGFuPGNvbnN0IEdDR0xmbG9hdCwgMj4gdmFsdWVzKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDI+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSksIG1fZ3JhcGhp
Y3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAg
ICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0LCAy
PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVm
U2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgeCwgR0NHTGZsb2F0IHks
IEdDR0xmbG9hdCB6KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4
QXR0cmliM2YoaW5kZXgsIHgsIHksIHopKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTGZsb2F0LCAzPiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxmbG9hdCwgMz4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5k
YXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDM+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQg
aW5kZXgsIEdDR0xmbG9hdCB4LCBHQ0dMZmxvYXQgeSwgR0NHTGZsb2F0IHosIEdDR0xmbG9hdCB3
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhB
dHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliNGYo
aW5kZXgsIHgsIHksIHosIHcpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29u
c3QgR0NHTGZsb2F0LCA0PiB2YWx1ZXMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxmbG9hdCwgND4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHZhbHVlcy5kYXRhKSwg
dmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
Pih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1
bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBp
bmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVk
LCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwg
c2l6ZSwgdHlwZSwgc3RhdGljX2Nhc3Q8Ym9vbD4obm9ybWFsaXplZCksIHN0cmlkZSwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYlBvaW50
ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0YXRpY19jYXN0PGJvb2w+KG5vcm1hbGl6ZWQpLCBzdHJp
ZGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQg
eSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpidWZmZXJEYXRhKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIGFyZzEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCdWZmZXJEYXRhMCh0YXJnZXQs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcmcxKSwgdXNhZ2UpLCBtX2dyYXBoaWNzQ29udGV4dEdM
SWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJ1ZmZl
ckRhdGEwKHRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFyZzEpLCB1c2FnZSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhLCBHQ0dMZW51bSB1
c2FnZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QnVm
ZmVyRGF0YTEodGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSksIHVzYWdlKSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCdWZmZXJEYXRhMSh0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWlu
dDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5i
dWZTaXplKSwgdXNhZ2UpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAg
bWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHk6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ob2Zmc2V0KSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9m
ZnNldCksIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cmVhZG5QaXhlbHMoR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3BhbjxHQ0dMdm9pZD4gZGF0YSkKIHsKICAgICBJUEM6
OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+IGRhdGFSZXBseTsKLSAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlYWRuUGl4ZWxz
MCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuYnVmU2l6ZSksIE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVhZG5QaXhlbHMwOjpSZXBseShkYXRhUmVw
bHkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRS
ZXN1bHQpCi0gICAgICAgIG1lbWNweShkYXRhLmRhdGEsIGRhdGFSZXBseS5kYXRhKCksIGRhdGEu
YnVmU2l6ZSAqIHNpemVvZih1aW50OF90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFkblBpeGVsczAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OlJlYWRuUGl4ZWxzMDo6UmVwbHkoZGF0YVJlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtZW1jcHkoZGF0YS5kYXRhLCBkYXRhUmVwbHkuZGF0YSgpLCBkYXRhLmJ1ZlNpemUg
KiBzaXplb2YodWludDhfdCkpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpyZWFkblBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpSZWFkblBpeGVsczEoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVhZG5QaXhlbHMx
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50
IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMdm9pZD4gcGl4ZWxzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpUZXhJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhf
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzLmRhdGEpLCBwaXhlbHMu
YnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlMkQwKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhl
bHMuZGF0YSksIHBpeGVscy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpUZXhJbWFnZTJEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihv
ZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250
ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhJbWFnZTJEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAg
ICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5Ojp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMdm9pZD4gcGl4ZWxzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTJEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWlu
dDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzLmRhdGEpLCBwaXhl
bHMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleFN1YkltYWdlMkQwKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhl
bHMuZGF0YSksIHBpeGVscy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlRleFN1YkltYWdlMkQxKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlRleFN1YkltYWdlMkQxKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdD
R0x2b2lkPiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpDb21wcmVzc2VkVGV4SW1hZ2UyRDAodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVp
bnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSksIGRhdGEu
YnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTJEMCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6
ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhJbWFnZTJEMSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4SW1hZ2UyRDEodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VT
aXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPiBkYXRhKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRDAodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkg
eworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQwKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEu
ZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1h
Z2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQxKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1
YkltYWdlMkQxKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0FycmF5c0lu
c3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdD
R0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291
bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OkRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50
LCBwcmltY291bnQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3RWxl
bWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihv
ZmZzZXQpLCBwcmltY291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkRyYXdFbGVtZW50c0luc3RhbmNlZCht
b2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHByaW1jb3Vu
dCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVy
dGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliRGl2aXNvcihp
bmRleCwgZGl2aXNvcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewogICAgIHVpbnQzMl90
IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4QXJyYXkoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheSgpLCBNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5OjpSZXBseShyZXR1cm5WYWx1ZSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJnMCkK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlVmVy
dGV4QXJyYXkoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlVmVydGV4QXJyYXkoYXJnMCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omlz
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1ZlcnRleEFycmF5KGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OklzVmVydGV4QXJyYXk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElk
ZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6SXNWZXJ0ZXhBcnJheShhcmcwKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1ZlcnRleEFycmF5OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJnMCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Qmlu
ZFZlcnRleEFycmF5KGFyZzApLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRWZXJ0ZXhBcnJheShhcmcwKSk7
CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgp
OworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb3B5QnVm
ZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NH
TGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIg
YXJnNCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29w
eUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyZWFkT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdyaXRlT2Zmc2V0KSwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGFyZzQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIp
OworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb3B5QnVmZmVyU3ViRGF0
YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlYWRPZmZz
ZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od3JpdGVPZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYXJnNCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFy
a0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNl
dCwgR0NHTFNwYW48R0NHTHZvaWQ+IGRhdGEpCiB7CiAgICAgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50OF90PiBkYXRhUmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRCdWZmZXJTdWJEYXRhKHRhcmdldCwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIGRhdGEuYnVmU2l6ZSksIE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QnVmZmVyU3ViRGF0YTo6UmVwbHkoZGF0YVJlcGx5KSwg
bV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0
KQotICAgICAgICBtZW1jcHkoZGF0YS5kYXRhLCBkYXRhUmVwbHkuZGF0YSgpLCBkYXRhLmJ1ZlNp
emUgKiBzaXplb2YodWludDhfdCkpOwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0QnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvZmZzZXQpLCBkYXRhLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkdldEJ1ZmZlclN1YkRhdGE6OlJlcGx5KGRhdGFSZXBseSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSwgZGF0YVJlcGx5LmRhdGEoKSwgZGF0YS5i
dWZTaXplICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdDR0xpbnQg
c3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAsIEdDR0xp
bnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVsZCBtYXNr
LCBHQ0dMZW51bSBmaWx0ZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0
WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlciksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Qmxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGlu
dCBsZXZlbCwgR0NHTGludCBsYXllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkZyYW1lYnVmZmVyVGV4dHVy
ZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjppbnZhbGlkYXRlRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZW51bT4gYXR0YWNo
bWVudHMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklu
dmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhdHRhY2htZW50cy5kYXRhKSwgYXR0
YWNobWVudHMuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAg
aWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0
YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihhdHRhY2htZW50cy5kYXRhKSwgYXR0YWNobWVudHMuYnVmU2l6ZSkpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmludmFsaWRh
dGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVt
PiBhdHRhY2htZW50cywgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6SW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1lbnRz
LmRhdGEpLCBhdHRhY2htZW50cy5idWZTaXplKSwgeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6SW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgSVBDOjpBcnJheVJlZmVy
ZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGF0dGFjaG1l
bnRzLmRhdGEpLCBhdHRhY2htZW50cy5idWZTaXplKSwgeCwgeSwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cmVhZEJ1ZmZl
cihHQ0dMZW51bSBzcmMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlJlYWRCdWZmZXIoc3JjKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZWFkQnVmZmVyKHNyYykpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3RvcmFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3Rv
cmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3RvcmFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRo
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUZXhTdG9y
YWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4SW1hZ2UzRDAodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0YSksIHBpeGVscy5idWZTaXplKSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6VGV4SW1hZ2UzRDAodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0YSks
IHBpeGVscy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dGV4SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VGV4SW1hZ2UzRDEodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG9mZnNldCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlRleEltYWdlM0QxKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp0ZXhTdWJJbWFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQs
IEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29u
c3QgR0NHTHZvaWQ+IHBpeGVscykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UzRDAodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhl
bHMuZGF0YSksIHBpeGVscy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UzRDAo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMuZGF0YSksIHBpeGVscy5idWZTaXplKSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dGV4U3Vi
SW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwg
R0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpUZXhTdWJJbWFnZTNEMSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VGV4U3ViSW1hZ2UzRDEodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvcHlUZXhTdWJJbWFn
ZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dM
aW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q29weVRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgem9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6Q29weVRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9m
ZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dM
c2l6ZWkgaW1hZ2VTaXplLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdm9pZD4gZGF0YSkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdl
M0QwKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
Ym9yZGVyLCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdlM0QwKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBpbWFnZVNpemUsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5k
YXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6Y29tcHJlc3NlZFRleEltYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkg
aW1hZ2VTaXplLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleEltYWdlM0QxKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBpbWFnZVNpemUs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2Vk
VGV4SW1hZ2UzRDEodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkp
KTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0
KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTFNwYW48Y29uc3QgR0NHTHZvaWQ+IGRhdGEpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNvbXByZXNzZWRUZXhT
dWJJbWFnZTNEMCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8
dWludDhfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKSwgZGF0
YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0QwKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBmb3JtYXQsIGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwor
ICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9m
ZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xz
aXplaSBpbWFnZVNpemUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRDEodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSksIG1fZ3Jh
cGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0QxKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6
ZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiBHQ0dMaW50
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgaW50MzJfdCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksIE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0RnJhZ0RhdGFMb2NhdGlvbjo6UmVwbHkocmV0dXJu
VmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dy
YW0sIG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEZyYWdEYXRh
TG9jYXRpb246OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTF1
aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlVuaWZvcm0xdWkobG9jYXRpb24sIHYwKSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6VW5pZm9ybTJ1aShsb2NhdGlvbiwgdjAsIHYxKSwgbV9ncmFwaGljc0Nv
bnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAg
IGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpVbmlmb3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2MikpOworICAg
ICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTR1aShH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBH
Q0dMdWludCB2MykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpLCBtX2dyYXBoaWNzQ29udGV4
dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0
byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVu
aWZvcm00dWkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTF1aXYobG9jYXRpb24sIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihkYXRh
LmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMXVpdihsb2NhdGlv
biwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MzJfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFzZW5k
UmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xTcGFuPGNvbnN0IEdDR0x1aW50PiBkYXRhKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGRh
dGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0ydWl2KGxvY2F0
aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
ZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTN1aXYobG9j
YXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1bmlmb3JtNHVpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMdWludD4gZGF0YSkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9ybTR1aXYobG9jYXRpb24sIElQQzo6
QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3Qq
PihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtNHVpdihs
b2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MzJfdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm1NYXRyaXgyeDNmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VW5pZm9ybU1hdHJpeDJ4M2Z2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFu
c3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9y
bU1hdHJpeDJ4M2Z2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4
M3gyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlS
ZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEp
LCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4M3gyZnYobG9jYXRp
b24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8Zmxv
YXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNp
emUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgc3Rh
dGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9v
bD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnVuaWZvcm1NYXRyaXg0eDJmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIEdDR0xTcGFuPGNvbnN0IEdD
R0xmbG9hdD4gZGF0YSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFu
c3Bvc2UpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YS5kYXRhKSwgZGF0YS5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VW5pZm9y
bU1hdHJpeDR4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxib29sPih0cmFuc3Bvc2UpLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YS5kYXRhKSwgZGF0YS5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgR0NHTFNwYW48Y29uc3QgR0NHTGZsb2F0PiBkYXRhKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlS
ZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEp
LCBkYXRhLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlm
ICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpVbmlmb3JtTWF0cml4M3g0ZnYobG9jYXRp
b24sIHN0YXRpY19jYXN0PGJvb2w+KHRyYW5zcG9zZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8Zmxv
YXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhLmRhdGEpLCBkYXRhLmJ1ZlNp
emUpKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp1
bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IGRhdGEpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgc3Rh
dGljX2Nhc3Q8Ym9vbD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpLCBt
X2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Ym9v
bD4odHJhbnNwb3NlKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KGRhdGEuZGF0YSksIGRhdGEuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYg
KCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQog
CiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJpYkk0aShHQ0dM
dWludCBpbmRleCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRy
aWJJNGkoaW5kZXgsIHgsIHksIHosIHcpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0g
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYkk0aShp
bmRleCwgeCwgeSwgeiwgdykpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAg
ICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgR0NHTFNwYW48Y29u
c3QgR0NHTGludCwgND4gdmFsdWVzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNl
PGludDMyX3QsIDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KHZhbHVlcy5kYXRh
KSwgdmFsdWVzLmJ1ZlNpemUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAg
IGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4
LCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3QsIDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
aW50MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhB
dHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZp
ZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJJ
NHVpKGluZGV4LCB4LCB5LCB6LCB3KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAg
ICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Ojp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dMdWludCBpbmRleCwgR0NHTFNw
YW48Y29uc3QgR0NHTHVpbnQsIDQ+IHZhbHVlcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliSTR1aXYoaW5kZXgsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDMyX3QsIDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2
YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmli
STR1aXYoaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3QsIDQ+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOwor
ICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsK
KyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6dmVydGV4QXR0
cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBz
aXplLCB0eXBlLCBzdHJpZGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQp
CisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwg
R0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQs
IHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpKSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3
UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG9mZnNldCkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAg
ICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmRyYXdCdWZmZXJzKEdDR0xTcGFuPGNvbnN0IEdDR0xlbnVtPiBidWZzKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3QnVmZmVy
cyhJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4oYnVmcy5kYXRhKSwgYnVmcy5idWZTaXplKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0J1
ZmZlcnMoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KGJ1ZnMuZGF0YSksIGJ1ZnMuYnVmU2l6ZSkpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0g
YnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IHZhbHVl
cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJC
dWZmZXJpdihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVm
U2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJf
dCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZm
ZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTFNwYW48Y29uc3QgR0NHTHVpbnQ+IHZhbHVlcykK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZm
ZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90Pihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4odmFsdWVzLmRhdGEpLCB2YWx1ZXMuYnVm
U2l6ZSkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwg
SVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHZhbHVlcy5kYXRhKSwgdmFsdWVzLmJ1ZlNpemUpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1
ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMZmxvYXQ+IHZhbHVl
cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJC
dWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1ZXMuZGF0YSksIHZhbHVlcy5idWZTaXpl
KSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIElQQzo6
QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPih2YWx1
ZXMuZGF0YSksIHZhbHVlcy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xp
bnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNsZWFyQnVmZmVyZmkoYnVm
ZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q2xlYXJCdWZm
ZXJmaShidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKSk7CisgICAgICAgIGlmICgh
c2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAog
UGxhdGZvcm1HTE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVRdWVy
eSgpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVRdWVyeSgpLCBNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVF1ZXJ5OjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVF1ZXJ5KCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlUXVlcnk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6ZGVsZXRlUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlUXVlcnkocXVlcnkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkRlbGV0ZVF1ZXJ5KHF1ZXJ5KSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGJv
b2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNRdWVyeShQbGF0Zm9ybUdMT2Jq
ZWN0IHF1ZXJ5KQogewogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMo
TWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1F1ZXJ5KHF1ZXJ5KSwgTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1F1ZXJ5OjpSZXBseShyZXR1cm5WYWx1ZSks
IG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnkocXVlcnkpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OklzUXVlcnk6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRh
cmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6QmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmVuZFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RW5kUXVlcnkodGFyZ2V0
KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpFbmRRdWVyeSh0YXJnZXQpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVz
dWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiBQbGF0Zm9y
bUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldFF1ZXJ5KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRR
dWVyeSh0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRRdWVyeTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRR
dWVyeSh0YXJnZXQsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRRdWVyeTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQor
ICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKIH0KIAogR0NHTHVpbnQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0UXVl
cnlPYmplY3R1aShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5LCBHQ0dMZW51bSBwbmFtZSkKIHsKICAg
ICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFF1ZXJ5T2JqZWN0dWkocXVlcnksIHBuYW1lKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeU9iamVjdHVpOjpSZXBseShy
ZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBp
ZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3lu
YyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFF1ZXJ5T2JqZWN0dWkocXVl
cnksIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRRdWVyeU9i
amVjdHVpOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OmNyZWF0ZVNhbXBsZXIoKQogewogICAgIHVpbnQzMl90IHJldHVyblZhbHVlID0geyB9OwotICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2FtcGxl
cigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNhbXBsZXI6OlJl
cGx5KHJldHVyblZhbHVlKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlU2FtcGxlcigp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVNhbXBsZXI6OlJlcGx5
KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1h
cmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkRlbGV0ZVNhbXBsZXIoc2FtcGxlciksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1
bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlU2FtcGxl
cihzYW1wbGVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtD
b250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NHTGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eTo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKICAgICBi
b29sIHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6SXNTYW1wbGVyKHNhbXBsZXIpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OklzU2FtcGxlcjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpJc1NhbXBsZXIoc2FtcGxlciksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6SXNTYW1wbGVyOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNl
bmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFNhbXBsZXIoR0NHTHVpbnQgdW5pdCwgUGxh
dGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpCaW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKSwgbV9ncmFwaGljc0NvbnRl
eHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpC
aW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAg
ICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBw
bmFtZSwgcGFyYW0pLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBu
YW1lLCBwYXJhbSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSkp
OworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKKyAgICB9CiB9CiAKIEdDR0xmbG9hdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRTYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBu
YW1lKQogewogICAgIGZsb2F0IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxl
ciwgcG5hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNhbXBsZXJQ
YXJhbWV0ZXJmOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlm
aWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNl
bmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRTYW1wbGVyUGFyYW1ldGVyZjo6UmVwbHkocmV0dXJuVmFsdWUpKTsK
KyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7
CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogR0NHTGludCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpnZXRTYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRT
YW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9z
dCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0U2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFNhbXBsZXJQYXJhbWV0ZXJp
OjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCiBHQ0dMc3luYyBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpmZW5jZVN5bmMoR0NH
TGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7CiAgICAgdWludDY0X3QgcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpGZW5jZVN5bmMoY29uZGl0aW9uLCBmbGFncyksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6RmVuY2VTeW5jOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3ND
b250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkZlbmNlU3luYyhjb25kaXRpb24sIGZsYWdzKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpGZW5jZVN5bmM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQ0dMc3luYz4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KHJldHVyblZhbHVlKSk7CiB9CiAKIEdDR0xib29sZWFuIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHk6OmlzU3luYyhHQ0dMc3luYyBhcmcwKQogewogICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1N5bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGFyZzApKSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNTeW5jOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsKKyAg
ICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzU3luYyhzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKSwgTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1N5bmM6OlJlcGx5KHJldHVyblZhbHVlKSk7Cisg
ICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwor
ICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsK
IH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpkZWxldGVTeW5jKEdDR0xz
eW5jIGFyZzApCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OkRlbGV0ZVN5bmMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGFyZzApKSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlz
Q29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RGVsZXRlU3luYyhzdGF0aWNfY2FzdDx1aW50NjRf
dD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NH
TGVudW0gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5
bmMgYXJnMCwgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7CiAgICAg
dWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnRXYWl0U3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBmbGFncywgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHRpbWVvdXQpKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGll
bnRXYWl0U3luYzo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpD
bGllbnRXYWl0U3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oYXJnMCkpLCBmbGFncywgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRpbWVvdXQpKSwgTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnRXYWl0U3luYzo6UmVwbHkocmV0
dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0Nv
bnRleHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojp3YWl0U3luYyhHQ0dMc3luYyBhcmcwLCBHQ0dM
Yml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpXYWl0U3luYyhzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBmbGFncywgc3RhdGljX2Nhc3Q8aW50
NjRfdD4odGltZW91dCkpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OldhaXRTeW5jKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih0aW1lb3V0KSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xpbnQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6Z2V0U3luY2koR0NHTHN5bmMgYXJnMCwgR0NHTGVudW0gcG5hbWUp
CiB7CiAgICAgaW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFN5bmNpKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihyZWludGVycHJldF9jYXN0PGludHB0cl90PihhcmcwKSksIHBuYW1lKSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTeW5jaTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRTeW5jaShzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBwbmFtZSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6R2V0U3luY2k6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlm
ICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogewogICAgIHVpbnQz
Ml90IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6Q3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUcmFuc2Zvcm1GZWVkYmFjazo6UmVwbHkocmV0dXJu
VmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVRyYW5zZm9ybUZlZWRi
YWNrOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgaWQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpEZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZCkpOworICAgICAgICBpZiAoIXNlbmRS
ZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIEdDR0xi
b29sZWFuIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmlzVHJhbnNmb3JtRmVlZGJhY2so
UGxhdGZvcm1HTE9iamVjdCBpZCkKIHsKICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwotICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUcmFuc2Zvcm1G
ZWVkYmFjayhpZCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNUcmFuc2Zv
cm1GZWVkYmFjazo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJ
c1RyYW5zZm9ybUZlZWRiYWNrKGlkKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpJc1RyYW5zZm9ybUZlZWRiYWNrOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAo
IXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBpZCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgaWQp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OkJpbmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIGlkKSk7CisgICAg
ICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAg
IH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpiZWdpblRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJlZ2luVHJhbnNmb3JtRmVlZGJhY2socHJpbWl0aXZl
TW9kZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmltaXRpdmVNb2Rl
KSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9z
dCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjplbmRU
cmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OkVuZFRyYW5zZm9ybUZlZWRiYWNrKCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVu
dGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RW5kVHJhbnNm
b3JtRmVlZGJhY2soKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1h
cmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5Ojp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0sIHZhcnlpbmdzLCBidWZmZXJNb2RlKSwgbV9ncmFwaGlj
c0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0sIHZhcnlpbmdzLCBidWZmZXJN
b2RlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpn
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgYXJnMikKIHsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhwcm9n
cmFtLCBpbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nOjpSZXBseShhcmcyKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8g
c2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKHByb2dyYW0sIGluZGV4KSwgTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmc6OlJlcGx5
KGFyZzIpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6
OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpQYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
UGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAg
ICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UmVzdW1lVHJhbnNmb3JtRmVlZGJh
Y2soKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmJpbmRCdWZmZXJCYXNlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpCaW5kQnVmZmVy
QmFzZSh0YXJnZXQsIGluZGV4LCBidWZmZXIpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
cik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0
ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkJpbmRCdWZmZXJCYXNl
KHRhcmdldCwgaW5kZXgsIGJ1ZmZlcikpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6YmluZEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVp
bnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NH
THNpemVpcHRyIGFyZzQpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZmZXIsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnNCkpLCBtX2dyYXBo
aWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OkJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZmZXIsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvZmZzZXQpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYXJnNCkpKTsKKyAgICAg
ICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAg
fQogfQogCiBWZWN0b3I8R0NHTHVpbnQ+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Omdl
dFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHVuaWZvcm1OYW1lcykKIHsKICAgICBWZWN0b3I8dWludDMyX3Q+IHJldHVyblZhbHVl
ID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
R2V0VW5pZm9ybUluZGljZXMocHJvZ3JhbSwgdW5pZm9ybU5hbWVzKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtSW5kaWNlczo6UmVwbHkocmV0dXJuVmFsdWUp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRVbmlmb3JtSW5kaWNlcyhwcm9ncmFtLCB1bmlm
b3JtTmFtZXMpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1J
bmRpY2VzOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisg
ICAgICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiBWZWN0b3I8R0NHTGludD4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8
R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUpCiB7CiAgICAgVmVjdG9y
PGludDMyX3Q+IHJldHVyblZhbHVlID0geyB9OwotICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybXMocHJvZ3JhbSwgdW5pZm9ybUlu
ZGljZXMsIHBuYW1lKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3Rp
dmVVbmlmb3Jtczo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRp
ZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpH
ZXRBY3RpdmVVbmlmb3Jtcyhwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcywgcG5hbWUpLCBNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1zOjpSZXBseShyZXR1
cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29u
dGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBHQ0dMdWlu
dCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsK
ICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVu
aWZvcm1CbG9ja05hbWUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVu
aWZvcm1CbG9ja0luZGV4OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldFVuaWZvcm1CbG9ja0luZGV4OjpSZXBs
eShyZXR1cm5WYWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBt
YXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBT
dHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2Nr
TmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
KQogewogICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICBzZW5kU3luYyhNZXNzYWdl
czo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUocHJv
Z3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWU6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ncmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIsIDEwX3MpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShwcm9ncmFtLCB1bmlm
b3JtQmxvY2tJbmRleCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0QWN0
aXZlVW5pZm9ybUJsb2NrTmFtZTo6UmVwbHkocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgaWYgKCFz
ZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Ojp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlVuaWZvcm1CbG9ja0JpbmRp
bmcocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpLCBtX2dy
YXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgs
IHVuaWZvcm1CbG9ja0JpbmRpbmcpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdDR0x1aW50IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTFNwYW48R0NH
TGludD4gcGFyYW1zKQogewogICAgIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gcGFyYW1z
UmVwbHk7Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihwcm9ncmFtLCB1bmlmb3Jt
QmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdjo6UmVwbHkocGFyYW1zUmVwbHkp
LCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgMTBfcyk7Ci0gICAgaWYgKHNlbmRSZXN1
bHQpCi0gICAgICAgIG1lbWNweShwYXJhbXMuZGF0YSwgcGFyYW1zUmVwbHkuZGF0YSgpLCBwYXJh
bXMuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Ci0gICAgCisgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihwcm9ncmFtLCB1
bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcy5idWZTaXplKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdjo6UmVwbHkocGFyYW1z
UmVwbHkpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweShwYXJhbXMuZGF0YSwg
cGFyYW1zUmVwbHkuZGF0YSgpLCBwYXJhbXMuYnVmU2l6ZSAqIHNpemVvZihpbnQzMl90KSk7Cisg
ICAgfQogfQogCiBHQ0dMaW50IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmdldEdyYXBo
aWNzUmVzZXRTdGF0dXNBUkIoKQogewogICAgIGludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQjo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29u
dGV4dEdMSWRlbnRpZmllciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAg
ICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCksIE1lc3NhZ2VzOjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQjo6UmVwbHkocmV0dXJu
VmFsdWUpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGxhdGZvcm1H
TE9iamVjdCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpCiB7CiAgICAgdWludDMyX3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpDcmVhdGVWZXJ0ZXhBcnJheU9FUygpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFycmF5T0VTOjpS
ZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyLCAxMF9zKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkNyZWF0ZVZlcnRleEFy
cmF5T0VTKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Q3JlYXRlVmVydGV4
QXJyYXlPRVM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkK
KyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEZWxldGVWZXJ0ZXhBcnJheU9FUyhhcmcwKSwgbV9n
cmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7
CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjpEZWxldGVWZXJ0ZXhBcnJheU9FUyhhcmcwKSk7CisgICAgICAgIGlmICghc2Vu
ZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KIH0KIAogR0NH
TGJvb2xlYW4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6aXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybUdMT2JqZWN0IGFyZzApCiB7CiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAg
ICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OklzVmVydGV4QXJy
YXlPRVMoYXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6SXNWZXJ0ZXhB
cnJheU9FUzo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciwgMTBfcyk7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpJc1Zl
cnRleEFycmF5T0VTKGFyZzApLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Oklz
VmVydGV4QXJyYXlPRVM6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHJldHVyblZhbHVlKTsKIH0KIAogdm9pZCBSZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5OjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVj
dCBhcmcwKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpC
aW5kVmVydGV4QXJyYXlPRVMoYXJnMCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsK
KyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6QmluZFZlcnRleEFycmF5T0VT
KGFyZzApKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRl
eHRMb3N0KCk7CisgICAgfQogfQogCiBTdHJpbmcgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmplY3QgYXJnMCkK
IHsKICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUo
YXJnMCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6R2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFOjpSZXBseShyZXR1cm5WYWx1ZSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OkdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShhcmcwKSwgTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEU6OlJlcGx5
KHJldHVyblZhbHVlKSk7CisgICAgICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1h
cmtDb250ZXh0TG9zdCgpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6ZHJhd0J1ZmZlcnNFWFQoR0NHTFNwYW48
Y29uc3QgR0NHTGVudW0+IGJ1ZnMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OkRyYXdCdWZmZXJzRVhUKElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihidWZzLmRhdGEpLCBidWZzLmJ1ZlNp
emUpKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0
TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3QnVmZmVyc0VYVChJUEM6OkFycmF5UmVmZXJlbmNlPHVp
bnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYnVmcy5kYXRhKSwgYnVm
cy5idWZTaXplKSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJr
Q29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eTo6ZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmly
c3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50
aWZpZXIpOworICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3QXJyYXlz
SW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpKTsKKyAgICAgICAg
aWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQog
fQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OmRyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTHZvaWRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RShtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCksIHByaW1j
b3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4
dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291
bnQsIHR5cGUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpLCBwcmltY291bnQpKTsKKyAg
ICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6VmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFKGluZGV4LCBkaXZpc29yKSwgbV9ncmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIpOwor
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUoaW5kZXgsIGRpdmlzb3IpKTsKKyAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQorICAgICAg
ICAgICAgbWFya0NvbnRleHRMb3N0KCk7CisgICAgfQogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xTcGFuPEdDR0xpbnQ+IHBh
cmFtcykKIHsKICAgICBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IHBhcmFtc1JlcGx5Owot
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgcGFyYW1zLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Okdl
dEludGVybmFsZm9ybWF0aXY6OlJlcGx5KHBhcmFtc1JlcGx5KSwgbV9ncmFwaGljc0NvbnRleHRH
TElkZW50aWZpZXIsIDEwX3MpOwotICAgIGlmIChzZW5kUmVzdWx0KQotICAgICAgICBtZW1jcHko
cGFyYW1zLmRhdGEsIHBhcmFtc1JlcGx5LmRhdGEoKSwgcGFyYW1zLmJ1ZlNpemUgKiBzaXplb2Yo
aW50MzJfdCkpOwotICAgIAorICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgcGFy
YW1zLmJ1ZlNpemUpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OkdldEludGVy
bmFsZm9ybWF0aXY6OlJlcGx5KHBhcmFtc1JlcGx5KSk7CisgICAgICAgIGlmICghc2VuZFJlc3Vs
dCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtZW1jcHkocGFyYW1zLmRhdGEsIHBhcmFtc1JlcGx5LmRhdGEoKSwgcGFyYW1zLmJ1ZlNp
emUgKiBzaXplb2YoaW50MzJfdCkpOworICAgIH0KIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjptdWx0aURyYXdBcnJheXNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bh
bjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRz
LCBHQ0dMc2l6ZWkgZHJhd2NvdW50KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpNdWx0aURyYXdBcnJheXNBTkdMRShtb2RlLCBJUEM6OkFycmF5UmVmZXJl
bmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGZpcnN0cy5kYXRh
KSwgZmlyc3RzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwgY291bnRzLmJ1ZlNpemUpLCBk
cmF3Y291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7CisgICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZChNZXNzYWdlczo6
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0FycmF5c0FOR0xFKG1vZGUsIElQQzo6
QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4o
Zmlyc3RzLmRhdGEpLCBmaXJzdHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJf
dD4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY291bnRzLmRhdGEpLCBjb3VudHMu
YnVmU2l6ZSksIGRyYXdjb3VudCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAg
ICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9k
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6
ZWk+IGNvdW50cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NH
THNpemVpIGRyYXdjb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6TXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihmaXJzdHMu
ZGF0YSksIGZpcnN0cy5idWZTaXplKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihjb3VudHMuZGF0YSksIGNvdW50cy5idWZTaXpl
KSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGlu
dDMyX3QqPihpbnN0YW5jZUNvdW50cy5kYXRhKSwgaW5zdGFuY2VDb3VudHMuYnVmU2l6ZSksIGRy
YXdjb3VudCksIG1fZ3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29u
dGV4dExvc3QoKSkgeworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9k
ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGlu
dDMyX3QqPihmaXJzdHMuZGF0YSksIGZpcnN0cy5idWZTaXplKSwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihjb3VudHMuZGF0YSks
IGNvdW50cy5idWZTaXplKSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGludDMyX3QqPihpbnN0YW5jZUNvdW50cy5kYXRhKSwgaW5zdGFuY2VDb3Vu
dHMuYnVmU2l6ZSksIGRyYXdjb3VudCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAg
ICAgICAgICBtYXJrQ29udGV4dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48
Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6TXVsdGlEcmF3RWxlbWVudHNBTkdM
RShtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwgY291bnRzLmJ1ZlNpemUpLCB0eXBlLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KG9m
ZnNldHMuZGF0YSksIG9mZnNldHMuYnVmU2l6ZSksIGRyYXdjb3VudCksIG1fZ3JhcGhpY3NDb250
ZXh0R0xJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgeworICAgICAgICBh
dXRvIHNlbmRSZXN1bHQgPSBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
TXVsdGlEcmF3RWxlbWVudHNBTkdMRShtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNvdW50cy5kYXRhKSwgY291bnRzLmJ1
ZlNpemUpLCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgaW50MzJfdCo+KG9mZnNldHMuZGF0YSksIG9mZnNldHMuYnVmU2l6ZSksIGRyYXdj
b3VudCkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NH
TGludD4gb2Zmc2V0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywg
R0NHTHNpemVpIGRyYXdjb3VudCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6TXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGNv
dW50cy5kYXRhKSwgY291bnRzLmJ1ZlNpemUpLCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGlu
dDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KG9mZnNldHMuZGF0YSksIG9m
ZnNldHMuYnVmU2l6ZSksIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBpbnQzMl90Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSksIGluc3RhbmNlQ291bnRz
LmJ1ZlNpemUpLCBkcmF3Y291bnQpLCBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcik7Cisg
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2Vu
ZChNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ok11bHRpRHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUobW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGludDMyX3QqPihjb3VudHMuZGF0YSksIGNvdW50cy5idWZTaXplKSwgdHlw
ZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGNvbnN0IGlu
dDMyX3QqPihvZmZzZXRzLmRhdGEpLCBvZmZzZXRzLmJ1ZlNpemUpLCBJUEM6OkFycmF5UmVmZXJl
bmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGluc3RhbmNlQ291
bnRzLmRhdGEpLCBpbnN0YW5jZUNvdW50cy5idWZTaXplKSwgZHJhd2NvdW50KSk7CisgICAgICAg
IGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOworICAgIH0K
IH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDU2NGE1NDhiM2NjMzYzYmExMjM2OGEwODNjN2M0OGE2YTVkOWQwN2QuLmVjNThiMThmOTRj
MmVlN2NjNGYwYWE5YjVmYTc2NTFiZTdmOWIwMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wMi0wNCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHkgc2hvdWxkIHN1cHBvcnQgbG9zaW5nIHRoZSBjb250ZXh0IGFuZCBz
aG91bGQgbG9zZSB0aGUgY29udGV4dCBvbiB0aW1lb3V0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2VuZXJhdGUgY2FsbHMgdG8gbG9zZSB0aGUgY29u
dGV4dCBvbiB0aW1lb3V0cy4KKworICAgICAgICBHZW5lcmF0ZSB0aGUgc2VuZCBjYWxscyBhcyBj
YWxscyB0byB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0byBzZW5kIHRoZQorICAgICAgICBtZXNzYWdl
cy4gVGhlIGhlbHBlciBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIHRoZSBub24tY2hhbmdpbmcgYXJn
dW1lbnRzLgorCisgICAgICAgIE1vdmUgZmV3IG1lc3NhZ2VzIHRvIGJlIGltcGxlbWVudGVkIGJ5
IGhhbmQuCisKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2w6CisKIDIwMjEt
MDItMDkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHTGliXSBQZXJtaXNzaW9uIHJlcXVlc3QgQVBJIGZvciBNZWRpYUtleVN5c3RlbSBhY2Nlc3Mg
c3VwcG9ydApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsIGIv
VG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCmluZGV4IGYxNmI0MjIyOWNmMmY4Mjhj
NjZjN2U3YjQxNzczYzJlYmU0NDMxMTQuLmFlZGVlZDNkNmUyNWJhNGUxZDg1ZjM0YWIyZDllM2Fj
ZWJiNDRmZGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAor
KysgYi9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wKQEAgLTk5LDYgKzk5LDggQEAg
bWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UmVmQ291bnRlZCB7ewogI2Vu
ZGlmCiAgICAgdm9pZCBFbnN1cmVFeHRlbnNpb25FbmFibGVkKFN0cmluZyBleHRlbnNpb24pCiAg
ICAgdm9pZCBOb3RpZnlNYXJrQ29udGV4dENoYW5nZWQoKQorICAgIHZvaWQgU3ludGhlc2l6ZUdM
RXJyb3IodWludDMyX3QgZXJyb3IpCisgICAgdm9pZCBHZXRFcnJvcigpIC0+ICh1aW50MzJfdCBy
ZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKIHt9CiB9fQogCkBAIC01ODUsMjIgKzU4NywyNCBAQCBj
bGFzcyB3ZWJraXRfaXBjX2NwcF9wcm94eV9pbXBsKG9iamVjdCk6CiAgICAgICAgIGluX2V4cHJz
ID0gIiwgIi5qb2luKFtzdHIoaSkgZm9yIGkgaW4gc2VsZi5pbl9leHByc10pCiAgICAgICAgIG91
dF9leHBycyA9ICIsICIuam9pbihzdHIobykgZm9yIG8gaW4gc2VsZi5vdXRfZXhwcnMpCiAgICAg
ICAgIGlzX2FzeW5jID0gc2VsZi5yZXR1cm5fdHlwZS5pc192b2lkKCkgYW5kIGxlbihvdXRfZXhw
cnMpID09IDAKKyAgICAgICAgc2VsZi5jYWxsX3N0bXRzICs9IFsgImlmICghaXNDb250ZXh0TG9z
dCgpKSB7IiBdCiAgICAgICAgIGlmIGlzX2FzeW5jOgogICAgICAgICAgICAgc2VsZi5jYWxsX3N0
bXRzICs9IFsKLSAgICAgICAgICAgICAgICBmInNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMOjp7c2VsZi5tc2dfbmFtZX0oe2luX2V4cHJzfSksIG1fZ3JhcGhpY3NDb250ZXh0
R0xJZGVudGlmaWVyKTsiLAorICAgICAgICAgICAgICAgIGYiICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp7c2VsZi5tc2dfbmFtZX0o
e2luX2V4cHJzfSkpOyIsCiAgICAgICAgICAgICBdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBzZW5kX3Jlc3VsdCA9ICIiCi0gICAgICAgICAgICBpZiBzZWxmLnBvc3RfY2FsbF9zdG10czog
Ci0gICAgICAgICAgICAgICAgc2VuZF9yZXN1bHQgPSAiYXV0byBzZW5kUmVzdWx0ID0gIgotICAg
ICAgICAgICAgICAgIHNlbGYucG9zdF9jYWxsX3N0bXRzID0gWwotICAgICAgICAgICAgICAgICAg
ICAiaWYgKHNlbmRSZXN1bHQpIiArICgiIHsiIGlmIGxlbihzZWxmLnBvc3RfY2FsbF9zdG10cykg
PiAxIGVsc2UgIiIpCi0gICAgICAgICAgICAgICAgXSArIFsiICAgICIgKyBzIGZvciBzIGluIHNl
bGYucG9zdF9jYWxsX3N0bXRzXSArIFsKLSAgICAgICAgICAgICAgICAgICAgKCJ9IiBpZiBsZW4o
c2VsZi5wb3N0X2NhbGxfc3RtdHMpID4gMSBlbHNlICIiKQotICAgICAgICAgICAgICAgIF0KICAg
ICAgICAgICAgIHNlbGYuY2FsbF9zdG10cyArPSBbCi0gICAgICAgICAgICAgICAgZiJ7c2VuZF9y
ZXN1bHR9c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp7c2VsZi5t
c2dfbmFtZX0oe2luX2V4cHJzfSksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
e3NlbGYubXNnX25hbWV9OjpSZXBseSh7b3V0X2V4cHJzfSksIG1fZ3JhcGhpY3NDb250ZXh0R0xJ
ZGVudGlmaWVyLCAxMF9zKTsiLAorICAgICAgICAgICAgICAgIGYiICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6e3NlbGYubXNn
X25hbWV9KHtpbl9leHByc30pLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Ontz
ZWxmLm1zZ19uYW1lfTo6UmVwbHkoe291dF9leHByc30pKTsiCiAgICAgICAgICAgICBdCisgICAg
ICAgIHNlbGYuY2FsbF9zdG10cyArPSBbCisgICAgICAgICAgICAiICAgIGlmICghc2VuZFJlc3Vs
dCkiLAorICAgICAgICAgICAgIiAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7IiwKKyAgICAgICAg
XQorICAgICAgICBpZiBzZWxmLnBvc3RfY2FsbF9zdG10czoKKyAgICAgICAgICAgIHNlbGYuY2Fs
bF9zdG10cyArPSBbIiAgICBlbHNlIHsiXSBpZiBsZW4oc2VsZi5wb3N0X2NhbGxfc3RtdHMpID4g
MSBlbHNlIFsgIiAgICBlbHNlIl0KKyAgICAgICAgICAgIHNlbGYucG9zdF9jYWxsX3N0bXRzID0g
WyAiICAgICIgKyBsIGZvciBsIGluIHNlbGYucG9zdF9jYWxsX3N0bXRzIF0KKyAgICAgICAgICAg
IHNlbGYucG9zdF9jYWxsX3N0bXRzICs9IFsgIiAgICB9IiBdIGlmIGxlbihzZWxmLnBvc3RfY2Fs
bF9zdG10cykgPiAxIGVsc2UgW10KKyAgICAgICAgc2VsZi5wb3N0X2NhbGxfc3RtdHMgKz0gWyAi
fSIgXQogCiAKICAgICBkZWYgcHJvY2Vzc19pbl9hcmdzKHNlbGYsIGluX2FyZ3M6IExpc3RbY3Bw
X2FyZ10pOgpAQCAtNjIxLDggKzYyNSw4IEBAIGNsYXNzIHdlYmtpdF9pcGNfY3BwX3Byb3h5X2lt
cGwob2JqZWN0KToKICAgICAgICAgICAgICAgICBzZWxmLm91dF9leHBycyArPSBbZV0KICAgICAg
ICAgICAgICAgICBzZWxmLnBvc3RfY2FsbF9zdG10cyArPSBbCiAgICAgICAgICAgICAgICAgICAg
ICNmbXQ6IG9mZgotICAgICAgICAgICAgICAgICAgICBmImlmICh7by5uYW1lfSkiLAotICAgICAg
ICAgICAgICAgICAgICBmIiAgICAqe28ubmFtZX0gPSB7d2Via2l0X2lwY19jb252ZXJ0X2V4cHIo
ZSwgdmFsdWVfdHlwZSl9OyIKKyAgICAgICAgICAgICAgICAgICAgZiIgICAgaWYgKHtvLm5hbWV9
KSIsCisgICAgICAgICAgICAgICAgICAgIGYiICAgICAgICAqe28ubmFtZX0gPSB7d2Via2l0X2lw
Y19jb252ZXJ0X2V4cHIoZSwgdmFsdWVfdHlwZSl9OyIKICAgICAgICAgICAgICAgICAgICAgI2Zt
dDogb24KICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICBlbGlmIG8udHlwZS5pc19zcGFu
KCk6CkBAIC02MzQsNyArNjM4LDcgQEAgY2xhc3Mgd2Via2l0X2lwY19jcHBfcHJveHlfaW1wbChv
YmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG8udHlwZS5pc19keW5hbWljX3NwYW4oKToKICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5pbl9leHBycyArPSBbY3BwX2V4cHIoZ2V0X2NwcF90eXBl
KCJzaXplX3QiKSwgZiJ7by5uYW1lfS5idWZTaXplIildCiAgICAgICAgICAgICAgICAgc2VsZi5w
b3N0X2NhbGxfc3RtdHMgKz0gWwotICAgICAgICAgICAgICAgICAgICBmIm1lbWNweSh7by5uYW1l
fS5kYXRhLCB7di5uYW1lfS5kYXRhKCksIHtvLm5hbWV9LmJ1ZlNpemUgKiBzaXplb2Yoe3N0cih3
ZWJraXRfaXBjX3R5cGUuZ2V0X2NvbnRhaW5lZF90eXBlKCkpfSkpOyIKKyAgICAgICAgICAgICAg
ICAgICAgZiIgICAgbWVtY3B5KHtvLm5hbWV9LmRhdGEsIHt2Lm5hbWV9LmRhdGEoKSwge28ubmFt
ZX0uYnVmU2l6ZSAqIHNpemVvZih7c3RyKHdlYmtpdF9pcGNfdHlwZS5nZXRfY29udGFpbmVkX3R5
cGUoKSl9KSk7IgogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICAgc2VsZi5vdXRfZXhwcnMgKz0gW2NwcF9leHByKG8udHlwZSwgby5uYW1lKV0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBlNzkyZGQ0MTRlNmJiZDQ5OGE5ZTlkZWQxZWM2YzJlNDU3ZmIwZTNkLi44ZWNiOGE1M2Jl
ODQxZmVmMmM3YjA1MTdjNjlmMzNkMGEwMWY1NDEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjEtMDItMDQgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5IHNob3VsZCBzdXBwb3J0IGxvc2luZyB0aGUg
Y29udGV4dCBhbmQgc2hvdWxkIGxvc2UgdGhlIGNvbnRleHQgb24gdGltZW91dHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTM5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0aGUgbG9zZS1jb250
ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwuIFRoZSB0ZXN0IHdhcyB1c2luZworICAgICAgICBh
biBpbnRlcm5hbCBmdW5jdGlvbiB0byBsb3NlIHRoZSBjb250ZXh0IGFuZCB0aGVuIHN5bmNocm9u
b3VzbHkKKyAgICAgICAgY2hlY2tpbmcgdGhhdCB0aGUgY29udGV4dCB3YXMgbG9zdC4gV2l0aCBH
UFUgcHJvY2VzcyB0aGlzIGlzIG5vdAorICAgICAgICBwb3NzaWJsZSwgc28gY2hlY2sgYWZ0ZXIg
bm9ybWFsIENhbnZhcyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50LgorCisgICAgICAgIEVuYWJsZSB0
aGUgdGVzdCBmb3IgLS11c2UtZ3B1LXByb2Nlc3MuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9sb3NlLWNvbnRleHQtb24tc3RhdHVzLWZhaWx1cmUuaHRtbDoKKyAgICAgICAgKiBncHUt
cHJvY2Vzcy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTAyLTA5ICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBQZXJtaXNzaW9uIHJlcXVlc3QgQVBJ
IGZvciBNZWRpYUtleVN5c3RlbSBhY2Nlc3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvbG9zZS1jb250ZXh0LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9sb3NlLWNvbnRleHQtb24tc3RhdHVzLWZh
aWx1cmUuaHRtbAppbmRleCBjZTg0NGQzMGRiYzNmYWZmMDAzYWEyNGVkMjhlYjA2ZGUwNjQ5YjBm
Li5iODM5MTY4NjRkYmQ2ZTcwYzM4ZGRmYjdhMzRlMjQ1NTJlYzA3YjgxIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9sb3NlLWNvbnRleHQtb24tc3RhdHVzLWZhaWx1
cmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9sb3NlLWNvbnRleHQt
b24tc3RhdHVzLWZhaWx1cmUuaHRtbApAQCAtMjYsNiArMjYsNyBAQCB2YXIgc2ltcGxlQ29sb3JG
cmFnbWVudFNoYWRlciA9IFsKIAogdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsOwor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwogCiBpZiAod2luZG93LmluaXROb25LaHJvbm9z
RnJhbWV3b3JrKQogICAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayhmYWxzZSk7CkBA
IC00MSw3ICs0MiwxMiBAQCBmdW5jdGlvbiBtYWtlQ2FudmFzKCkgewogICAgIHJldHVybiBjYW52
YXM7CiB9CiAKLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Cithc3luYyBmdW5jdGlvbiB3ZWJHTENvbnRl
eHRMb3N0KGNhbnZhcykKK3sKKyAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBjYW52
YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsIHJlc29sdmUpKTsKK30KKwor
YXN5bmMgZnVuY3Rpb24gcnVuVGVzdCgpIHsKIAogICAgIGRlYnVnKCIiKTsKICAgICBkZWJ1Zygi
VGVzdCBkcmF3QXJyYXlzLiIpOwpAQCAtNjUsNiArNzEsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkg
ewogICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQogICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmZh
aWxOZXh0R1BVU3RhdHVzQ2hlY2soZ2wpOwogICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVT
LCAwLCA2KTsKKyAgICBhd2FpdCB3ZWJHTENvbnRleHRMb3N0KGNhbnZhcyk7CiAgICAgc2hvdWxk
QmVUcnVlKCJnbC5pc0NvbnRleHRMb3N0KCkiKTsKICAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3Io
KSIsICJnbC5DT05URVhUX0xPU1RfV0VCR0wiKTsKIApAQCAtOTYsNiArMTAzLDcgQEAgZnVuY3Rp
b24gcnVuVGVzdCgpIHsKICAgICBpZiAod2luZG93LmludGVybmFscykKICAgICAgICAgd2luZG93
LmludGVybmFscy5mYWlsTmV4dEdQVVN0YXR1c0NoZWNrKGdsKTsKICAgICBnbC5kcmF3RWxlbWVu
dHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgYXdhaXQgd2Vi
R0xDb250ZXh0TG9zdChjYW52YXMpCiAgICAgc2hvdWxkQmVUcnVlKCJnbC5pc0NvbnRleHRMb3N0
KCkiKTsKICAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5DT05URVhUX0xPU1RfV0VC
R0wiKTsKIApAQCAtMTIyLDYgKzEzMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCiAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZmFpbE5leHRHUFVT
dGF0dXNDaGVjayhnbCk7CiAgICAgZXh0LmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShnbC5UUklB
TkdMRVMsIDAsIDYsIDEwKTsKKyAgICBhd2FpdCB3ZWJHTENvbnRleHRMb3N0KGNhbnZhcyk7CiAg
ICAgc2hvdWxkQmVUcnVlKCJnbC5pc0NvbnRleHRMb3N0KCkiKTsKICAgICBzaG91bGRCZSgiZ2wu
Z2V0RXJyb3IoKSIsICJnbC5DT05URVhUX0xPU1RfV0VCR0wiKTsKIApAQCAtMTU0LDEzICsxNjMs
MTYgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICBpZiAod2luZG93LmludGVybmFscykKICAg
ICAgICAgd2luZG93LmludGVybmFscy5mYWlsTmV4dEdQVVN0YXR1c0NoZWNrKGdsKTsKICAgICBl
eHQuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05F
RF9TSE9SVCwgMCwgOCk7CisgICAgYXdhaXQgd2ViR0xDb250ZXh0TG9zdChjYW52YXMpOwogICAg
IHNob3VsZEJlVHJ1ZSgiZ2wuaXNDb250ZXh0TG9zdCgpIik7CiAgICAgc2hvdWxkQmUoImdsLmdl
dEVycm9yKCkiLCAiZ2wuQ09OVEVYVF9MT1NUX1dFQkdMIik7CiAKICAgICBmaW5pc2hUZXN0KCk7
CiB9CiAKLXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgcnVuVGVzdCwgZmFsc2UpOwor
cnVuVGVzdCgpOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKIDwvc2NyaXB0Pgog
PGJvZHk+Ci08L2JvZHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9ib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZ3B1LXByb2Nlc3MvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL2dwdS1wcm9jZXNzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYzM2NmZkOWFkMDc2ZjU1
ZWUyODVlNmY3OTg0YTg4M2UxODZiZjVjZi4uMGZjOTA3NDhhOGM0MjZjMDU5ZmMyYWYzZjdmYjQw
N2RlNmQyNTQyMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZ3B1LXByb2Nlc3MvVGVzdEV4cGVj
dGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9ncHUtcHJvY2Vzcy9UZXN0RXhwZWN0YXRpb25zCkBA
IC04Nyw3ICs4Nyw2IEBAIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWwgWyBGYWls
dXJlIF0KIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtY3JlYXRpb24tYXR0cmlidXRlcy5odG1s
IFsgRmFpbHVyZSBdCiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LXVwZGF0ZS1vbi1kaXNwbGF5
LWNvbmZpZ3VyYXRpb24uaHRtbCBbIFRpbWVvdXQgXQogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4
ZWxzdG9yZWkuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9jYW52YXMvd2ViZ2wvbG9zZS1jb250ZXh0
LW9uLXN0YXR1cy1mYWlsdXJlLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvY2FudmFzL3dlYmdsL3By
ZW11bHRpcGx5YWxwaGEtdGVzdC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2NhbnZhcy93ZWJnbC90
ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLXJnYjU2NS5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZp
ZGVvLXJnYmE0NDQ0Lmh0bWwgWyBGYWlsdXJlIF0KQEAgLTc1NSw0ICs3NTQsNCBAQCB3ZWJydGMv
aDI2NC1oaWdoLmh0bWwgWyBGYWlsdXJlIF0KIHdlYnJ0Yy92aWRlby5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBUaW1lb3V0IF0KIHdlYnJ0Yy92
aWRlby1yb3RhdGlvbi5odG1sIFsgVGltZW91dCBdCi13ZWJydGMvdmlkZW8tdW5tdXRlLmh0bWwg
WyBUaW1lb3V0IF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit3ZWJydGMvdmlkZW8tdW5t
dXRlLmh0bWwgWyBUaW1lb3V0IF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>