<?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>34204</bug_id>
          
          <creation_ts>2010-01-27 00:36:13 -0800</creation_ts>
          <short_desc>Web Inspector: Migrate from ScriptObject to InspectorValue as the InspectorFrontend / backend interchange object.</short_desc>
          <delta_ts>2010-06-03 13:29:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184982</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-27 00:36:13 -0800</bug_when>
    <thetext>Currently InjectedScript operates ScriptValue/Object and is running within inspected page&apos;s context. It is safe to pass objects between injected script and the page.
Frontend is running in its own context, entirely isolated from the inspected page. We should make sure that JS objects do not cross the boundary and I suggest that we enforce it via introducing explicit FrontendValue/Object classes (derived from ScriptValue/Object). InspectorFrontend then will only accept objects of this type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225790</commentid>
    <comment_count>1</comment_count>
      <attachid>56066</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-14 06:54:54 -0700</bug_when>
    <thetext>Created attachment 56066
[WIP Patch] Handing over to Ilya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229706</commentid>
    <comment_count>2</comment_count>
      <attachid>56874</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-05-24 05:19:50 -0700</bug_when>
    <thetext>Created attachment 56874
[patch] initial version.

It is the first patch with implementation for InspectorValues classes.
The changes for TimelineAgent, DOMAgent etc. will be processed separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229711</commentid>
    <comment_count>3</comment_count>
      <attachid>56874</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-24 06:00:36 -0700</bug_when>
    <thetext>Comment on attachment 56874
[patch] initial version.

WebCore/inspector/InspectorFrontend.h:53
 +          virtual void dispatchMessageToInspector(const String&amp; message) = 0;
We already have InspectorFrontendClient which serves as the frontend delegate, this method should go there.

WebCore/inspector/InspectorValues.cpp:43
 +      JSONBuffer(size_t preallocate) : m_position(0), m_buffer(preallocate) { }
Should be possible to use Vector instead of this class, it has capacity in addition to size. The only issue there may be fixed resize strategy.

WebCore/inspector/InspectorValues.h:117
 +      explicit InspectorValue(bool value) : InspectorBaseValue(TypeBoolean) { m_boolValue = value; }
should other constructors be explicit?

WebCore/inspector/InspectorValues.h:103
 +  class InspectorValue : public InspectorBaseValue {
I think this should be InspectorPromitiveValue or something, InspectorValue is too generic.

Can we have tests for the JSON stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232349</commentid>
    <comment_count>4</comment_count>
      <attachid>57459</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-05-31 06:56:02 -0700</bug_when>
    <thetext>Created attachment 57459
[patch] Classes for native serialization to JSON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232352</commentid>
    <comment_count>5</comment_count>
      <attachid>57459</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-31 07:10:24 -0700</bug_when>
    <thetext>Comment on attachment 57459
[patch] Classes for native serialization to JSON.

WebCore/inspector/InspectorValues.h:47
 +  class InspectorBaseValue : public RefCounted&lt;InspectorBaseValue&gt; {
InspectorValue


WebCore/inspector/InspectorValues.h:78
 +  class InspectorValue : public InspectorBaseValue {
InspectorBasicValue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232356</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-31 07:11:38 -0700</bug_when>
    <thetext>Attachment 57459 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2797010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232358</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-31 07:29:31 -0700</bug_when>
    <thetext>Attachment 57459 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2822008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232359</commentid>
    <comment_count>8</comment_count>
      <attachid>57461</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-05-31 07:30:40 -0700</bug_when>
    <thetext>Created attachment 57461
[patch] second iteration

InspectorValue -&gt; InspectorBasicValue
InspectorBaseValue -&gt; InspectorValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232361</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-31 07:36:09 -0700</bug_when>
    <thetext>Attachment 57461 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/2803008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232365</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-31 07:39:47 -0700</bug_when>
    <thetext>Attachment 57461 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2750012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232366</commentid>
    <comment_count>11</comment_count>
      <attachid>57463</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-05-31 07:39:49 -0700</bug_when>
    <thetext>Created attachment 57463
[patch] third iteration. With fixes for linux build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232367</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-31 07:42:54 -0700</bug_when>
    <thetext>Attachment 57463 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/2802012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232370</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-31 07:51:30 -0700</bug_when>
    <thetext>Attachment 57461 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/2750013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232372</commentid>
    <comment_count>14</comment_count>
      <attachid>57466</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-05-31 07:53:08 -0700</bug_when>
    <thetext>Created attachment 57466
[patch] fourth iteration. With fixed mac export list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232529</commentid>
    <comment_count>15</comment_count>
      <attachid>57466</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-31 15:28:41 -0700</bug_when>
    <thetext>Comment on attachment 57466
[patch] fourth iteration. With fixed mac export list.

Clearing flags on attachment: 57466

Committed r60452: &lt;http://trac.webkit.org/changeset/60452&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232530</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-31 15:28:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233897</commentid>
    <comment_count>17</comment_count>
      <attachid>57466</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-03 13:29:12 -0700</bug_when>
    <thetext>Comment on attachment 57466
[patch] fourth iteration. With fixed mac export list.

&gt; +++ b/WebCore/inspector/InspectorValues.cpp
&gt; +    result.reserveCapacity(512);

For my education, was there any particular surrounding the
decision for 512?


&gt; +++ b/WebCore/inspector/InspectorValues.h
&gt; +    unsigned length() { return m_data.size(); }

I think this can this be const:

  unsigned length() const { ... }


Otherwise really well done.This looks very clean!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56066</attachid>
            <date>2010-05-14 06:54:54 -0700</date>
            <delta_ts>2010-05-14 06:54:54 -0700</delta_ts>
            <desc>[WIP Patch] Handing over to Ilya.</desc>
            <filename>wip_patch</filename>
            <type>text/plain</type>
            <size>136359</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGE2YjZjMDkuLjcwYzNlOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTI5OSw2ICsxMjk5LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2Uu
aCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5NjA4YWIyLi4yYmUwM2UyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTY3MSw2ICsxNjcxLDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
JywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1Nj
cmlwdEJyZWFrcG9pbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlz
dGVuZXIuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCA0ZDJiNjk2Li5hNmY4YTdjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcwNCw2ICs3MDQsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBc
CiAgICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9h
cmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJl
c291cmNlLmNwcCBcCkBAIC0xNDI4LDYgKzE0MjksNyBAQCBIRUFERVJTICs9IFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKyAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggXAogICAgIGluc3BlY3Rvci9TY3JpcHRHQ0V2
ZW50TGlzdGVuZXIuaCBcCiAgICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIFwK
ICAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNjVjZWFkMi4uNWU5NTkzYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mzc4MSw2ICs0Mzc4MSwxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMjNhOTkxZS4uOGMwNzhm
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYyLDYg
KzYyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJl
c291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKQEAgLTU2NCw3ICs1NjUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cygpCiAKICAgICBSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291
cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkp
OworICAgICAgICBpdC0+c2Vjb25kLT51cGRhdGVJbnNwZWN0b3JPYmplY3QobV9mcm9udGVuZC5n
ZXQoKSk7CiAKICAgICBtX2RvbUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2UtPm1h
aW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKIApAQCAtNTkxLDcgKzU5Miw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICNpZiBFTkFCTEUoV09SS0VS
UykKICAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJzRW5kID0gbV93b3JrZXJzLmVuZCgp
OwogICAgIGZvciAoV29ya2Vyc01hcDo6aXRlcmF0b3IgaXQgPSBtX3dvcmtlcnMuYmVnaW4oKTsg
aXQgIT0gd29ya2Vyc0VuZDsgKytpdCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29y
a2VyKCppdC0+c2Vjb25kKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29ya2VyKGl0
LT5zZWNvbmQtPmlkKCksIGl0LT5zZWNvbmQtPnVybCgpLCBpdC0+c2Vjb25kLT5pc1NoYXJlZFdv
cmtlcigpKTsKICNlbmRpZgogCiAgICAgbV9mcm9udGVuZC0+cG9wdWxhdGVJbnRlcmZhY2UoKTsK
QEAgLTYwNiw3ICs2MDcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnVuYmluZEFsbFJl
c291cmNlcygpCiB7CiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQgPSBt
X3Jlc291cmNlcy5lbmQoKTsgCiAgICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KSAKLSAgICAgICAg
aXQtPnNlY29uZC0+cmVsZWFzZVNjcmlwdE9iamVjdCgwKTsgCisgICAgICAgIGl0LT5zZWNvbmQt
PnJlbGVhc2VJbnNwZWN0b3JPYmplY3QoMCk7IAogICAgIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRh
YmFzZVJlc291cmNlcy5lbmQoKTsKQEAgLTYzNiw3ICs2MzcsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAsIERvY3Vt
ZW50TG9hZAogICAgICAgICBpZiAoIWxvYWRlclRvS2VlcCB8fCAhcmVzb3VyY2UtPmlzU2FtZUxv
YWRlcihsb2FkZXJUb0tlZXApKSB7CiAgICAgICAgICAgICByZW1vdmVSZXNvdXJjZShyZXNvdXJj
ZSk7CiAgICAgICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgICAgICByZXNvdXJj
ZS0+cmVsZWFzZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICByZXNvdXJjZS0+cmVsZWFzZUluc3BlY3Rvck9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTY5MCw3ICs2OTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgICAg
ICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIG1haW4gcmVzb3VyY2UgdW50aWwgaXRzIGxvYWQgaXMg
Y29tbWl0dGVkLiBUaGlzIGlzCiAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIHRvIGtlZXAgdGhl
IGxvYWQgZm9yIGEgdXNlci1lbnRlcmVkIFVSTCBmcm9tIHNob3dpbmcgdXAgaW4gdGhlCiAgICAg
ICAgICAgICAgICAgLy8gbGlzdCBvZiByZXNvdXJjZXMgZm9yIHRoZSBwYWdlIHRoZXkgYXJlIG5h
dmlnYXRpbmcgYXdheSBmcm9tLgotICAgICAgICAgICAgICAgIG1fbWFpblJlc291cmNlLT51cGRh
dGVTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9tYWlu
UmVzb3VyY2UtPnVwZGF0ZUluc3BlY3Rvck9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gUGFnZXMgbG9hZGVkIGZyb20gdGhl
IHBhZ2UgY2FjaGUgYXJlIGNvbW1pdHRlZCBiZWZvcmUKICAgICAgICAgICAgICAgICAvLyBtX21h
aW5SZXNvdXJjZSBpcyB0aGUgcmlnaHQgcmVzb3VyY2UgZm9yIHRoaXMgbG9hZCwgc28gd2UKQEAg
LTgwMSw3ICs4MDIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNvdXJj
ZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLAogICAgIGFkZFJlc291cmNl
KHJlc291cmNlLmdldCgpKTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICByZXNvdXJj
ZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICByZXNvdXJj
ZS0+dXBkYXRlSW5zcGVjdG9yT2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKQEAgLTgyNSw3ICs4MjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
CiAgICAgYWRkUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCiAgICAgaWYgKG1fZnJvbnRlbmQg
JiYgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5pc0xvYWRpbmdGcm9tQ2FjaGVkUGFnZSgpICYmIHJl
c291cmNlID09IG1fbWFpblJlc291cmNlKQotICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0
T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICByZXNvdXJjZS0+dXBkYXRlSW5zcGVj
dG9yT2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTgzOCw3ICs4MzksNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVy
KiBsb2FkZQogICAgICAgICBpZiAobV90aW1lbGluZUFnZW50KQogICAgICAgICAgICAgbV90aW1l
bGluZUFnZW50LT5kaWRNYXJrRE9NQ29udGVudEV2ZW50KCk7CiAgICAgICAgIGlmIChtX2Zyb250
ZW5kKQotICAgICAgICAgICAgbV9tYWluUmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX2Zy
b250ZW5kLmdldCgpKTsKKyAgICAgICAgICAgIG1fbWFpblJlc291cmNlLT51cGRhdGVJbnNwZWN0
b3JPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CiAgICAgfQogfQogCkBAIC04NTIsNyArODUzLDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChE
b2N1bWVudExvYWRlciogbG9hZGVyLCBjb24KICAgICAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkK
ICAgICAgICAgICAgIG1fdGltZWxpbmVBZ2VudC0+ZGlkTWFya0xvYWRFdmVudCgpOwogICAgICAg
ICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgIG1fbWFpblJlc291cmNlLT51cGRhdGVTY3Jp
cHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgICAgICBtX21haW5SZXNvdXJjZS0+
dXBkYXRlSW5zcGVjdG9yT2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAt
ODkyLDcgKzg5Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyCiAgICAgcmVzb3VyY2UtPnVw
ZGF0ZVJlcXVlc3QocmVxdWVzdCk7CiAKICAgICBpZiAocmVzb3VyY2UgIT0gbV9tYWluUmVzb3Vy
Y2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCht
X2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZUluc3BlY3Rvck9iamVj
dChtX2Zyb250ZW5kLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRS
ZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKQEAgLTkyMSw3ICs5MjIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
aW50CiAgICAgcmVzb3VyY2UtPmFkZExlbmd0aChsZW5ndGhSZWNlaXZlZCk7CiAKICAgICBpZiAo
cmVzb3VyY2UgIT0gbV9tYWluUmVzb3VyY2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3Vy
Y2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgcmVzb3Vy
Y2UtPnVwZGF0ZUluc3BlY3Rvck9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllcikKQEAgLTkzNyw3ICs5MzgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZp
bmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogCiAgICAgLy8gTm8gbmVlZCB0
byBtdXRlIHRoaXMgZXZlbnQgZm9yIG1haW4gcmVzb3VyY2Ugc2luY2UgaXQgaGFwcGVucyBhZnRl
ciBkaWQgY29tbWl0IGxvYWQuCiAgICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNl
LT51cGRhdGVTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIHJlc291cmNl
LT51cGRhdGVJbnNwZWN0b3JPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTk1OSw3ICs5NjAsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyYwogCiAgICAgLy8gTm8gbmVlZCB0byBtdXRlIHRoaXMgZXZlbnQgZm9y
IG1haW4gcmVzb3VyY2Ugc2luY2UgaXQgaGFwcGVucyBhZnRlciBkaWQgY29tbWl0IGxvYWQuCiAg
ICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3Qo
bV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIHJlc291cmNlLT51cGRhdGVJbnNwZWN0b3JPYmpl
Y3QobV9mcm9udGVuZC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVz
b3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgU2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcpCkBAIC05NzQsNyArOTc1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3Qo
dW5zaWduZWQgbG9uZyBpZGVudGkKICAgICByZXNvdXJjZS0+c2V0T3ZlcnJpZGVDb250ZW50KHNv
dXJjZVN0cmluZywgSW5zcGVjdG9yUmVzb3VyY2U6OlhIUik7CiAKICAgICBpZiAobV9mcm9udGVu
ZCkKLSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdldCgp
KTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZUluc3BlY3Rvck9iamVjdChtX2Zyb250ZW5kLmdl
dCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQpAQCAtOTg5
LDcgKzk5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmCiAgICAgcmVzb3VyY2UtPnNldE92
ZXJyaWRlQ29udGVudChTY3JpcHRTdHJpbmcoc291cmNlU3RyaW5nKSwgSW5zcGVjdG9yUmVzb3Vy
Y2U6OlNjcmlwdCk7CiAKICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPnVw
ZGF0ZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVw
ZGF0ZUluc3BlY3Rvck9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKGJvb2wgYWx3YXlzLCBib29sIHJl
bG9hZCkKQEAgLTEwOTUsMTAgKzEwOTYsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpw
b3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChjb25zdCBJbnNwZWN0b3JXb3JrZXIKICAg
ICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAgY2FzZSBJbnNwZWN0b3JD
b250cm9sbGVyOjpXb3JrZXJDcmVhdGVkOgotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDcmVhdGVX
b3JrZXIod29ya2VyKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29ya2VyKHdvcmtl
ci5pZCgpLCB3b3JrZXIudXJsKCksIHdvcmtlci5pc1NoYXJlZFdvcmtlcigpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJEZXN0cm95ZWQ6Ci0g
ICAgICAgIG1fZnJvbnRlbmQtPmRpZERlc3Ryb3lXb3JrZXIod29ya2VyKTsKKyAgICAgICAgbV9m
cm9udGVuZC0+ZGlkRGVzdHJveVdvcmtlcih3b3JrZXIuaWQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIH0KQEAgLTEyMDQsMzUgKzEyMDUsMzMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRDb29raWVzKGxvbmcgY2FsbElkKQogICAgIH0KIAogICAgIGlmICghcmF3Q29va2llc0lt
cGxlbWVudGVkKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRDb29raWVzKGNhbGxJZCwgbV9m
cm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKSwgc3RyaW5nQ29va2llc0xpc3QpOworICAgICAgICBt
X2Zyb250ZW5kLT5kaWRHZXRDb29raWVzKGNhbGxJZCwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
LCBzdHJpbmdDb29raWVzTGlzdCk7CiAgICAgZWxzZQogICAgICAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRDb29raWVzKGNhbGxJZCwgYnVpbGRBcnJheUZvckNvb2tpZXMocmF3Q29va2llc0xpc3QpLCBT
dHJpbmcoKSk7CiB9CiAgICAgCi1TY3JpcHRBcnJheSBJbnNwZWN0b3JDb250cm9sbGVyOjpidWls
ZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKK1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRBcnJheUZvckNvb2tp
ZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCiB7Ci0gICAgU2NyaXB0QXJyYXkg
Y29va2llcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7Ci0KLSAgICBMaXN0SGFzaFNl
dDxDb29raWU+OjppdGVyYXRvciBlbmQgPSBjb29raWVzTGlzdC5lbmQoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNvb2tpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAg
TGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgaXQgPSBjb29raWVzTGlzdC5iZWdpbigpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQsIGkrKykKLSAgICAgICAgY29va2ll
cy5zZXQoaSwgYnVpbGRPYmplY3RGb3JDb29raWUoKml0KSk7CisgICAgZm9yIChMaXN0SGFzaFNl
dDxDb29raWU+OjppdGVyYXRvciBpdDsgaXQgIT0gY29va2llc0xpc3QuZW5kKCk7ICsraXQpCisg
ICAgICAgIGNvb2tpZXMtPnB1c2goYnVpbGRPYmplY3RGb3JDb29raWUoKml0KSk7CiAKICAgICBy
ZXR1cm4gY29va2llczsKIH0KIAotU2NyaXB0T2JqZWN0IEluc3BlY3RvckNvbnRyb2xsZXI6OmJ1
aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQorUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3Qg
Q29va2llJiBjb29raWUpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IHZhbHVlID0gbV9mcm9udGVuZC0+
bmV3U2NyaXB0T2JqZWN0KCk7Ci0gICAgdmFsdWUuc2V0KCJuYW1lIiwgY29va2llLm5hbWUpOwot
ICAgIHZhbHVlLnNldCgidmFsdWUiLCBjb29raWUudmFsdWUpOwotICAgIHZhbHVlLnNldCgiZG9t
YWluIiwgY29va2llLmRvbWFpbik7Ci0gICAgdmFsdWUuc2V0KCJwYXRoIiwgY29va2llLnBhdGgp
OwotICAgIHZhbHVlLnNldCgiZXhwaXJlcyIsIGNvb2tpZS5leHBpcmVzKTsKLSAgICB2YWx1ZS5z
ZXQoInNpemUiLCAoY29va2llLm5hbWUubGVuZ3RoKCkgKyBjb29raWUudmFsdWUubGVuZ3RoKCkp
KTsKLSAgICB2YWx1ZS5zZXQoImh0dHBPbmx5IiwgY29va2llLmh0dHBPbmx5KTsKLSAgICB2YWx1
ZS5zZXQoInNlY3VyZSIsIGNvb2tpZS5zZWN1cmUpOwotICAgIHZhbHVlLnNldCgic2Vzc2lvbiIs
IGNvb2tpZS5zZXNzaW9uKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgdmFsdWUtPnNldFN0cmluZygibmFtZSIsIGNv
b2tpZS5uYW1lKTsKKyAgICB2YWx1ZS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIGNvb2tpZS52YWx1ZSk7
CisgICAgdmFsdWUtPnNldFN0cmluZygiZG9tYWluIiwgY29va2llLmRvbWFpbik7CisgICAgdmFs
dWUtPnNldFN0cmluZygicGF0aCIsIGNvb2tpZS5wYXRoKTsKKyAgICB2YWx1ZS0+c2V0TnVtYmVy
KCJleHBpcmVzIiwgY29va2llLmV4cGlyZXMpOworICAgIHZhbHVlLT5zZXROdW1iZXIoInNpemUi
LCAoY29va2llLm5hbWUubGVuZ3RoKCkgKyBjb29raWUudmFsdWUubGVuZ3RoKCkpKTsKKyAgICB2
YWx1ZS0+c2V0Qm9vbCgiaHR0cE9ubHkiLCBjb29raWUuaHR0cE9ubHkpOworICAgIHZhbHVlLT5z
ZXRCb29sKCJzZWN1cmUiLCBjb29raWUuc2VjdXJlKTsKKyAgICB2YWx1ZS0+c2V0Qm9vbCgic2Vz
c2lvbiIsIGNvb2tpZS5zZXNzaW9uKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAgICAgCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggYTkwYjI5OS4uNjk4YzgxNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjMsMTAgKzYzLDEz
IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJ
bmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKK2NsYXNzIEluc3BlY3Rv
ckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsK
IHN0cnVjdCBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOworY2xh
c3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBL
VVJMOwpAQCAtMjkyLDkgKzI5NSw5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogZ2V0RE9NU3RvcmFnZVJlc291cmNl
Rm9ySWQobG9uZyBzdG9yYWdlSWQpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNjcmlwdE9iamVjdCBidWlsZE9i
amVjdEZvckNvb2tpZShjb25zdCBDb29raWUmKTsKLSAgICBTY3JpcHRBcnJheSBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+Jik7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4m
KTsKIAogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcAppbmRleCAxMTY0NzM2Li5mZjllZGMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01MSw5ICs1MSwxMiBAQAogI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250RmFtaWx5Lmgi
CiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2
ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtNjIsNyArNjUsNiBAQAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRl
ICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKQEAgLTExMSw3ICsx
MTMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9j
KQogICAgICAgICBpZiAoZG9jLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIHB1c2hE
b2N1bWVudFRvRnJvbnRlbmQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mcm9udGVuZC0+c2V0
RG9jdW1lbnQoU2NyaXB0T2JqZWN0KCkpOworICAgICAgICBtX2Zyb250ZW5kLT5zZXREb2N1bWVu
dChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cmVsZWFzZURhbmdsaW5nTm9kZXMoKQpAQCAtMTYxLDcgKzE2Myw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCog
ZXZlbnQpCiAgICAgICAgICAgICAvLyBSZS1hZGQgZnJhbWUgb3duZXIgZWxlbWVudCB0b2dldGhl
ciB3aXRoIGl0cyBuZXcgY2hpbGRyZW4uCiAgICAgICAgICAgICBsb25nIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUobm9kZSkpOwogICAgICAgICAg
ICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgZnJhbWVPd25lcklkKTsK
LSAgICAgICAgICAgIFNjcmlwdE9iamVjdCB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShub2Rl
LCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKG5vZGUsIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOwogICAgICAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gaW5uZXJQ
cmV2aW91c1NpYmxpbmcobm9kZSk7CiAgICAgICAgICAgICBsb25nIHByZXZJZCA9IHByZXZpb3Vz
U2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNTaWJsaW5nKSA6IDA7
CiAgICAgICAgICAgICBtX2Zyb250ZW5kLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJl
dklkLCB2YWx1ZSk7CkBAIC0yMjYsNyArMjI4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKQogICAgICAgICByZXR1cm47CiAK
ICAgICBOb2RlVG9JZE1hcCogbm9kZU1hcCA9IG1faWRUb05vZGVzTWFwLmdldChub2RlSWQpOwot
ICAgIFNjcmlwdEFycmF5IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVu
KG5vZGUsIDEsIG5vZGVNYXApOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hpbGRyZW4g
PSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgMSwgbm9kZU1hcCk7CiAgICAg
bV9jaGlsZHJlblJlcXVlc3RlZC5hZGQobm9kZUlkKTsKICAgICBtX2Zyb250ZW5kLT5zZXRDaGls
ZE5vZGVzKG5vZGVJZCwgY2hpbGRyZW4pOwogfQpAQCAtNDM3LDggKzQzOSw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlk
LCBjb25zdCBTdHJpbmcmCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBu
b2RlRm9ySWQobm9kZUlkKTsKLSAgICBTY3JpcHRBcnJheSBsaXN0ZW5lcnNBcnJheSA9IG1fZnJv
bnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7Ci0gICAgdW5zaWduZWQgY291bnRlciA9IDA7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBsaXN0ZW5lcnNBcnJheSA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKICAgICBFdmVudFRhcmdldERhdGEqIGQ7CiAKICAgICAvLyBRdWljayBicmVhayBp
ZiBhIG51bGwgbm9kZSBvciBubyBsaXN0ZW5lcnMgYXQgYWxsCkBAIC00OTAsNyArNDkxLDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCkKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iu
c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciA9IHZlY3RvcltqXTsKICAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0
dXJlKQotICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LnNldChjb3VudGVyKyssIGJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9k
ZSkpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoKGJ1aWxkT2JqZWN0Rm9y
RXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC01MDEsNyArNTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3Iuc2l6ZSgpOyArK2opIHsKICAgICAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lciA9IHZlY3Rvcltq
XTsKICAgICAgICAgICAgIGlmICghbGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAg
ICBsaXN0ZW5lcnNBcnJheS5zZXQoY291bnRlcisrLCBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVu
ZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsKKyAgICAgICAgICAgICAg
ICBsaXN0ZW5lcnNBcnJheS0+cHVzaChidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVu
ZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NTE1LDkgKzUxNiw5IEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJp
bmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudC0+dXJsKCku
c3RyaW5nKCk7CiB9CiAKLVNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQor
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
Tm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAg
ICBTY3JpcHRPYmplY3QgdmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAKICAgICBsb25nIGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7CiAgICAgU3RyaW5nIG5v
ZGVOYW1lOwpAQCAtNTQyLDkzICs1NDMsOTAgQEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG8KICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHZhbHVlLnNldCgiaWQiLCBpZCk7Ci0gICAg
dmFsdWUuc2V0KCJub2RlVHlwZSIsIG5vZGUtPm5vZGVUeXBlKCkpOwotICAgIHZhbHVlLnNldCgi
bm9kZU5hbWUiLCBub2RlTmFtZSk7Ci0gICAgdmFsdWUuc2V0KCJsb2NhbE5hbWUiLCBsb2NhbE5h
bWUpOwotICAgIHZhbHVlLnNldCgibm9kZVZhbHVlIiwgbm9kZVZhbHVlKTsKKyAgICB2YWx1ZS0+
c2V0TnVtYmVyKCJpZCIsIGlkKTsKKyAgICB2YWx1ZS0+c2V0TnVtYmVyKCJub2RlVHlwZSIsIG5v
ZGUtPm5vZGVUeXBlKCkpOworICAgIHZhbHVlLT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgbm9kZU5h
bWUpOworICAgIHZhbHVlLT5zZXRTdHJpbmcoImxvY2FsTmFtZSIsIGxvY2FsTmFtZSk7CisgICAg
dmFsdWUtPnNldFN0cmluZygibm9kZVZhbHVlIiwgbm9kZVZhbHVlKTsKIAogICAgIGlmIChub2Rl
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSB8fCBub2RlLT5ub2RlVHlwZSgpID09
IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVO
VF9GUkFHTUVOVF9OT0RFKSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxkTm9k
ZUNvdW50KG5vZGUpOwotICAgICAgICB2YWx1ZS5zZXQoImNoaWxkTm9kZUNvdW50Iiwgbm9kZUNv
dW50KTsKLSAgICAgICAgU2NyaXB0QXJyYXkgY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFp
bmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKLSAgICAgICAgaWYgKGNoaWxkcmVu
Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIHZhbHVlLnNldCgiY2hpbGRyZW4iLCBjaGlsZHJl
bik7CisgICAgICAgIHZhbHVlLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50Iiwgbm9kZUNvdW50
KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGlsZHJlbiA9IGJ1aWxkQXJyYXlG
b3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBpZiAo
Y2hpbGRyZW4tPmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgIHZhbHVlLT5zZXQoImNoaWxkcmVu
IiwgY2hpbGRyZW4pOwogCiAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVM
RU1FTlRfTk9ERSkgewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIHZhbHVlLnNldCgiYXR0cmlidXRlcyIsIGJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KSk7CisgICAgICAgICAgICB2YWx1
ZS0+c2V0KCJhdHRyaWJ1dGVzIiwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1l
bnQpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgICAgICB2YWx1
ZS5zZXQoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkxTdHJpbmcoZnJhbWVPd25lci0+Y29udGVu
dERvY3VtZW50KCkpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0U3RyaW5nKCJkb2N1bWVu
dFVSTCIsIGRvY3VtZW50VVJMU3RyaW5nKGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpET0NVTUVOVF9OT0RFKSB7CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpOwotICAgICAgICAgICAgdmFsdWUuc2V0KCJkb2N1
bWVudFVSTCIsIGRvY3VtZW50VVJMU3RyaW5nKGRvY3VtZW50KSk7CisgICAgICAgICAgICB2YWx1
ZS0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIGRvY3VtZW50VVJMU3RyaW5nKGRvY3VtZW50KSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9D
VU1FTlRfVFlQRV9OT0RFKSB7CiAgICAgICAgIERvY3VtZW50VHlwZSogZG9jVHlwZSA9IHN0YXRp
Y19jYXN0PERvY3VtZW50VHlwZSo+KG5vZGUpOwotICAgICAgICB2YWx1ZS5zZXQoInB1YmxpY0lk
IiwgZG9jVHlwZS0+cHVibGljSWQoKSk7Ci0gICAgICAgIHZhbHVlLnNldCgic3lzdGVtSWQiLCBk
b2NUeXBlLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgdmFsdWUuc2V0KCJpbnRlcm5hbFN1YnNldCIs
IGRvY1R5cGUtPmludGVybmFsU3Vic2V0KCkpOworICAgICAgICB2YWx1ZS0+c2V0U3RyaW5nKCJw
dWJsaWNJZCIsIGRvY1R5cGUtPnB1YmxpY0lkKCkpOworICAgICAgICB2YWx1ZS0+c2V0U3RyaW5n
KCJzeXN0ZW1JZCIsIGRvY1R5cGUtPnN5c3RlbUlkKCkpOworICAgICAgICB2YWx1ZS0+c2V0U3Ry
aW5nKCJpbnRlcm5hbFN1YnNldCIsIGRvY1R5cGUtPmludGVybmFsU3Vic2V0KCkpOwogICAgIH0K
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkKK1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0
cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQogewotICAgIFNjcmlwdEFycmF5IGF0dHJpYnV0ZXNW
YWx1ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAg
Ly8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCiAgICAgY29u
c3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKICAg
ICBpZiAoIWF0dHJNYXApCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzVmFsdWU7CiAgICAgdW5z
aWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKLSAgICBpbnQgaW5kZXggPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7CiAgICAgICAgIC8v
IEFkZCBhdHRyaWJ1dGUgcGFpcgogICAgICAgICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9
IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIGF0dHJpYnV0ZXNWYWx1ZS5zZXQo
aW5kZXgrKywgYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGF0dHJpYnV0
ZXNWYWx1ZS5zZXQoaW5kZXgrKywgYXR0cmlidXRlLT52YWx1ZSgpKTsKKyAgICAgICAgYXR0cmli
dXRlc1ZhbHVlLT5wdXNoU3RyaW5nKGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCkpOworICAg
ICAgICBhdHRyaWJ1dGVzVmFsdWUtPnB1c2hTdHJpbmcoYXR0cmlidXRlLT52YWx1ZSgpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZTsKIH0KIAotU2NyaXB0QXJyYXkgSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWlu
ZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5v
ZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAg
U2NyaXB0QXJyYXkgY2hpbGRyZW4gPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hpbGRyZW4gPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICAgaWYgKGRlcHRoID09IDApIHsKLSAgICAgICAgaW50IGluZGV4ID0gMDsKICAgICAg
ICAgLy8gU3BlY2lhbCBjYXNlIHRoZV9vbmx5IHRleHQgY2hpbGQuCiAgICAgICAgIGlmIChpbm5l
ckNoaWxkTm9kZUNvdW50KGNvbnRhaW5lcikgPT0gMSkgewogICAgICAgICAgICAgTm9kZSAqY2hp
bGQgPSBpbm5lckZpcnN0Q2hpbGQoY29udGFpbmVyKTsKICAgICAgICAgICAgIGlmIChjaGlsZC0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCi0gICAgICAgICAgICAgICAgY2hpbGRyZW4u
c2V0KGluZGV4KyssIGJ1aWxkT2JqZWN0Rm9yTm9kZShjaGlsZCwgMCwgbm9kZXNNYXApKTsKKyAg
ICAgICAgICAgICAgICBjaGlsZHJlbi0+cHVzaChidWlsZE9iamVjdEZvck5vZGUoY2hpbGQsIDAs
IG5vZGVzTWFwKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwogICAgIH0g
ZWxzZSBpZiAoZGVwdGggPiAwKSB7CiAgICAgICAgIGRlcHRoLS07CiAgICAgfQogCi0gICAgaW50
IGluZGV4ID0gMDsKICAgICBmb3IgKE5vZGUgKmNoaWxkID0gaW5uZXJGaXJzdENoaWxkKGNvbnRh
aW5lcik7IGNoaWxkOyBjaGlsZCA9IGlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQotICAgICAgICBj
aGlsZHJlbi5zZXQoaW5kZXgrKywgYnVpbGRPYmplY3RGb3JOb2RlKGNoaWxkLCBkZXB0aCwgbm9k
ZXNNYXApKTsKKyAgICAgICAgY2hpbGRyZW4tPnB1c2goYnVpbGRPYmplY3RGb3JOb2RlKGNoaWxk
LCBkZXB0aCwgbm9kZXNNYXApKTsKICAgICByZXR1cm4gY2hpbGRyZW47CiB9CiAKLVNjcmlwdE9i
amVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUpCitSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5l
cjsKLSAgICBTY3JpcHRPYmplY3QgdmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3Qo
KTsKLSAgICB2YWx1ZS5zZXQoInR5cGUiLCBldmVudFR5cGUpOwotICAgIHZhbHVlLnNldCgidXNl
Q2FwdHVyZSIsIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUpOwotICAgIHZhbHVl
LnNldCgiaXNBdHRyaWJ1dGUiLCBldmVudExpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKTsKLSAgICB2
YWx1ZS5zZXQoIm5vZGVJZCIsIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSkpOwotICAgIHZh
bHVlLnNldCgibGlzdGVuZXJCb2R5IiwgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KG5vZGUtPmRv
Y3VtZW50KCksIG1fZnJvbnRlbmQtPnNjcmlwdFN0YXRlKCksIGV2ZW50TGlzdGVuZXIuZ2V0KCkp
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgdmFsdWUtPnNldFN0cmluZygidHlwZSIsIGV2ZW50VHlwZSk7CisgICAg
dmFsdWUtPnNldEJvb2woInVzZUNhcHR1cmUiLCByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci51c2VD
YXB0dXJlKTsKKyAgICB2YWx1ZS0+c2V0Qm9vbCgiaXNBdHRyaWJ1dGUiLCBldmVudExpc3RlbmVy
LT5pc0F0dHJpYnV0ZSgpKTsKKyAgICB2YWx1ZS0+c2V0TnVtYmVyKCJub2RlSWQiLCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKG5vZGUpKTsKKyAgICB2YWx1ZS0+c2V0U3RyaW5nKCJsaXN0ZW5lckJv
ZHkiLCBldmVudExpc3RlbmVySGFuZGxlckJvZHkobm9kZS0+ZG9jdW1lbnQoKSwgbV9mcm9udGVu
ZC0+c2NyaXB0U3RhdGUoKSwgZXZlbnRMaXN0ZW5lci5nZXQoKSkpOwogICAgIFN0cmluZyBzb3Vy
Y2VOYW1lOwogICAgIGludCBsaW5lTnVtYmVyOwogICAgIGlmIChldmVudExpc3RlbmVySGFuZGxl
ckxvY2F0aW9uKG5vZGUtPmRvY3VtZW50KCksIG1fZnJvbnRlbmQtPnNjcmlwdFN0YXRlKCksIGV2
ZW50TGlzdGVuZXIuZ2V0KCksIHNvdXJjZU5hbWUsIGxpbmVOdW1iZXIpKSB7Ci0gICAgICAgIHZh
bHVlLnNldCgic291cmNlTmFtZSIsIHNvdXJjZU5hbWUpOwotICAgICAgICB2YWx1ZS5zZXQoImxp
bmVOdW1iZXIiLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgdmFsdWUtPnNldFN0cmluZygic291cmNl
TmFtZSIsIHNvdXJjZU5hbWUpOworICAgICAgICB2YWx1ZS0+c2V0TnVtYmVyKCJsaW5lTnVtYmVy
IiwgbGluZU51bWJlcik7CiAgICAgfQogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTcyNiw3ICs3
MjQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIC8vIENoaWxkcmVuIGhhdmUgYmVlbiByZXF1ZXN0ZWQgLT4gcmV0dXJuIHZh
bHVlIG9mIGEgbmV3IGNoaWxkLgogICAgICAgICBOb2RlKiBwcmV2U2libGluZyA9IGlubmVyUHJl
dmlvdXNTaWJsaW5nKG5vZGUpOwogICAgICAgICBsb25nIHByZXZJZCA9IHByZXZTaWJsaW5nID8g
bV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2U2libGluZykgOiAwOwotICAgICAgICBTY3Jp
cHRPYmplY3QgdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gYnVp
bGRPYmplY3RGb3JOb2RlKG5vZGUsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogICAgICAg
ICBtX2Zyb250ZW5kLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCB2YWx1ZSk7
CiAgICAgfQogfQpAQCAtNzY1LDQyICs3NjMsNDIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KQogewog
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgbm9k
ZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpIHsKLSAgICAgICAgbV9mcm9udGVu
ZC0+ZGlkR2V0U3R5bGVzKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKKyAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVzKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgRE9NV2luZG93KiBkZWZhdWx0
VmlldyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKICAgICBpZiAoIWRl
ZmF1bHRWaWV3KSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxlcyhjYWxsSWQsIFNj
cmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFN0eWxl
cyhjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsK
ICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5m
byA9IGNvbXB1dGVkU3R5bGUobm9kZSwgdHJ1ZSk7IC8vIFN1cHBvcnQgdGhlIHZpZXdpbmcgb2Yg
OnZpc2l0ZWQgaW5mb3JtYXRpb24gaW4gY29tcHV0ZWQgc3R5bGUuCiAKLSAgICBTY3JpcHRPYmpl
Y3QgcmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBp
ZiAoZWxlbWVudC0+c3R5bGUoKSkKLSAgICAgICAgcmVzdWx0LnNldCgiaW5saW5lU3R5bGUiLCBi
dWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKLSAgICByZXN1bHQu
c2V0KCJjb21wdXRlZFN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShjb21wdXRlZFN0eWxlSW5m
by5nZXQoKSwgZmFsc2UpKTsKKyAgICAgICAgcmVzdWx0LT5zZXQoImlubGluZVN0eWxlIiwgYnVp
bGRPYmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpLCB0cnVlKSk7CisgICAgcmVzdWx0LT5z
ZXQoImNvbXB1dGVkU3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKGNvbXB1dGVkU3R5bGVJbmZv
LmdldCgpLCBmYWxzZSkpOwogCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVt
ZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKICAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVt
ZW50LCBhdXRob3JPbmx5KTsKLSAgICByZXN1bHQuc2V0KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWls
ZEFycmF5Rm9yQ1NTUnVsZXMobWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXQo
Im1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhtYXRjaGVkUnVsZXMuZ2V0
KCkpKTsKIAotICAgIHJlc3VsdC5zZXQoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpKTsKLSAgICByZXN1bHQuc2V0KCJwc2V1ZG9FbGVtZW50
cyIsIGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50LCBhdXRob3JPbmx5KSk7Cisg
ICAgcmVzdWx0LT5zZXQoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRl
U3R5bGVzKGVsZW1lbnQpKTsKKyAgICByZXN1bHQtPnNldCgicHNldWRvRWxlbWVudHMiLCBidWls
ZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoZWxlbWVudCwgYXV0aG9yT25seSkpOwogICAgIAotICAg
IFNjcmlwdE9iamVjdCBjdXJyZW50U3R5bGUgPSByZXN1bHQ7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY3VycmVudFN0eWxlID0gcmVzdWx0OwogICAgIEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQp
IHsKLSAgICAgICAgU2NyaXB0T2JqZWN0IHBhcmVudFN0eWxlID0gbV9mcm9udGVuZC0+bmV3U2Ny
aXB0T2JqZWN0KCk7Ci0gICAgICAgIGN1cnJlbnRTdHlsZS5zZXQoInBhcmVudCIsIHBhcmVudFN0
eWxlKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBjdXJyZW50U3R5bGUtPnNldCgicGFyZW50
IiwgcGFyZW50U3R5bGUpOwogICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBw
YXJlbnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHBhcmVudFN0eWxl
LnNldCgiaW5saW5lU3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHBhcmVudEVsZW1lbnQtPnN0
eWxlKCksIHRydWUpKTsKKyAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXQoImlubGluZVN0eWxl
IiwgYnVpbGRPYmplY3RGb3JTdHlsZShwYXJlbnRFbGVtZW50LT5zdHlsZSgpLCB0cnVlKSk7CiAK
ICAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50
LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKICAgICAgICAgUmVmUHRyPENTU1J1
bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTZWxlY3Rvci0+c3R5bGVSdWxlc0Zv
ckVsZW1lbnQocGFyZW50RWxlbWVudCwgYXV0aG9yT25seSk7Ci0gICAgICAgIHBhcmVudFN0eWxl
LnNldCgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvckNTU1J1bGVzKHBhcmVudE1hdGNo
ZWRSdWxlcy5nZXQoKSkpOworICAgICAgICBwYXJlbnRTdHlsZS0+c2V0KCJtYXRjaGVkQ1NTUnVs
ZXMiLCBidWlsZEFycmF5Rm9yQ1NTUnVsZXMocGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7CiAK
ICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
ICAgICAgICAgY3VycmVudFN0eWxlID0gcGFyZW50U3R5bGU7CkBAIC04MTAsMTQgKzgwOCwxMyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBib29sIGF1dGhvck9ubHkpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFsbFN0
eWxlcyhsb25nIGNhbGxJZCkKIHsKLSAgICBTY3JpcHRBcnJheSByZXN1bHQgPSBtX2Zyb250ZW5k
LT5uZXdTY3JpcHRBcnJheSgpOwotICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
IGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+OjppdGVyYXRvciBpdCA9IG1fZG9j
dW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fZG9jdW1lbnRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IFN0eWxlU2hlZXRMaXN0KiBsaXN0ID0gKCppdCktPnN0eWxlU2hlZXRzKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAg
ICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbGlzdC0+aXRlbShpKTsKICAgICAgICAgICAgIGlm
IChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQu
c2V0KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihzdHlsZVNoZWV0KSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxl
U2hlZXQpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0QWxsU3R5
bGVzKGNhbGxJZCwgcmVzdWx0KTsKQEAgLTgyNyw3ICs4MjQsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpnZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCBub2RlLT5u
b2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkgewotICAgICAgICBtX2Zyb250ZW5kLT5k
aWRHZXRJbmxpbmVTdHlsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CisgICAg
ICAgIG1fZnJvbnRlbmQtPmRpZEdldElubGluZVN0eWxlKGNhbGxJZCwgSW5zcGVjdG9yVmFsdWU6
Om51bGwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKQEAgLTgzOCwxMyArODM1LDEzIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpIHsKLSAgICAgICAg
bV9mcm9udGVuZC0+ZGlkR2V0Q29tcHV0ZWRTdHlsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRl
ZmluZWQoKSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldENvbXB1dGVkU3R5bGUoY2FsbElk
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2RlLT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCk7CiAgICAgaWYgKCFkZWZhdWx0VmlldykgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKKyAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkR2V0Q29tcHV0ZWRTdHlsZShjYWxsSWQsIEluc3BlY3RvclZhbHVl
OjpudWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NTMsNDYgKzg1MCw0NCBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCkKICAgICBtX2Zyb250ZW5kLT5kaWRHZXRDb21wdXRlZFN0eWxlKGNhbGxJZCwg
YnVpbGRPYmplY3RGb3JTdHlsZShjb21wdXRlZFN0eWxlLmdldCgpLCBmYWxzZSkpOwogfQogCi1T
Y3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5
bGVzKEVsZW1lbnQqIGVsZW1lbnQpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBTY3JpcHRPYmplY3Qgc3R5bGVBdHRyaWJ1dGVzID0gbV9mcm9udGVuZC0+bmV3U2Ny
aXB0T2JqZWN0KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3R5bGVBdHRyaWJ1dGVz
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXR0
cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAg
IGlmIChhdHRyaWJ1dGUtPnN0eWxlKCkpIHsKICAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVO
YW1lID0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKTsKLSAgICAgICAgICAgIHN0eWxlQXR0cmlidXRl
cy5zZXQoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0
dHJpYnV0ZS0+c3R5bGUoKSwgdHJ1ZSkpOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzLT5z
ZXQoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZvclN0eWxlKGF0dHJp
YnV0ZS0+c3R5bGUoKSwgdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBzdHls
ZUF0dHJpYnV0ZXM7CiB9CiAKLVNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFy
cmF5Rm9yQ1NTUnVsZXMoQ1NTUnVsZUxpc3QqIG1hdGNoZWRSdWxlcykKK1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhDU1NSdWxl
TGlzdCogbWF0Y2hlZFJ1bGVzKQogewotICAgIFNjcmlwdEFycmF5IG1hdGNoZWRDU1NSdWxlcyA9
IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7Ci0gICAgdW5zaWduZWQgY291bnRlciA9IDA7
CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtYXRjaGVkQ1NTUnVsZXMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgbWF0Y2hlZFJ1bGVzICYm
IGkgPCBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogcnVs
ZSA9IG1hdGNoZWRSdWxlcy0+aXRlbShpKTsKICAgICAgICAgaWYgKHJ1bGUtPnR5cGUoKSA9PSBD
U1NSdWxlOjpTVFlMRV9SVUxFKQotICAgICAgICAgICAgbWF0Y2hlZENTU1J1bGVzLnNldChjb3Vu
dGVyKyssIGJ1aWxkT2JqZWN0Rm9yUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KSkpOworICAgICAgICAgICAgbWF0Y2hlZENTU1J1bGVzLT5wdXNoKGJ1aWxkT2JqZWN0Rm9yUnVs
ZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKSkpOwogICAgIH0KICAgICByZXR1cm4g
bWF0Y2hlZENTU1J1bGVzOwogfQogCi1TY3JpcHRBcnJheSBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0aG9yT25s
eSkKK1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhvck9ubHkpCiB7Ci0g
ICAgU2NyaXB0QXJyYXkgcmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvcigpOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5
bGUgPSBlbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKCk7Ci0gICAgdW5zaWduZWQgY291bnRlciA9
IDA7CiAKICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lE
OyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3Rh
dGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKICAgICAgICAgUmVmUHRyPENTU1J1
bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1l
bnQoZWxlbWVudCwgcHNldWRvSWQsIGF1dGhvck9ubHkpOwogICAgICAgICBpZiAobWF0Y2hlZFJ1
bGVzICYmIG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFNjcmlwdE9iamVj
dCBwc2V1ZG9TdHlsZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICAgICAg
ICAgIHBzZXVkb1N0eWxlcy5zZXQoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9J
ZCkpOwotICAgICAgICAgICAgcHNldWRvU3R5bGVzLnNldCgicnVsZXMiLCBidWlsZEFycmF5Rm9y
Q1NTUnVsZXMobWF0Y2hlZFJ1bGVzLmdldCgpKSk7Ci0gICAgICAgICAgICByZXN1bHQuc2V0KGNv
dW50ZXIrKywgcHNldWRvU3R5bGVzKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBzZXVkb1N0eWxlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBwc2V1ZG9TdHlsZXMtPnNldE51bWJlcigicHNldWRvSWQiLCBwc2V1ZG9JZCk7CisgICAgICAg
ICAgICBwc2V1ZG9TdHlsZXMtPnNldCgicnVsZXMiLCBidWlsZEFycmF5Rm9yQ1NTUnVsZXMobWF0
Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgICAgICAgICByZXN1bHQtPnB1c2gocHNldWRvU3R5bGVz
KTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTAwLDkgKzg5NSw5
IEBAIFNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxl
bWVudHMoRWxlbWVudCogZWxlbWVudCwgYm9vCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFw
cGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgc3R5
bGVUZXh0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBJZFRvU3R5bGVNYXA6
Oml0ZXJhdG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAg
aWYgKGl0ID09IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgewotICAgICAgICBtX2Zyb250
ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3JpcHRWYWx1ZTo6dW5kZWZp
bmVkKCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOworICAgIElkVG9TdHlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9TdHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBt
X2lkVG9TdHlsZS5lbmQoKSkgeworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MzMsMjEgKzkyOCwyMSBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVy
dHkocHJvcGVydHlOYW1lLCBlYyk7CiAKICAgICAgICAgaWYgKGVjKSB7Ci0gICAgICAgICAgICBt
X2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3JpcHRWYWx1ZTo6
dW5kZWZpbmVkKCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOworICAgICAgICAgICAg
bV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgSW5zcGVjdG9yVmFs
dWU6Om51bGwoKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhhdCB0aGUgcHJv
cGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgogICAgIGlmICghc3R5bGVUZXh0TGVuZ3Ro
KSB7Ci0gICAgICAgIFNjcmlwdEFycmF5IGNoYW5nZWRQcm9wZXJ0aWVzID0gbV9mcm9udGVuZC0+
bmV3U2NyaXB0QXJyYXkoKTsKLSAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMuc2V0KDAsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwg
dHJ1ZSwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBjaGFuZ2VkUHJvcGVydGllcyk7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRpZXMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLT5wdXNoU3RyaW5nKHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJ
ZCwgdHJ1ZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdlZFByb3BlcnRpZXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF0ZW1wU3R5bGUtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIFNjcmlw
dFZhbHVlOjp1bmRlZmluZWQoKSwgbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKSk7CisgICAg
ICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCksIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTEwMTYsOCArMTAxMSw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5n
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBjYWxsSWQs
IGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQp
CiB7CiAgICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IGNzc1N0b3JlKCktPmlkVG9TdHls
ZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5k
KCkpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwg
U2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKKyAgICBpZiAoaXQgPT0gbV9pZFRvU3R5bGUuZW5k
KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwg
SW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwpAQCAtMTAzOSw3ICsx
MDM0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcg
Y2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmkKICAgICAgICAgICAgIGRpc2FibGVkSXQt
PnNlY29uZC5yZW1vdmUocHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKGVjKSB7Ci0gICAg
ICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIFNjcmlwdFZhbHVl
Ojp1bmRlZmluZWQoKSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxl
ZChjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIGJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpKTsKQEAgLTEwNDksNyArMTA0NCw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgbG9uZyBydWxlSWQs
IGNvbnN0IFN0cmluZyYKIHsKICAgICBJZFRvUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9y
ZSgpLT5pZFRvUnVsZS5maW5kKHJ1bGVJZCk7CiAgICAgaWYgKGl0ID09IGNzc1N0b3JlKCktPmlk
VG9SdWxlLmVuZCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxlY3Rvcihj
YWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOworICAgICAgICBtX2Zyb250
ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNjAsNyArMTA1NSw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgbG9uZyBy
dWxlSWQsIGNvbnN0IFN0cmluZyYKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHls
ZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCBydWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGVjKTsK
ICAgICBpZiAoZWMpIHsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNlbGVjdG9yKGNh
bGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBmYWxzZSk7CisgICAgICAgIG1fZnJvbnRl
bmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA3Myw3ICsxMDY4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1
bGVJZCwgY29uc3QgU3RyaW5nJgogICAgIH0KIAogICAgIGlmIChlYykgewotICAgICAgICBtX2Zy
b250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
KCksIGZhbHNlKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0UnVsZVNlbGVjdG9yKGNhbGxJ
ZCwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMDg0LDcgKzEwNzksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxl
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdAogewogICAg
IE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOwogICAgIGlmICghbm9kZSkg
ewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVu
ZGVmaW5lZCgpLCBmYWxzZSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElk
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTEwOTcsMTMgKzEwOTIsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVs
ZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3QKICAgICAg
ICAgaWYgKCFlYykKICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQtPmhlYWQoKS0+YXBwZW5kQ2hp
bGQoc3R5bGVFbGVtZW50LCBlYyk7CiAgICAgICAgIGlmIChlYykgewotICAgICAgICAgICAgbV9m
cm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFs
c2UpOworICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCksIGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMgPSBvd25lckRvY3VtZW50LT5zdHls
ZVNoZWV0cygpOwogICAgICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHMt
Pml0ZW0oc3R5bGVTaGVldHMtPmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGlmICghc3R5bGVTaGVl
dC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1
bGUoY2FsbElkLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKCksIGZhbHNlKTsKKyAgICAgICAgICAg
IG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBm
YWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY3NzU3RvcmUo
KS0+aW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZVNoZWV0KTsKQEAgLTExMTIsNyArMTEwNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFk
ZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgY3NzU3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVT
aGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAg
bV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwg
ZmFsc2UpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgSW5zcGVjdG9y
VmFsdWU6Om51bGwoKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTQy
LDEwOCArMTEzNywxMDUgQEAgbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlKQogICAgIHJldHVybiBpZDsKIH0KIAotU2NyaXB0T2JqZWN0IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBib29sIGJpbmQpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBiaW5k
KQogewotICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmpl
Y3QoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGlmIChiaW5kKSB7CiAgICAgICAgIGxvbmcgc3R5bGVJZCA9IGJp
bmRTdHlsZShzdHlsZSk7Ci0gICAgICAgIHJlc3VsdC5zZXQoImlkIiwgc3R5bGVJZCk7CisgICAg
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHN0eWxlSWQpOwogCiAgICAgICAgIElkVG9EaXNh
YmxlZFN0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gY3NzU3RvcmUoKS0+aWRUb0Rpc2Fi
bGVkU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICAgICAgaWYgKGRpc2FibGVkSXQgIT0gY3NzU3Rv
cmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCi0gICAgICAgICAgICByZXN1bHQuc2V0KCJk
aXNhYmxlZCIsIGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhkaXNhYmxlZEl0
LT5zZWNvbmQpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KCJkaXNhYmxlZCIsIGJ1aWxkQXJy
YXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhkaXNhYmxlZEl0LT5zZWNvbmQpKTsKICAgICB9
Ci0gICAgcmVzdWx0LnNldCgid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgi
KSk7Ci0gICAgcmVzdWx0LnNldCgiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhl
aWdodCIpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVy
dHlWYWx1ZSgid2lkdGgiKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHN0eWxl
LT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CiAgICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5
bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgU2NyaXB0T2JqZWN0JiByZXN1bHQpCit2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQp
CiB7Ci0gICAgU2NyaXB0QXJyYXkgcHJvcGVydGllcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFy
cmF5KCk7Ci0gICAgU2NyaXB0T2JqZWN0IHNob3J0aGFuZFZhbHVlcyA9IG1fZnJvbnRlbmQtPm5l
d1NjcmlwdE9iamVjdCgpOwotICAgIHJlc3VsdC5zZXQoInByb3BlcnRpZXMiLCBwcm9wZXJ0aWVz
KTsKLSAgICByZXN1bHQuc2V0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRWYWx1ZXMgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0KCJwcm9wZXJ0aWVzIiwg
cHJvcGVydGllcyk7CisgICAgcmVzdWx0LT5zZXQoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFu
ZFZhbHVlcyk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBT
Y3JpcHRPYmplY3QgcHJvcGVydHkgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAg
ICBwcm9wZXJ0eS5zZXQoIm5hbWUiLCBuYW1lKTsKLSAgICAgICAgcHJvcGVydHkuc2V0KCJwcmlv
cml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpKTsKLSAgICAgICAgcHJvcGVy
dHkuc2V0KCJpbXBsaWNpdCIsIHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkpOworICAg
ICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CisgICAgICAgIHByb3BlcnR5
LT5zZXRTdHJpbmcoInByaW9yaXR5Iiwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkp
OworICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbCgiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0
eUltcGxpY2l0KG5hbWUpKTsKICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9ICBzdHlsZS0+Z2V0
UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0gICAgICAgIHByb3BlcnR5LnNldCgic2hvcnRoYW5k
Iiwgc2hvcnRoYW5kKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kIiwg
c2hvcnRoYW5kKTsKICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNo
b3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewogICAgICAgICAgICAgZm91bmRTaG9ydGhh
bmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLnNldChzaG9y
dGhhbmQsIHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKKyAgICAgICAgICAgIHNo
b3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUs
IHNob3J0aGFuZCkpOwogICAgICAgICB9Ci0gICAgICAgIHByb3BlcnR5LnNldCgidmFsdWUiLCBz
dHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShuYW1lKSk7Ci0gICAgICAgIHByb3BlcnRpZXMuc2V0KGks
IHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBzdHlsZS0+
Z2V0UHJvcGVydHlWYWx1ZShuYW1lKSk7CisgICAgICAgIHByb3BlcnRpZXMtPnB1c2gocHJvcGVy
dHkpOwogICAgIH0KIH0KIAotU2NyaXB0QXJyYXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24mIGRl
Y2xhcmF0aW9uKQorUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERpc2FibGVkU3R5bGVEZWNsYXJhdGlv
biYgZGVjbGFyYXRpb24pCiB7Ci0gICAgaW50IGNvdW50ZXIgPSAwOwotICAgIFNjcmlwdEFycmF5
IHByb3BlcnRpZXMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAg
ICBmb3IgKERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlcmF0b3IgaXQgPSBkZWNsYXJhdGlv
bi5iZWdpbigpOyBpdCAhPSBkZWNsYXJhdGlvbi5lbmQoKTsgKytpdCkgewotICAgICAgICBTY3Jp
cHRPYmplY3QgcHJvcGVydHkgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICAg
ICAgcHJvcGVydHkuc2V0KCJuYW1lIiwgaXQtPmZpcnN0KTsKLSAgICAgICAgcHJvcGVydHkuc2V0
KCJ2YWx1ZSIsIGl0LT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBwcm9wZXJ0eS5zZXQoInByaW9y
aXR5IiwgaXQtPnNlY29uZC5zZWNvbmQpOwotICAgICAgICBwcm9wZXJ0aWVzLnNldChjb3VudGVy
KyssIHByb3BlcnR5KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJuYW1lIiwgaXQtPmZpcnN0KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUi
LCBpdC0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3Jp
dHkiLCBpdC0+c2Vjb25kLnNlY29uZCk7CisgICAgICAgIHByb3BlcnRpZXMtPnB1c2gocHJvcGVy
dHkpOwogICAgIH0KICAgICByZXR1cm4gcHJvcGVydGllczsKIH0KIAotU2NyaXB0T2JqZWN0IElu
c3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCkKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsKLSAg
ICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7Ci0g
ICAgcmVzdWx0LnNldCgiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICBy
ZXN1bHQuc2V0KCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKLSAgICByZXN1bHQuc2V0KCJ0
aXRsZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOwotICAgIHJlc3VsdC5zZXQoImRvY3VtZW50RWxl
bWVudElkIiwgbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChzdHlsZVNoZWV0LT5kb2MoKSkpOwot
ICAgIFNjcmlwdEFycmF5IGNzc1J1bGVzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKTsK
LSAgICByZXN1bHQuc2V0KCJjc3NSdWxlcyIsIGNzc1J1bGVzKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3Vs
dC0+c2V0Qm9vbCgiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKKyAgICByZXN1
bHQtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CisgICAgcmVzdWx0LT5zZXRO
dW1iZXIoImRvY3VtZW50RWxlbWVudElkIiwgbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChzdHls
ZVNoZWV0LT5kb2MoKSkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3NzUnVsZXMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXQoImNzc1J1bGVzIiwgY3Nz
UnVsZXMpOwogICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVs
ZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0cnVlKTsKICAgICBpZiAoIWNzc1J1bGVMaXN0KQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjc3NSdWxlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBDU1NSdWxlKiBydWxlID0gY3NzUnVsZUxpc3QtPml0ZW0oaSk7CiAgICAgICAgIGlmIChy
dWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgY3NzUnVsZXMuc2V0KGNvdW50ZXIrKywg
YnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7Cisg
ICAgICAgICAgICBjc3NSdWxlcy0+cHVzaChidWlsZE9iamVjdEZvclJ1bGUoc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVSdWxlKj4ocnVsZSkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
U2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlKQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgQ1NTU3R5bGVT
aGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKIAotICAg
IFNjcmlwdE9iamVjdCByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAg
ICByZXN1bHQuc2V0KCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQoKSk7Ci0gICAg
cmVzdWx0LnNldCgiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7Ci0gICAgcmVzdWx0LnNldCgi
c291cmNlTGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXN1bHQtPnNl
dFN0cmluZygic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0b3JUZXh0KCkpOworICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4dCgpKTsKKyAgICByZXN1bHQtPnNl
dE51bWJlcigic291cmNlTGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7CiAgICAgaWYgKHBhcmVu
dFN0eWxlU2hlZXQpIHsKLSAgICAgICAgU2NyaXB0T2JqZWN0IHBhcmVudFN0eWxlU2hlZXRWYWx1
ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwotICAgICAgICByZXN1bHQuc2V0KCJw
YXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlKTsKLSAgICAgICAgcGFyZW50
U3R5bGVTaGVldFZhbHVlLnNldCgiaHJlZiIsIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKSk7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0KCJwYXJlbnRTdHls
ZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlKTsKKyAgICAgICAgcGFyZW50U3R5bGVTaGVl
dFZhbHVlLT5zZXRTdHJpbmcoImhyZWYiLCBwYXJlbnRTdHlsZVNoZWV0LT5ocmVmKCkpOwogICAg
IH0KICAgICBib29sIGlzVXNlckFnZW50ID0gcGFyZW50U3R5bGVTaGVldCAmJiAhcGFyZW50U3R5
bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHko
KTsKICAgICBib29sIGlzVXNlciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVl
dC0+b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVOYW1l
KCkgPT0gIiNkb2N1bWVudCI7Ci0gICAgcmVzdWx0LnNldCgiaXNVc2VyQWdlbnQiLCBpc1VzZXJB
Z2VudCk7Ci0gICAgcmVzdWx0LnNldCgiaXNVc2VyIiwgaXNVc2VyKTsKLSAgICByZXN1bHQuc2V0
KCJpc1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9PSBjc3NTdG9yZSgp
LT5pbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICByZXN1bHQtPnNldEJvb2woImlzVXNl
ckFnZW50IiwgaXNVc2VyQWdlbnQpOworICAgIHJlc3VsdC0+c2V0Qm9vbCgiaXNVc2VyIiwgaXNV
c2VyKTsKKyAgICByZXN1bHQtPnNldEJvb2woImlzVmlhSW5zcGVjdG9yIiwgcnVsZS0+cGFyZW50
U3R5bGVTaGVldCgpID09IGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
CiAgICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCiAgICAgYm9vbCBiaW5kID0gIWlz
VXNlckFnZW50ICYmICFpc1VzZXI7Ci0gICAgcmVzdWx0LnNldCgic3R5bGUiLCBidWlsZE9iamVj
dEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQpKTsKKyAgICByZXN1bHQtPnNldCgic3R5bGUi
LCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQpKTsKIAogICAgIGlmIChi
aW5kKQotICAgICAgICByZXN1bHQuc2V0KCJpZCIsIGJpbmRSdWxlKHJ1bGUpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXROdW1iZXIoImlkIiwgYmluZFJ1bGUocnVsZSkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTEzMTYsMTEgKzEzMDgsMTEgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6
cnVsZUFmZmVjdHNOb2RlKENTU1N0eWxlUnVsZSogcnVsZSwgTm9kZSogbm9kZSkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50Ojp0b0FycmF5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhKQorUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0
b3JET01BZ2VudDo6dG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSkKIHsKLSAgICBT
Y3JpcHRBcnJheSByZXN1bHQgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQuc2V0KGksIGRhdGFbaV0pOworICAgICAgICByZXN1bHQtPnB1c2hTdHJpbmcoZGF0YVtp
XSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmgKaW5kZXggYzhhNGUxYS4uYTE5NzhlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC01NCw3ICs1NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBFbGVtZW50OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNzIERvY3VtZW50OworICAgIGNs
YXNzIEluc3BlY3RvckFycmF5OwogICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOworICAgIGNs
YXNzIEluc3BlY3Rvck9iamVjdDsKICAgICBjbGFzcyBOYW1lTm9kZU1hcDsKICAgICBjbGFzcyBO
b2RlOwogICAgIGNsYXNzIFBhZ2U7CkBAIC0xNDAsMTQgKzE0MiwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgYm9vbCBwdXNoRG9jdW1lbnRUb0Zyb250ZW5kKCk7CiAKLSAgICAg
ICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVs
ZW1lbnQpOwotICAgICAgICBTY3JpcHRBcnJheSBidWlsZEFycmF5Rm9yQ1NTUnVsZXMoQ1NTUnVs
ZUxpc3QqKTsKLSAgICAgICAgU2NyaXB0QXJyYXkgYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRz
KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0aG9yT25seSk7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1l
bnQpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDU1NSdWxl
cyhDU1NSdWxlTGlzdCopOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJy
YXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhvck9ubHkpOwog
Ci0gICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50
IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwotICAgICAgICBTY3JpcHRBcnJheSBidWls
ZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCk7Ci0gICAgICAgIFNj
cmlwdEFycmF5IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKLSAgICAgICAgU2NyaXB0T2JqZWN0
IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBOb2RlKiBub2RlKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJp
YnV0ZXMoRWxlbWVudCogZWxlbWVudCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRo
LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgTm9kZSogbm9kZSk7CiAKICAgICAgICAgLy8gV2UgcmVwcmVzZW50IGVtYmVkZGVkIGRvbXMg
YXMgYSBwYXJ0IG9mIHRoZSBzYW1lIGhpZXJhcmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRyZW4g
b2YgZnJhbWUgb3duZXJzIGRpZmZlcmVudGx5LgogICAgICAgICAvLyBXZSBhbHNvIHNraXAgd2hp
dGVzcGFjZSB0ZXh0IG5vZGVzIGNvbmRpdGlvbmFsbHkuIEZvbGxvd2luZyBtZXRob2RzIGVuY2Fw
c3VsYXRlIHRoZXNlIHNwZWNpZmljcy4KQEAgLTE2NCwxNiArMTY2LDE2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBsb25nIGJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7
CiAgICAgICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgICAgIFNjcmlwdE9i
amVjdCBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQp
OwotICAgICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHls
ZURlY2xhcmF0aW9uKiwgU2NyaXB0T2JqZWN0JiByZXN1bHQpOwotICAgICAgICBTY3JpcHRBcnJh
eSBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHlsZURlY2xh
cmF0aW9uJik7Ci0gICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKik7Ci0gICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQo
Q1NTU3R5bGVTaGVldCopOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9i
amVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOworICAgICAgICB2
b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9u
KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCk7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERpc2Fi
bGVkU3R5bGVEZWNsYXJhdGlvbiYpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAgICAgICAgIFN0cmluZyBzaG9y
dGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0eSk7CiAgICAgICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xh
cmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAgICAgICAgIGJvb2wg
cnVsZUFmZmVjdHNOb2RlKENTU1N0eWxlUnVsZSosIE5vZGUqKTsKLSAgICAgICAgU2NyaXB0QXJy
YXkgdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSk7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YSk7CiAKICAg
ICAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmQuY3BwCmluZGV4IGQ4OWFlNzEuLjA5ODM2ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKQEAgLTYxLDE0ICs2MiwxMiBAQCBJbnNwZWN0b3JG
cm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
Y2xvc2UoKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImNsb3NlIik7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIGNhbGxTaW1wbGVGdW5jdGlv
bigiY2xvc2UiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6aW5zcGVjdGVkUGFnZURl
c3Ryb3llZCgpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiaW5zcGVjdGVkUGFnZURlc3Ryb3llZCIpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAg
ICBjYWxsU2ltcGxlRnVuY3Rpb24oImluc3BlY3RlZFBhZ2VEZXN0cm95ZWQiKTsKIH0KIAogU2Ny
aXB0QXJyYXkgSW5zcGVjdG9yRnJvbnRlbmQ6Om5ld1NjcmlwdEFycmF5KCkKQEAgLTg4LDE4ICs4
NywxOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRDb21taXRMb2FkKCkKIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cG9wdWxhdGVGcm9udGVuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYg
c2V0dGluZ3MpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgicG9wdWxhdGVG
cm9udGVuZFNldHRpbmdzIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc2V0dGluZ3Mp
OwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3Nh
Z2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygi
cG9wdWxhdGVGcm9udGVuZFNldHRpbmdzIik7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZyhzZXR0
aW5ncyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50KQog
ewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVDb25zb2xlTWVzc2Fn
ZUV4cGlyZWRDb3VudCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNvdW50KTsKLSAg
ICBmdW5jdGlvbi5jYWxsKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoInVwZGF0
ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50Iik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihj
b3VudCk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwg
Y29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQpAQCAtMTI3LDEwICsxMjYsMTAgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29s
ZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdAogCiB2b2lkIElu
c3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50KHVuc2lnbmVk
IGNvdW50KQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVDb25z
b2xlTWVzc2FnZVJlcGVhdENvdW50Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY291
bnQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1l
c3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmlu
ZygidXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudCIpOworICAgIG1lc3NhZ2UtPnB1c2hO
dW1iZXIoY291bnQpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCkBAIC0xMzgsNDggKzEzNyw0NiBA
QCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAgICAgY2Fs
bFNpbXBsZUZ1bmN0aW9uKCJjbGVhckNvbnNvbGVNZXNzYWdlcyIpOwogfQogCi1ib29sIEluc3Bl
Y3RvckZyb250ZW5kOjp1cGRhdGVSZXNvdXJjZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFNjcmlwdE9iamVjdCYgcmVzb3VyY2VPYmopCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1
cGRhdGVSZXNvdXJjZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNvdXJjZU9iaikKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCgidXBkYXRlUmVzb3VyY2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpZGVu
dGlmaWVyKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChyZXNvdXJjZU9iaik7Ci0gICAg
Ym9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlv
bik7Ci0gICAgcmV0dXJuICFoYWRFeGNlcHRpb247CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnB1c2hT
dHJpbmcoInVwZGF0ZVJlc291cmNlIik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihpZGVudGlm
aWVyKTsKKyAgICBtZXNzYWdlLT5wdXNoKHJlc291cmNlT2JqLmdldCgpKTsKKyAgICBzZW5kTWVz
c2FnZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3Vy
Y2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KCJyZW1vdmVSZXNvdXJjZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KGlkZW50aWZpZXIpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+
cHVzaFN0cmluZygicmVtb3ZlUmVzb3VyY2UiKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGlk
ZW50aWZpZXIpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRS
ZXNvdXJjZUNvbnRlbnQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNvbnRlbnQpOwotICAgIGZ1bmN0aW9uLmNhbGwo
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkR2V0UmVzb3VyY2VDb250ZW50
Iik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihjYWxsSWQpOworICAgIG1lc3NhZ2UtPnB1c2hT
dHJpbmcoY29udGVudCk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKGxvbmcgbm9kZUlkKQogewotICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVGb2N1c2VkTm9kZSIpOwotICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJ1cGRhdGVGb2N1c2VkTm9kZSIpOworICAgIG1l
c3NhZ2UtPnB1c2hOdW1iZXIobm9kZUlkKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hl
ZCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgic2V0QXR0YWNoZWRXaW5k
b3ciKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhdHRhY2hlZCk7Ci0gICAgZnVuY3Rp
b24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJzZXRBdHRhY2hlZFdp
bmRvdyIpOworICAgIG1lc3NhZ2UtPnB1c2hCb29sKGF0dGFjaGVkKTsKKyAgICBzZW5kTWVzc2Fn
ZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2hvd1BhbmVsKGludCBw
YW5lbCkKQEAgLTIzNiwxMCArMjMzLDEwIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmJyaW5n
VG9Gcm9udCgpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
aW5zcGVjdGVkVVJMQ2hhbmdlZCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHVybCk7
Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2Fn
ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJp
bnNwZWN0ZWRVUkxDaGFuZ2VkIik7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZyh1cmwpOworICAg
IHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpCkBAIC0yNTIsNyArMjQ5LDYgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6cmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVkKCkKICAgICBjYWxsU2ltcGxl
RnVuY3Rpb24oInJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCIpOwogfQogCi0KIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnNlYXJjaGluZ0Zvck5vZGVXYXNFbmFibGVkKCkKIHsKICAgICBjYWxs
U2ltcGxlRnVuY3Rpb24oInNlYXJjaGluZ0Zvck5vZGVXYXNFbmFibGVkIik7CkBAIC0yNjUsMTAg
KzI2MSwxMCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWFyY2hpbmdGb3JOb2RlV2FzRGlz
YWJsZWQoKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKGxvbmcgc3RhdGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
InVwZGF0ZVBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChzdGF0ZSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5w
dXNoU3RyaW5nKCJ1cGRhdGVQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIik7CisgICAgbWVzc2FnZS0+
cHVzaE51bWJlcihzdGF0ZSk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCkKQEAgLTI4MSwx
MiArMjc3LDEyIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNT
dG9wcGVkKCkKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInRpbWVsaW5lUHJvZmlsZXJXYXNTdG9w
cGVkIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFJlY29yZFRvVGltZWxpbmUo
Y29uc3QgU2NyaXB0T2JqZWN0JiByZWNvcmQpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRS
ZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCkKIHsKLSAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
LSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiYWRkUmVjb3JkVG9UaW1lbGluZSIpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJlY29yZCk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJhZGRSZWNvcmRUb1RpbWVsaW5lIik7Cisg
ICAgbWVzc2FnZS0+cHVzaChyZWNvcmQpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQog
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0zMDcsMzcgKzMwMywzNyBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpkZWJ1Z2dlcldhc0Rpc2FibGVkKCkKIAogdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUpCiB7
Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0
Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInBhcnNlZFNjcmlwdFNvdXJjZSIp
OwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZUlEKTsKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCh1cmwpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRhdGEpOwot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZpcnN0TGluZSk7Ci0gICAgZnVuY3Rpb24uY2Fs
bCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJwYXJzZWRTY3JpcHRTb3VyY2Ui
KTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKHNvdXJjZUlEKTsKKyAgICBtZXNzYWdlLT5wdXNo
U3RyaW5nKHVybCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZyhkYXRhKTsKKyAgICBtZXNzYWdl
LT5wdXNoTnVtYmVyKGZpcnN0TGluZSk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc3RvcmVkQnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCgicmVzdG9yZWRCcmVha3BvaW50Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291
cmNlSUQpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHVybCk7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQobGluZSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZW5hYmxl
ZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY29uZGl0aW9uKTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoInJlc3RvcmVkQnJlYWtw
b2ludCIpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoc291cmNlSUQpOworICAgIG1lc3NhZ2Ut
PnB1c2hTdHJpbmcodXJsKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGxpbmUpOworICAgIG1l
c3NhZ2UtPnB1c2hCb29sKGVuYWJsZWQpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoY29uZGl0
aW9uKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJ
bnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZmFp
bGVkVG9QYXJzZVNjcmlwdFNvdXJjZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHVy
bCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZGF0YSk7Ci0gICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoZmlyc3RMaW5lKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChlcnJv
ckxpbmUpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVycm9yTWVzc2FnZSk7Ci0gICAg
ZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJmYWlsZWRU
b1BhcnNlU2NyaXB0U291cmNlIik7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZyh1cmwpOworICAg
IG1lc3NhZ2UtPnB1c2hTdHJpbmcoZGF0YSk7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihmaXJz
dExpbmUpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoZXJyb3JMaW5lKTsKKyAgICBtZXNzYWdl
LT5wdXNoU3RyaW5nKGVycm9yTWVzc2FnZSk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhdXNlZFNjcmlwdChTZXJpYWxpemVkU2NyaXB0
VmFsdWUqIGNhbGxGcmFtZXMpCkBAIC0zNzQsMTAgKzM3MCwxMCBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjphZGRQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFZhbHVlJiBwcm9maWxlKQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxp
bmcpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldFJlY29yZGluZ1By
b2ZpbGUiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpc1Byb2ZpbGluZyk7Ci0gICAg
ZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJzZXRSZWNv
cmRpbmdQcm9maWxlIik7CisgICAgbWVzc2FnZS0+cHVzaEJvb2woaXNQcm9maWxpbmcpOworICAg
IHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRH
ZXRQcm9maWxlSGVhZGVycyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGhlYWRlcnMp
CkBAIC0zOTksMTA0ICszOTUsMTA0IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFBy
b2ZpbGUobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm9maWxlKQogfQogI2VuZGlm
CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERvY3VtZW50KGNvbnN0IFNjcmlwdE9iamVj
dCYgcm9vdCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERvY3VtZW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByb290KQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KCJzZXREb2N1bWVudCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJvb3QpOwot
ICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2Ug
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygic2V0
RG9jdW1lbnQiKTsKKyAgICBtZXNzYWdlLT5wdXNoKHJvb3QpOworICAgIHNlbmRNZXNzYWdlKG1l
c3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXREZXRhY2hlZFJvb3QoY29u
c3QgU2NyaXB0T2JqZWN0JiByb290KQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0RGV0YWNo
ZWRSb290KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByb290KQogewotICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXREZXRhY2hlZFJvb3QiKTsKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChyb290KTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1l
c3NhZ2UtPnB1c2hTdHJpbmcoInNldERldGFjaGVkUm9vdCIpOworICAgIG1lc3NhZ2UtPnB1c2go
cm9vdCk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OnNldENoaWxkTm9kZXMobG9uZyBwYXJlbnRJZCwgY29uc3QgU2NyaXB0QXJyYXkmIG5v
ZGVzKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0Q2hpbGROb2Rlcyhsb25nIHBhcmVudElk
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlcykKIHsKLSAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgic2V0Q2hpbGROb2RlcyIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KHBhcmVudElkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChub2Rlcyk7Ci0g
ICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJzZXRD
aGlsZE5vZGVzIik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihwYXJlbnRJZCk7CisgICAgbWVz
c2FnZS0+cHVzaChub2Rlcyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUNvdW50VXBkYXRlZChsb25nIGlkLCBpbnQgbmV3
VmFsdWUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNoaWxkTm9kZUNv
dW50VXBkYXRlZCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGlkKTsKLSAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChuZXdWYWx1ZSk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJjaGlsZE5vZGVDb3VudFVwZGF0ZWQiKTsKKyAg
ICBtZXNzYWdlLT5wdXNoTnVtYmVyKGlkKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKG5ld1Zh
bHVlKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6Y2hpbGROb2RlSW5zZXJ0ZWQobG9uZyBwYXJlbnRJZCwgbG9uZyBwcmV2SWQsIGNvbnN0
IFNjcmlwdE9iamVjdCYgbm9kZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUlu
c2VydGVkKGxvbmcgcGFyZW50SWQsIGxvbmcgcHJldklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbm9kZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY2hpbGRO
b2RlSW5zZXJ0ZWQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChwYXJlbnRJZCk7Ci0g
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocHJldklkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChub2RlKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2Ut
PnB1c2hTdHJpbmcoImNoaWxkTm9kZUluc2VydGVkIik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJl
cihwYXJlbnRJZCk7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihwcmV2SWQpOworICAgIG1lc3Nh
Z2UtPnB1c2gobm9kZSk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZVJlbW92ZWQobG9uZyBwYXJlbnRJZCwgbG9uZyBpZCkK
IHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY2hpbGROb2RlUmVtb3ZlZCIp
OwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHBhcmVudElkKTsKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChpZCk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNz
YWdlLT5wdXNoU3RyaW5nKCJjaGlsZE5vZGVSZW1vdmVkIik7CisgICAgbWVzc2FnZS0+cHVzaE51
bWJlcihwYXJlbnRJZCk7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihpZCk7CisgICAgc2VuZE1l
c3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJpYnV0ZXNV
cGRhdGVkKGxvbmcgaWQsIGNvbnN0IFNjcmlwdEFycmF5JiBhdHRyaWJ1dGVzKQordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6YXR0cmlidXRlc1VwZGF0ZWQobG9uZyBpZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXR0cmlidXRlcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCgiYXR0cmlidXRlc1VwZGF0ZWQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChp
ZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0cmlidXRlcyk7Ci0gICAgZnVuY3Rp
b24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJhdHRyaWJ1dGVzVXBk
YXRlZCIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoaWQpOworICAgIG1lc3NhZ2UtPnB1c2go
YXR0cmlidXRlcyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZFJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogewot
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRSZW1vdmVOb2RlIik7Ci0gICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChub2RlSWQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+
cHVzaFN0cmluZygiZGlkUmVtb3ZlTm9kZSIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoY2Fs
bElkKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKG5vZGVJZCk7CisgICAgc2VuZE1lc3NhZ2Uo
bWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENoYW5nZVRhZ05hbWUo
bG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJkaWRDaGFuZ2VUYWdOYW1lIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
Y2FsbElkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChub2RlSWQpOwotICAgIGZ1bmN0
aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkQ2hhbmdlVGFn
TmFtZSIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBtZXNzYWdlLT5w
dXNoTnVtYmVyKG5vZGVJZCk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQpCiB7Ci0gICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsg
Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEdldENoaWxkTm9kZXMiKTsKLSAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkR2V0Q2hpbGROb2RlcyIpOworICAgIG1l
c3NhZ2UtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBwbHlEb21DaGFuZ2UobG9uZyBjYWxsSWQs
IGJvb2wgc3VjY2VzcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJ
bnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlk
QXBwbHlEb21DaGFuZ2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwotICAgIGZ1bmN0aW9uLmNhbGwo
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkQXBwbHlEb21DaGFuZ2UiKTsK
KyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVzaEJvb2wo
c3VjY2Vzcyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBu
b2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSkKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBu
b2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGxpc3RlbmVyc0FycmF5KQogewogICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUiKTsKQEAgLTUwNiwxMjEgKzUwMiwxMjIgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlk
R2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY28KICAg
ICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFN0
eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlcykKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gc3R5bGVzKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJk
aWRHZXRTdHlsZXMiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlcyk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJkaWRHZXRTdHlsZXMiKTsKKyAgICBtZXNz
YWdlLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVzaChzdHlsZXMpOworICAg
IHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRH
ZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBzdHlsZXMpCit2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHN0eWxlcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJkaWRHZXRBbGxTdHlsZXMiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChj
YWxsSWQpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlcyk7Ci0gICAgZnVuY3Rp
b24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJkaWRHZXRBbGxTdHls
ZXMiKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVz
aChzdHlsZXMpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRW
YWx1ZSYgc3R5bGUpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb21wdXRlZFN0eWxl
KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBzdHlsZSkKIHsKLSAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
LSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0Q29tcHV0ZWRTdHlsZSIpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoc3R5bGUpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+
cHVzaFN0cmluZygiZGlkR2V0Q29tcHV0ZWRTdHlsZSIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1i
ZXIoY2FsbElkKTsKKyAgICBtZXNzYWdlLT5wdXNoKHN0eWxlKTsKKyAgICBzZW5kTWVzc2FnZSht
ZXNzYWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0SW5saW5lU3R5bGUo
bG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmRpZEdldElubGluZVN0eWxlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBzdHlsZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJ
bnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlk
R2V0SW5saW5lU3R5bGUiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7
CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoImRpZEdldElubGluZVN0eWxlIik7Cisg
ICAgbWVzc2FnZS0+cHVzaE51bWJlcihjYWxsSWQpOworICAgIG1lc3NhZ2UtPnB1c2goc3R5bGUp
OworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5k
OjpkaWRBcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgc3R5bGUsIGNvbnN0IFNjcmlwdEFycmF5JiBjaGFuZ2VkUHJvcGVydGllcykKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBib29s
IHN1Y2Nlc3MsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBjaGFuZ2VkUHJvcGVydGllcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiZGlkQXBwbHlTdHlsZVRleHQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChjYWxsSWQpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwot
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0eWxlKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChjaGFuZ2VkUHJvcGVydGllcyk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
KyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJkaWRBcHBseVN0eWxlVGV4dCIpOworICAgIG1lc3Nh
Z2UtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBtZXNzYWdlLT5wdXNoQm9vbChzdWNjZXNzKTsK
KyAgICBtZXNzYWdlLT5wdXNoKHN0eWxlKTsKKyAgICBtZXNzYWdlLT5wdXNoKGNoYW5nZWRQcm9w
ZXJ0aWVzKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6ZGlkU2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiB7Ci0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZFNldFN0eWxlVGV4dCIpOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoc3VjY2Vzcyk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdl
LT5wdXNoU3RyaW5nKCJkaWRTZXRTdHlsZVRleHQiKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVy
KGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVzaEJvb2woc3VjY2Vzcyk7CisgICAgc2VuZE1lc3Nh
Z2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldFN0eWxlUHJv
cGVydHkobG9uZyBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiZGlkU2V0U3R5bGVQcm9wZXJ0eSIpOwotICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7
Ci0gICAgZnVuY3Rpb24uY2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2Fn
ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJk
aWRTZXRTdHlsZVByb3BlcnR5Iik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihjYWxsSWQpOwor
ICAgIG1lc3NhZ2UtPnB1c2hCb29sKHN1Y2Nlc3MpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2Up
OwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRUb2dnbGVTdHlsZUVuYWJsZWQobG9u
ZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gc3R5bGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRp
ZFRvZ2dsZVN0eWxlRW5hYmxlZCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJ
ZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3R5bGUpOwotICAgIGZ1bmN0aW9uLmNh
bGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkVG9nZ2xlU3R5bGVFbmFi
bGVkIik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcihjYWxsSWQpOworICAgIG1lc3NhZ2UtPnB1
c2goc3R5bGUpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRTZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZh
bHVlJiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpCit2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpkaWRTZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJ1bGUsIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSkKIHsKLSAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0UnVsZVNlbGVjdG9yIik7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoY2FsbElkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChydWxl
KTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAg
ICBmdW5jdGlvbi5jYWxsKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoImRpZFNl
dFJ1bGVTZWxlY3RvciIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBt
ZXNzYWdlLT5wdXNoKHJ1bGUpOworICAgIG1lc3NhZ2UtPnB1c2hCb29sKHNlbGVjdG9yQWZmZWN0
c05vZGUpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRBZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgcnVsZSwg
Ym9vbCBzZWxlY3RvckFmZmVjdHNOb2RlKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQWRk
UnVsZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcnVsZSwgYm9vbCBz
ZWxlY3RvckFmZmVjdHNOb2RlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJkaWRBZGRSdWxlIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKLSAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChydWxlKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwor
ICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoImRpZEFkZFJ1bGUiKTsKKyAgICBtZXNzYWdlLT5wdXNo
TnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVzaChydWxlKTsKKyAgICBtZXNzYWdlLT5w
dXNoQm9vbChzZWxlY3RvckFmZmVjdHNOb2RlKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsK
IH0KIAogI2lmIEVOQUJMRShXT1JLRVJTKQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ3Jl
YXRlV29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIpCit2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpkaWRDcmVhdGVXb3JrZXIobG9uZyB3b3JrZXJJRCwgY29uc3QgU3Ry
aW5nJiB3b3JrZXJVUkwsIGJvb2wgd29ya2VySXNTaGFyZWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKLSAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgiZGlkQ3JlYXRlV29ya2VyIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQod29ya2VyLmlkKCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHdvcmtl
ci51cmwoKSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQod29ya2VyLmlzU2hhcmVkV29y
a2VyKCkpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0
cmluZygiZGlkQ3JlYXRlV29ya2VyIik7CisgICAgbWVzc2FnZS0+cHVzaE51bWJlcih3b3JrZXJJ
RCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZyh3b3JrZXJVUkwpOworICAgIG1lc3NhZ2UtPnB1
c2hCb29sKHdvcmtlcklzU2hhcmVkKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkRGVzdHJveVdvcmtlcihjb25zdCBJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZSYgd29ya2VyKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkRGVzdHJv
eVdvcmtlcihsb25nIHdvcmtlcklEKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KCJkaWREZXN0cm95V29ya2VyIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQod29y
a2VyLmlkKCkpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVz
aFN0cmluZygiZGlkRGVzdHJveVdvcmtlciIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIod29y
a2VySUQpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQorCiAjZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldENvb2tpZXMobG9uZyBj
YWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZXNT
dHJpbmcpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb29raWVzKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZXNTdHJpbmcpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEdldENv
b2tpZXMiKTsKQEAgLTY1OCwxMCArNjU1LDEwIEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFk
ZERhdGFiYXNlKGNvbnN0IFNjcmlwdE9iamVjdCYgZGJPYmplY3QpCiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OnNlbGVjdERhdGFiYXNlKGludCBkYXRhYmFzZUlkKQogewotICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZWxlY3REYXRhYmFzZSIpOwotICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KGRhdGFiYXNlSWQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgbWVzc2FnZS0+cHVzaFN0cmluZygic2VsZWN0RGF0YWJhc2UiKTsKKyAgICBtZXNzYWdlLT5w
dXNoTnVtYmVyKGRhdGFiYXNlSWQpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBjYWxs
SWQsIGNvbnN0IFNjcmlwdEFycmF5JiB0YWJsZU5hbWVzKQpAQCAtNjg3LDEwICs2ODQsMTAgQEAg
Ym9vbCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkRE9NU3RvcmFnZShjb25zdCBTY3JpcHRPYmplY3Qm
IGRvbVN0b3JhZ2VPYmopCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0b3Jh
Z2UobG9uZyBzdG9yYWdlSWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
InNlbGVjdERPTVN0b3JhZ2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzdG9yYWdl
SWQpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1l
c3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmlu
Zygic2VsZWN0RE9NU3RvcmFnZSIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoc3RvcmFnZUlk
KTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6ZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5
JiBlbnRyaWVzKQpAQCAtNzA0LDQ1ICs3MDEsNDUgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5Jgog
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJ
ZCwgYm9vbCBzdWNjZXNzKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJk
aWRTZXRET01TdG9yYWdlSXRlbSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJ
ZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7Ci0gICAgZnVuY3Rpb24u
Y2FsbCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKCJkaWRTZXRET01TdG9yYWdl
SXRlbSIpOworICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoY2FsbElkKTsKKyAgICBtZXNzYWdlLT5w
dXNoQm9vbChzdWNjZXNzKTsKKyAgICBzZW5kTWVzc2FnZShtZXNzYWdlKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6ZGlkUmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGJv
b2wgc3VjY2VzcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkUmVt
b3ZlRE9NU3RvcmFnZUl0ZW0iKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQp
OwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwotICAgIGZ1bmN0aW9uLmNh
bGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiZGlkUmVtb3ZlRE9NU3RvcmFn
ZUl0ZW0iKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+
cHVzaEJvb2woc3VjY2Vzcyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UobG9uZyBzdG9yYWdlSWQpCiB7Ci0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInVwZGF0ZURPTVN0b3JhZ2UiKTsKLSAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzdG9yYWdlSWQpOwotICAgIGZ1bmN0aW9uLmNhbGwo
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygidXBkYXRlRE9NU3RvcmFnZSIpOwor
ICAgIG1lc3NhZ2UtPnB1c2hOdW1iZXIoc3RvcmFnZUlkKTsKKyAgICBzZW5kTWVzc2FnZShtZXNz
YWdlKTsKIH0KICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2Vh
cmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlkcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiYWRkTm9kZXNUb1NlYXJjaFJlc3VsdCIpOwotICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG5vZGVJZHMpOwotICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
bWVzc2FnZS0+cHVzaFN0cmluZygiYWRkTm9kZXNUb1NlYXJjaFJlc3VsdCIpOworICAgIG1lc3Nh
Z2UtPnB1c2hTdHJpbmcobm9kZUlkcyk7CisgICAgc2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGludCBpdGVt
SWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJdGVt
U2VsZWN0ZWQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpdGVtSWQpOwotICAgIGZ1
bmN0aW9uLmNhbGwoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lc3NhZ2UgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmluZygiY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQiKTsKKyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGl0ZW1JZCk7CisgICAg
c2VuZE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNvbnRl
eHRNZW51Q2xlYXJlZCgpCkBAIC03NTIsMTcgKzc0OSwyNCBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpjb250ZXh0TWVudUNsZWFyZWQoKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkK
IHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoc2NyaXB0KTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBtZXNzYWdlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIG1lc3NhZ2UtPnB1c2hTdHJpbmcoImV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQiKTsK
KyAgICBtZXNzYWdlLT5wdXNoTnVtYmVyKGNhbGxJZCk7CisgICAgbWVzc2FnZS0+cHVzaFN0cmlu
ZyhzY3JpcHQpOworICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpjYWxsU2ltcGxlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUp
CiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbk5hbWUpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVzc2FnZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBtZXNzYWdlLT5wdXNoU3RyaW5nKGZ1bmN0aW9uTmFtZSk7CisgICAgc2VuZE1lc3Nh
Z2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbmRNZXNzYWdlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1lc3NhZ2UpCit7CisgICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2hNZXNzYWdlIik7IAorICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKICAgICBmdW5j
dGlvbi5jYWxsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4
IDBlN2Q3YjMuLjdlMzI5ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApA
QCAtMzksMTIgKzM5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDb25zb2xl
TWVzc2FnZTsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFz
cyBJbnNwZWN0b3JBcnJheTsKKyAgICBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiAgICAgY2xhc3Mg
SW5zcGVjdG9yUmVzb3VyY2U7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBTY3JpcHRTdHJp
bmc7CiAgICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogICAgIGNsYXNzIFN0b3JhZ2U7
Ci0gICAgY2xhc3MgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2U7CisgICAgY2xhc3MgSW5zcGVjdG9y
VmFsdWU7CisgICAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogCiAgICAgY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKQEAgLTY2LDcgKzY5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZUNvbnNvbGVNZXNz
YWdlUmVwZWF0Q291bnQodW5zaWduZWQgY291bnQpOwogICAgICAgICB2b2lkIGNsZWFyQ29uc29s
ZU1lc3NhZ2VzKCk7CiAKLSAgICAgICAgYm9vbCB1cGRhdGVSZXNvdXJjZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdE9iamVjdCYgcmVzb3VyY2VPYmopOworICAgICAgICB2
b2lkIHVwZGF0ZVJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc291cmNlT2JqKTsKICAgICAgICAgdm9pZCByZW1vdmVSZXNvdXJj
ZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogICAgICAgICB2b2lkIGRpZEdldFJlc291cmNl
Q29udGVudChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKIApAQCAtMTIxLDQw
ICsxMjQsNDAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZURPTVN0
b3JhZ2UobG9uZyBzdG9yYWdlSWQpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBzZXREb2N1bWVu
dChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpOwotICAgICAgICB2b2lkIHNldERldGFjaGVkUm9v
dChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpOwotICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMo
bG9uZyBwYXJlbnRJZCwgY29uc3QgU2NyaXB0QXJyYXkmIG5vZGVzKTsKKyAgICAgICAgdm9pZCBz
ZXREb2N1bWVudChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcm9vdCk7CisgICAgICAgIHZv
aWQgc2V0RGV0YWNoZWRSb290KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByb290KTsKKyAg
ICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGxvbmcgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IG5vZGVzKTsKICAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQobG9u
ZyBpZCwgaW50IG5ld1ZhbHVlKTsKLSAgICAgICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChsb25n
IHBhcmVudElkLCBsb25nIHByZXZJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBub2RlKTsKKyAgICAg
ICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChsb25nIHBhcmVudElkLCBsb25nIHByZXZJZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG5vZGUpOwogICAgICAgICB2b2lkIGNoaWxkTm9kZVJl
bW92ZWQobG9uZyBwYXJlbnRJZCwgbG9uZyBpZCk7Ci0gICAgICAgIHZvaWQgYXR0cmlidXRlc1Vw
ZGF0ZWQobG9uZyBpZCwgY29uc3QgU2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpOworICAgICAgICB2
b2lkIGF0dHJpYnV0ZXNVcGRhdGVkKGxvbmcgaWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGRpZEdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQp
OwogICAgICAgICB2b2lkIGRpZEFwcGx5RG9tQ2hhbmdlKGxvbmcgY2FsbElkLCBib29sIHN1Y2Nl
c3MpOwotICAgICAgICB2b2lkIGRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7CisgICAg
ICAgIHZvaWQgZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbGlzdGVuZXJzQXJyYXkpOwogICAgICAg
ICB2b2lkIGRpZFJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICAgICAg
dm9pZCBkaWRDaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAKLSAgICAg
ICAgdm9pZCBkaWRHZXRTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHls
ZXMpOwotICAgICAgICB2b2lkIGRpZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2Ny
aXB0QXJyYXkmIHN0eWxlcyk7Ci0gICAgICAgIHZvaWQgZGlkR2V0SW5saW5lU3R5bGUobG9uZyBj
YWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSk7Ci0gICAgICAgIHZvaWQgZGlkR2V0Q29t
cHV0ZWRTdHlsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKLSAgICAg
ICAgdm9pZCBkaWRBcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBjb25z
dCBTY3JpcHRWYWx1ZSYgc3R5bGUsIGNvbnN0IFNjcmlwdEFycmF5JiBjaGFuZ2VkUHJvcGVydGll
cyk7CisgICAgICAgIHZvaWQgZGlkR2V0U3R5bGVzKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBzdHlsZXMpOworICAgICAgICB2b2lkIGRpZEdldEFsbFN0eWxlcyhsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3R5bGVzKTsKKyAgICAgICAgdm9p
ZCBkaWRHZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gc3R5bGUpOworICAgICAgICB2b2lkIGRpZEdldENvbXB1dGVkU3R5bGUobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHN0eWxlKTsKKyAgICAgICAgdm9pZCBkaWRBcHBs
eVN0eWxlVGV4dChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBzdHlsZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRp
ZXMpOwogICAgICAgICB2b2lkIGRpZFNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgYm9vbCBzdWNj
ZXNzKTsKICAgICAgICAgdm9pZCBkaWRTZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBib29s
IHN1Y2Nlc3MpOwotICAgICAgICB2b2lkIGRpZFRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJ
ZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKLSAgICAgICAgdm9pZCBkaWRTZXRSdWxlU2Vs
ZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBydWxlLCBib29sIHNlbGVjdG9y
QWZmZWN0c05vZGUpOwotICAgICAgICB2b2lkIGRpZEFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0
IFNjcmlwdFZhbHVlJiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpOworICAgICAgICB2
b2lkIGRpZFRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gc3R5bGUpOworICAgICAgICB2b2lkIGRpZFNldFJ1bGVTZWxlY3Rvcihsb25nIGNh
bGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcnVsZSwgYm9vbCBzZWxlY3RvckFmZmVj
dHNOb2RlKTsKKyAgICAgICAgdm9pZCBkaWRBZGRSdWxlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogCiAgICAg
ICAgIHZvaWQgdGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKICAgICAgICAgdm9pZCB0aW1l
bGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwotICAgICAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxp
bmUoY29uc3QgU2NyaXB0T2JqZWN0Jik7CisgICAgICAgIHZvaWQgYWRkUmVjb3JkVG9UaW1lbGlu
ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKLSAgICAg
ICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoY29uc3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmKTsK
LSAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291
cmNlJik7CisgICAgICAgIHZvaWQgZGlkQ3JlYXRlV29ya2VyKGxvbmcgd29ya2VySUQsIGNvbnN0
IFN0cmluZyYgd29ya2VyVVJMLCBib29sIHdvcmtlcklzU2hhcmVkKTsKKyAgICAgICAgdm9pZCBk
aWREZXN0cm95V29ya2VyKGxvbmcgd29ya2VySUQpOwogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVIp
CiAKLSAgICAgICAgdm9pZCBkaWRHZXRDb29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRB
cnJheSYgY29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKTsKKyAgICAgICAgdm9p
ZCBkaWRHZXRDb29raWVzKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
b29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZXNTdHJpbmcpOwogICAgICAgICB2b2lkIGRpZERp
c3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiByZXN1bHQsIGJvb2wgaXNFeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgYWRkTm9kZXNUb1Nl
YXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMpOwpAQCAtMTY3LDYgKzE3MCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBjYWxsU2ltcGxlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwor
ICAgICAgICB2b2lkIHNlbmRNZXNzYWdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1lc3Nh
Z2UpOworCiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsKICAgICB9OwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKaW5kZXggNTFlZDI5MC4uYTQzZjM0
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcApAQCAtMzksMTAgKzM5
LDEwIEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVj
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMSw5NCArMTMxLDkzIEBAIHZvaWQg
SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogICAgIG1fY2hhbmdlcy5zZXQoVHlwZUNoYW5nZSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHBvcHVsYXRlSGVhZGVyc09iamVjdChTY3JpcHRPYmplY3QqIG9iamVjdCwgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyB2b2lkIHBvcHVsYXRlSGVhZGVyc09iamVjdChJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsK
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwot
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBvYmplY3QtPnNldChpdC0+Zmlyc3Quc3Ry
aW5nKCksIGl0LT5zZWNvbmQpOwotICAgIH0KKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IG9iamVjdC0+c2V0U3RyaW5nKGl0LT5maXJzdC5zdHJpbmcoKSwgaXQtPnNlY29uZCk7CiB9CiAK
IAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6dXBkYXRlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCkKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZUluc3BlY3Rv
ck9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAgICAgaWYgKG1fY2hhbmdl
cy5oYXNDaGFuZ2UoTm9DaGFuZ2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRPYmpl
Y3QganNvbk9iamVjdCA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBqc29uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBpZiAobV9jaGFuZ2VzLmhhc0NoYW5nZShSZXF1ZXN0Q2hhbmdlKSkgewotICAgICAgICBq
c29uT2JqZWN0LnNldCgidXJsIiwgbV9yZXF1ZXN0VVJMLnN0cmluZygpKTsKLSAgICAgICAganNv
bk9iamVjdC5zZXQoImRvY3VtZW50VVJMIiwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3Ry
aW5nKCkpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgiaG9zdCIsIG1fcmVxdWVzdFVSTC5ob3N0
KCkpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgicGF0aCIsIG1fcmVxdWVzdFVSTC5wYXRoKCkp
OwotICAgICAgICBqc29uT2JqZWN0LnNldCgibGFzdFBhdGhDb21wb25lbnQiLCBtX3JlcXVlc3RV
UkwubGFzdFBhdGhDb21wb25lbnQoKSk7Ci0gICAgICAgIFNjcmlwdE9iamVjdCByZXF1ZXN0SGVh
ZGVycyA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICAgICAgcG9wdWxhdGVIZWFk
ZXJzT2JqZWN0KCZyZXF1ZXN0SGVhZGVycywgbV9yZXF1ZXN0SGVhZGVyRmllbGRzKTsKLSAgICAg
ICAganNvbk9iamVjdC5zZXQoInJlcXVlc3RIZWFkZXJzIiwgcmVxdWVzdEhlYWRlcnMpOwotICAg
ICAgICBqc29uT2JqZWN0LnNldCgibWFpblJlc291cmNlIiwgbV9pc01haW5SZXNvdXJjZSk7Ci0g
ICAgICAgIGpzb25PYmplY3Quc2V0KCJyZXF1ZXN0TWV0aG9kIiwgbV9yZXF1ZXN0TWV0aG9kKTsK
LSAgICAgICAganNvbk9iamVjdC5zZXQoInJlcXVlc3RGb3JtRGF0YSIsIG1fcmVxdWVzdEZvcm1E
YXRhKTsKLSAgICAgICAganNvbk9iamVjdC5zZXQoImRpZFJlcXVlc3RDaGFuZ2UiLCB0cnVlKTsK
LSAgICAgICAganNvbk9iamVjdC5zZXQoImNhY2hlZCIsIG1fY2FjaGVkKTsKKyAgICAgICAganNv
bk9iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCBtX3JlcXVlc3RVUkwuc3RyaW5nKCkpOworICAgICAg
ICBqc29uT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBqc29uT2JqZWN0LT5zZXRTdHJpbmcoImhvc3Qi
LCBtX3JlcXVlc3RVUkwuaG9zdCgpKTsKKyAgICAgICAganNvbk9iamVjdC0+c2V0U3RyaW5nKCJw
YXRoIiwgbV9yZXF1ZXN0VVJMLnBhdGgoKSk7CisgICAgICAgIGpzb25PYmplY3QtPnNldFN0cmlu
ZygibGFzdFBhdGhDb21wb25lbnQiLCBtX3JlcXVlc3RVUkwubGFzdFBhdGhDb21wb25lbnQoKSk7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RIZWFkZXJzID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcG9wdWxhdGVIZWFkZXJzT2JqZWN0KHJlcXVl
c3RIZWFkZXJzLmdldCgpLCBtX3JlcXVlc3RIZWFkZXJGaWVsZHMpOworICAgICAgICBqc29uT2Jq
ZWN0LT5zZXQoInJlcXVlc3RIZWFkZXJzIiwgcmVxdWVzdEhlYWRlcnMpOworICAgICAgICBqc29u
T2JqZWN0LT5zZXRCb29sKCJtYWluUmVzb3VyY2UiLCBtX2lzTWFpblJlc291cmNlKTsKKyAgICAg
ICAganNvbk9iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0TWV0aG9kIiwgbV9yZXF1ZXN0TWV0aG9k
KTsKKyAgICAgICAganNvbk9iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0Rm9ybURhdGEiLCBtX3Jl
cXVlc3RGb3JtRGF0YSk7CisgICAgICAgIGpzb25PYmplY3QtPnNldEJvb2woImRpZFJlcXVlc3RD
aGFuZ2UiLCB0cnVlKTsKKyAgICAgICAganNvbk9iamVjdC0+c2V0Qm9vbCgiY2FjaGVkIiwgbV9j
YWNoZWQpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZXMuaGFzQ2hhbmdlKFJlc3BvbnNlQ2hh
bmdlKSkgewotICAgICAgICBqc29uT2JqZWN0LnNldCgibWltZVR5cGUiLCBtX21pbWVUeXBlKTsK
LSAgICAgICAganNvbk9iamVjdC5zZXQoInN1Z2dlc3RlZEZpbGVuYW1lIiwgbV9zdWdnZXN0ZWRG
aWxlbmFtZSk7Ci0gICAgICAgIGpzb25PYmplY3Quc2V0KCJleHBlY3RlZENvbnRlbnRMZW5ndGgi
LCBtX2V4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIGpzb25PYmplY3Quc2V0KCJzdGF0
dXNDb2RlIiwgbV9yZXNwb25zZVN0YXR1c0NvZGUpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgi
c3VnZ2VzdGVkRmlsZW5hbWUiLCBtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKLSAgICAgICAgU2NyaXB0
T2JqZWN0IHJlc3BvbnNlSGVhZGVycyA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAg
ICAgICAgcG9wdWxhdGVIZWFkZXJzT2JqZWN0KCZyZXNwb25zZUhlYWRlcnMsIG1fcmVzcG9uc2VI
ZWFkZXJGaWVsZHMpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgicmVzcG9uc2VIZWFkZXJzIiwg
cmVzcG9uc2VIZWFkZXJzKTsKLSAgICAgICAganNvbk9iamVjdC5zZXQoImRpZFJlc3BvbnNlQ2hh
bmdlIiwgdHJ1ZSk7CisgICAgICAgIGpzb25PYmplY3QtPnNldFN0cmluZygibWltZVR5cGUiLCBt
X21pbWVUeXBlKTsKKyAgICAgICAganNvbk9iamVjdC0+c2V0U3RyaW5nKCJzdWdnZXN0ZWRGaWxl
bmFtZSIsIG1fc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICBqc29uT2JqZWN0LT5zZXROdW1i
ZXIoImV4cGVjdGVkQ29udGVudExlbmd0aCIsIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKKyAg
ICAgICAganNvbk9iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXNDb2RlIiwgbV9yZXNwb25zZVN0YXR1
c0NvZGUpOworICAgICAgICBqc29uT2JqZWN0LT5zZXRTdHJpbmcoInN1Z2dlc3RlZEZpbGVuYW1l
IiwgbV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlSGVhZGVycyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBv
cHVsYXRlSGVhZGVyc09iamVjdChyZXNwb25zZUhlYWRlcnMuZ2V0KCksIG1fcmVzcG9uc2VIZWFk
ZXJGaWVsZHMpOworICAgICAgICBqc29uT2JqZWN0LT5zZXQoInJlc3BvbnNlSGVhZGVycyIsIHJl
c3BvbnNlSGVhZGVycyk7CisgICAgICAgIGpzb25PYmplY3QtPnNldEJvb2woImRpZFJlc3BvbnNl
Q2hhbmdlIiwgdHJ1ZSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlcy5oYXNDaGFuZ2UoVHlw
ZUNoYW5nZSkpIHsKLSAgICAgICAganNvbk9iamVjdC5zZXQoInR5cGUiLCBzdGF0aWNfY2FzdDxp
bnQ+KHR5cGUoKSkpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgiZGlkVHlwZUNoYW5nZSIsIHRy
dWUpOworICAgICAgICBqc29uT2JqZWN0LT5zZXROdW1iZXIoInR5cGUiLCB0eXBlKCkpOworICAg
ICAgICBqc29uT2JqZWN0LT5zZXRCb29sKCJkaWRUeXBlQ2hhbmdlIiwgdHJ1ZSk7CiAgICAgfQog
CiAgICAgaWYgKG1fY2hhbmdlcy5oYXNDaGFuZ2UoTGVuZ3RoQ2hhbmdlKSkgewotICAgICAgICBq
c29uT2JqZWN0LnNldCgicmVzb3VyY2VTaXplIiwgbV9sZW5ndGgpOwotICAgICAgICBqc29uT2Jq
ZWN0LnNldCgiZGlkTGVuZ3RoQ2hhbmdlIiwgdHJ1ZSk7CisgICAgICAgIGpzb25PYmplY3QtPnNl
dE51bWJlcigicmVzb3VyY2VTaXplIiwgbV9sZW5ndGgpOworICAgICAgICBqc29uT2JqZWN0LT5z
ZXRCb29sKCJkaWRMZW5ndGhDaGFuZ2UiLCB0cnVlKTsKICAgICB9CiAKICAgICBpZiAobV9jaGFu
Z2VzLmhhc0NoYW5nZShDb21wbGV0aW9uQ2hhbmdlKSkgewotICAgICAgICBqc29uT2JqZWN0LnNl
dCgiZmFpbGVkIiwgbV9mYWlsZWQpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgiZmluaXNoZWQi
LCBtX2ZpbmlzaGVkKTsKLSAgICAgICAganNvbk9iamVjdC5zZXQoImRpZENvbXBsZXRpb25DaGFu
Z2UiLCB0cnVlKTsKKyAgICAgICAganNvbk9iamVjdC0+c2V0Qm9vbCgiZmFpbGVkIiwgbV9mYWls
ZWQpOworICAgICAgICBqc29uT2JqZWN0LT5zZXRCb29sKCJmaW5pc2hlZCIsIG1fZmluaXNoZWQp
OworICAgICAgICBqc29uT2JqZWN0LT5zZXRCb29sKCJkaWRDb21wbGV0aW9uQ2hhbmdlIiwgdHJ1
ZSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlcy5oYXNDaGFuZ2UoVGltaW5nQ2hhbmdlKSkg
ewogICAgICAgICBpZiAobV9zdGFydFRpbWUgPiAwKQotICAgICAgICAgICAganNvbk9iamVjdC5z
ZXQoInN0YXJ0VGltZSIsIG1fc3RhcnRUaW1lKTsKKyAgICAgICAgICAgIGpzb25PYmplY3QtPnNl
dE51bWJlcigic3RhcnRUaW1lIiwgbV9zdGFydFRpbWUpOwogICAgICAgICBpZiAobV9yZXNwb25z
ZVJlY2VpdmVkVGltZSA+IDApCi0gICAgICAgICAgICBqc29uT2JqZWN0LnNldCgicmVzcG9uc2VS
ZWNlaXZlZFRpbWUiLCBtX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lKTsKKyAgICAgICAgICAgIGpzb25P
YmplY3QtPnNldE51bWJlcigicmVzcG9uc2VSZWNlaXZlZFRpbWUiLCBtX3Jlc3BvbnNlUmVjZWl2
ZWRUaW1lKTsKICAgICAgICAgaWYgKG1fZW5kVGltZSA+IDApCi0gICAgICAgICAgICBqc29uT2Jq
ZWN0LnNldCgiZW5kVGltZSIsIG1fZW5kVGltZSk7CisgICAgICAgICAgICBqc29uT2JqZWN0LT5z
ZXROdW1iZXIoImVuZFRpbWUiLCBtX2VuZFRpbWUpOwogICAgICAgICBpZiAobV9sb2FkRXZlbnRU
aW1lID4gMCkKLSAgICAgICAgICAgIGpzb25PYmplY3Quc2V0KCJsb2FkRXZlbnRUaW1lIiwgbV9s
b2FkRXZlbnRUaW1lKTsKKyAgICAgICAgICAgIGpzb25PYmplY3QtPnNldE51bWJlcigibG9hZEV2
ZW50VGltZSIsIG1fbG9hZEV2ZW50VGltZSk7CiAgICAgICAgIGlmIChtX2RvbUNvbnRlbnRFdmVu
dFRpbWUgPiAwKQotICAgICAgICAgICAganNvbk9iamVjdC5zZXQoImRvbUNvbnRlbnRFdmVudFRp
bWUiLCBtX2RvbUNvbnRlbnRFdmVudFRpbWUpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgiZGlk
VGltaW5nQ2hhbmdlIiwgdHJ1ZSk7CisgICAgICAgICAgICBqc29uT2JqZWN0LT5zZXROdW1iZXIo
ImRvbUNvbnRlbnRFdmVudFRpbWUiLCBtX2RvbUNvbnRlbnRFdmVudFRpbWUpOworICAgICAgICBq
c29uT2JqZWN0LT5zZXRCb29sKCJkaWRUaW1pbmdDaGFuZ2UiLCB0cnVlKTsKICAgICB9CiAKICAg
ICBpZiAobV9jaGFuZ2VzLmhhc0NoYW5nZShSZWRpcmVjdHNDaGFuZ2UpKSB7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWRpcmVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBtX3JlZGlyZWN0c1tpXS0+dXBkYXRlU2NyaXB0T2JqZWN0KGZyb250ZW5kKTsKKyAgICAgICAg
ICAgIG1fcmVkaXJlY3RzW2ldLT51cGRhdGVJbnNwZWN0b3JPYmplY3QoZnJvbnRlbmQpOwogICAg
IH0KIAotICAgIGlmIChmcm9udGVuZC0+dXBkYXRlUmVzb3VyY2UobV9pZGVudGlmaWVyLCBqc29u
T2JqZWN0KSkKLSAgICAgICAgbV9jaGFuZ2VzLmNsZWFyQWxsKCk7CisgICAgZnJvbnRlbmQtPnVw
ZGF0ZVJlc291cmNlKG1faWRlbnRpZmllciwganNvbk9iamVjdCk7CisgICAgbV9jaGFuZ2VzLmNs
ZWFyQWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnJlbGVhc2VTY3JpcHRPYmpl
Y3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6
cmVsZWFzZUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAg
ICAgbV9jaGFuZ2VzLnNldEFsbCgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Jl
ZGlyZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9yZWRpcmVjdHNbaV0tPnJlbGVhc2VTY3Jp
cHRPYmplY3QoZnJvbnRlbmQpOworICAgICAgICBtX3JlZGlyZWN0c1tpXS0+cmVsZWFzZUluc3Bl
Y3Rvck9iamVjdChmcm9udGVuZCk7CiAKICAgICBpZiAoZnJvbnRlbmQpCiAgICAgICAgIGZyb250
ZW5kLT5yZW1vdmVSZXNvdXJjZShtX2lkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlLmgKaW5kZXggMzBiMTI4MC4uZTFhZjc4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZS5oCkBAIC0zMyw4ICszMyw2IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVy
TWFwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTc4LDggKzc2LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB+SW5zcGVjdG9yUmVzb3VyY2UoKTsKIAogICAgICAgICBQYXNzUmVmUHRy
PEluc3BlY3RvclJlc291cmNlPiBhcHBlbmRSZWRpcmVjdCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICAgICAgdm9pZCB1cGRhdGVTY3JpcHRP
YmplY3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKLSAgICAgICAgdm9pZCByZWxlYXNl
U2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CisgICAgICAgIHZvaWQg
dXBkYXRlSW5zcGVjdG9yT2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CisgICAg
ICAgIHZvaWQgcmVsZWFzZUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRl
bmQpOwogCiAgICAgICAgIHZvaWQgdXBkYXRlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKICAgICAgICAgdm9pZCB1cGRhdGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmluZGV4IGFi
NTMzMTkuLmJmNDk0MGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRp
bWVsaW5lQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKQEAgLTYyLDkgKzYzLDkgQEAgdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpwdXNoR0NFdmVudFJlY29yZHMoKQogICAgIEdDRXZlbnRzIGV2ZW50cyA9
IG1fZ2NFdmVudHM7CiAgICAgbV9nY0V2ZW50cy5jbGVhcigpOwogICAgIGZvciAoR0NFdmVudHM6
Oml0ZXJhdG9yIGkgPSBldmVudHMuYmVnaW4oKTsgaSAhPSBldmVudHMuZW5kKCk7ICsraSkgewot
ICAgICAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIGktPnN0YXJ0VGltZSk7Ci0gICAgICAgIHJlY29y
ZC5zZXQoImRhdGEiLCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRhKG1f
ZnJvbnRlbmQsIGktPmNvbGxlY3RlZEJ5dGVzKSk7Ci0gICAgICAgIHJlY29yZC5zZXQoImVuZFRp
bWUiLCBpLT5lbmRUaW1lKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3Jk
ID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKGktPnN0YXJ0VGlt
ZSk7CisgICAgICAgIHJlY29yZC0+c2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVHQ0V2ZW50RGF0YShpLT5jb2xsZWN0ZWRCeXRlcykpOworICAgICAgICByZWNvcmQtPnNl
dE51bWJlcigiZW5kVGltZSIsIGktPmVuZFRpbWUpOwogICAgICAgICBhZGRSZWNvcmRUb1RpbWVs
aW5lKHJlY29yZCwgR0NFdmVudFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAgICAgfQogfQpAQCAtODMs
NyArODQsNyBAQCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp+SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbENhbGxGdW5jdGlvbihjb25z
dCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKQogewotICAgIHB1c2hDdXJyZW50
UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShtX2Zy
b250ZW5kLCBzY3JpcHROYW1lLCBzY3JpcHRMaW5lKSwgRnVuY3Rpb25DYWxsVGltZWxpbmVSZWNv
cmRUeXBlKTsKKyAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoc2NyaXB0TmFtZSwgc2NyaXB0TGluZSksIEZ1bmN0aW9uQ2Fs
bFRpbWVsaW5lUmVjb3JkVHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkQ2FsbEZ1bmN0aW9uKCkKQEAgLTkzLDcgKzk0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRDYWxsRnVuY3Rpb24oKQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OndpbGxEaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50JiBldmVudCkKIHsKLSAgICBwdXNoQ3VycmVu
dFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKG1f
ZnJvbnRlbmQsIGV2ZW50KSwKKyAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGV2ZW50KSwKICAgICAgICAgRXZlbnREaXNw
YXRjaFRpbWVsaW5lUmVjb3JkVHlwZSk7CiB9CiAKQEAgLTEwNCw3ICsxMDUsNyBAQCB2b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERpc3BhdGNoRXZlbnQoKQogCiB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OndpbGxMYXlvdXQoKQogewotICAgIHB1c2hDdXJyZW50UmVjb3JkKG1f
ZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpLCBMYXlvdXRUaW1lbGluZVJlY29yZFR5cGUpOwor
ICAgIHB1c2hDdXJyZW50UmVjb3JkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIExheW91dFRp
bWVsaW5lUmVjb3JkVHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlk
TGF5b3V0KCkKQEAgLTExNCw3ICsxMTUsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZExheW91dCgpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbFJlY2FsY3Vs
YXRlU3R5bGUoKQogewotICAgIHB1c2hDdXJyZW50UmVjb3JkKG1fZnJvbnRlbmQtPm5ld1Njcmlw
dE9iamVjdCgpLCBSZWNhbGN1bGF0ZVN0eWxlc1RpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgcHVz
aEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgUmVjYWxjdWxhdGVTdHls
ZXNUaW1lbGluZVJlY29yZFR5cGUpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQpAQCAtMTI0LDcgKzEyNSw3IEBAIHZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6ZGlkUmVjYWxjdWxhdGVTdHlsZSgpCiAKIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6d2lsbFBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcHVzaEN1
cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEobV9mcm9u
dGVuZCwgcmVjdCksIFBhaW50VGltZWxpbmVSZWNvcmRUeXBlKTsKKyAgICBwdXNoQ3VycmVudFJl
Y29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShyZWN0KSwgUGFpbnRU
aW1lbGluZVJlY29yZFR5cGUpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRp
ZFBhaW50KCkKQEAgLTEzNCwxNCArMTM1LDE0IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkUGFpbnQoKQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxXcml0ZUhU
TUwodW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSkKIHsKLSAgICBw
dXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRNTERh
dGEobV9mcm9udGVuZCwgbGVuZ3RoLCBzdGFydExpbmUpLCBQYXJzZUhUTUxUaW1lbGluZVJlY29y
ZFR5cGUpOworICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlUGFyc2VIVE1MRGF0YShsZW5ndGgsIHN0YXJ0TGluZSksIFBhcnNlSFRNTFRpbWVsaW5lUmVj
b3JkVHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkV3JpdGVIVE1M
KHVuc2lnbmVkIGludCBlbmRMaW5lKQogewogICAgIGlmICghbV9yZWNvcmRTdGFjay5pc0VtcHR5
KCkpIHsKICAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSBlbnRyeSA9IG1fcmVjb3JkU3RhY2su
bGFzdCgpOwotICAgICAgICBlbnRyeS5kYXRhLnNldCgiZW5kTGluZSIsIGVuZExpbmUpOworICAg
ICAgICBlbnRyeS5kYXRhLT5zZXROdW1iZXIoImVuZExpbmUiLCBlbmRMaW5lKTsKICAgICAgICAg
ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFBhcnNlSFRNTFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAg
ICAgfQogfQpAQCAtMTQ5LDIyICsxNTAsMjIgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpkaWRXcml0ZUhUTUwodW5zaWduZWQgaW50IGVuZExpbmUpCiB2b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmRpZEluc3RhbGxUaW1lcihpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wg
c2luZ2xlU2hvdCkKIHsKICAgICBwdXNoR0NFdmVudFJlY29yZHMoKTsKLSAgICBTY3JpcHRPYmpl
Y3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKG1f
ZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpKTsKLSAgICByZWNvcmQuc2V0KCJkYXRhIiwg
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKG1fZnJvbnRlbmQs
IHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQo
V1RGOjpjdXJyZW50VGltZU1TKCkpOworICAgIHJlY29yZC0+c2V0KCJkYXRhIiwgVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKHRpbWVySWQsIHRpbWVvdXQsIHNp
bmdsZVNob3QpKTsKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKHJlY29yZCwgVGltZXJJbnN0YWxs
VGltZWxpbmVSZWNvcmRUeXBlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRSZW1vdmVUaW1lcihpbnQgdGltZXJJZCkKIHsKICAgICBwdXNoR0NFdmVudFJlY29yZHMoKTsK
LSAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVH
ZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpKTsKLSAgICByZWNv
cmQuc2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJE
YXRhKG1fZnJvbnRlbmQsIHRpbWVySWQpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoV1RGOjpj
dXJyZW50VGltZU1TKCkpOworICAgIHJlY29yZC0+c2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKHRpbWVySWQpKTsKICAgICBhZGRSZWNvcmRU
b1RpbWVsaW5lKHJlY29yZCwgVGltZXJSZW1vdmVUaW1lbGluZVJlY29yZFR5cGUpOwogfQogCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxGaXJlVGltZXIoaW50IHRpbWVySWQpCiB7
Ci0gICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5l
cmljVGltZXJEYXRhKG1fZnJvbnRlbmQsIHRpbWVySWQpLCBUaW1lckZpcmVUaW1lbGluZVJlY29y
ZFR5cGUpOyAKKyAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNUaW1lckRhdGEodGltZXJJZCksIFRpbWVyRmlyZVRpbWVsaW5lUmVjb3JkVHlw
ZSk7IAogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEZpcmVUaW1lcigpCkBA
IC0xNzQsNyArMTc1LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRGaXJlVGlt
ZXIoKQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxDaGFuZ2VYSFJSZWFkeVN0
YXRlKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSkKIHsKLSAgICBwdXNoQ3VycmVu
dFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VE
YXRhKG1fZnJvbnRlbmQsIHVybCwgcmVhZHlTdGF0ZSksIFhIUlJlYWR5U3RhdGVDaGFuZ2VSZWNv
cmRUeXBlKTsKKyAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKHVybCwgcmVhZHlTdGF0ZSksIFhIUlJlYWR5U3Rh
dGVDaGFuZ2VSZWNvcmRUeXBlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRDaGFuZ2VYSFJSZWFkeVN0YXRlKCkKQEAgLTE4NCw3ICsxODUsNyBAQCB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmRpZENoYW5nZVhIUlJlYWR5U3RhdGUoKQogCiB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OndpbGxMb2FkWEhSKGNvbnN0IFN0cmluZyYgdXJsKSAKIHsKLSAgICBw
dXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRh
KG1fZnJvbnRlbmQsIHVybCksIFhIUkxvYWRSZWNvcmRUeXBlKTsKKyAgICBwdXNoQ3VycmVudFJl
Y29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRhKHVybCksIFhIUkxv
YWRSZWNvcmRUeXBlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRMb2Fk
WEhSKCkKQEAgLTE5NCw3ICsxOTUsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRp
ZExvYWRYSFIoKQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxFdmFsdWF0ZVNj
cmlwdChjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpCiB7Ci0gICAgcHVzaEN1cnJl
bnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEo
bV9mcm9udGVuZCwgdXJsLCBsaW5lTnVtYmVyKSwgRXZhbHVhdGVTY3JpcHRUaW1lbGluZVJlY29y
ZFR5cGUpOworICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlRXZhbHVhdGVTY3JpcHREYXRhKHVybCwgbGluZU51bWJlciksIEV2YWx1YXRlU2NyaXB0VGlt
ZWxpbmVSZWNvcmRUeXBlKTsKIH0KICAgICAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkRXZhbHVhdGVTY3JpcHQoKQpAQCAtMjE1LDE2ICsyMTYsMTYgQEAgdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50Ojp3aWxsU2VuZFJlc291cmNlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGIKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcHVz
aEdDRXZlbnRSZWNvcmRzKCk7Ci0gICAgU2NyaXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChtX2Zyb250ZW5kLCBXVEY6OmN1cnJlbnRU
aW1lTVMoKSk7Ci0gICAgcmVjb3JkLnNldCgiZGF0YSIsIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEobV9mcm9udGVuZCwgaWRlbnRpZmllciwgaXNN
YWluUmVzb3VyY2UsIHJlcXVlc3QpKTsKLSAgICByZWNvcmQuc2V0KCJ0eXBlIiwgUmVzb3VyY2VT
ZW5kUmVxdWVzdFRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKFdU
Rjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICByZWNvcmQtPnNldCgiZGF0YSIsIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoaWRlbnRpZmllciwgaXNN
YWluUmVzb3VyY2UsIHJlcXVlc3QpKTsKKyAgICByZWNvcmQtPnNldE51bWJlcigidHlwZSIsIFJl
c291cmNlU2VuZFJlcXVlc3RUaW1lbGluZVJlY29yZFR5cGUpOwogICAgIHNldEhlYXBTaXplU3Rh
dGlzdGljKHJlY29yZCk7CiAgICAgbV9mcm9udGVuZC0+YWRkUmVjb3JkVG9UaW1lbGluZShyZWNv
cmQpOwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxSZWNlaXZlUmVzb3Vy
Y2VEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBwdXNoQ3VycmVudFJlY29y
ZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEobV9mcm9u
dGVuZCwgaWRlbnRpZmllciksIFJlY2VpdmVSZXNvdXJjZURhdGFUaW1lbGluZVJlY29yZFR5cGUp
OworICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVj
ZWl2ZVJlc291cmNlRGF0YShpZGVudGlmaWVyKSwgUmVjZWl2ZVJlc291cmNlRGF0YVRpbWVsaW5l
UmVjb3JkVHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUmVjZWl2
ZVJlc291cmNlRGF0YSgpCkBAIC0yMzQsNyArMjM1LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRSZWNlaXZlUmVzb3VyY2VEYXRhKCkKICAgICAKIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgcHVzaEN1
cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVS
ZXNwb25zZURhdGEobV9mcm9udGVuZCwgaWRlbnRpZmllciwgcmVzcG9uc2UpLCBSZXNvdXJjZVJl
Y2VpdmVSZXNwb25zZVRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgcHVzaEN1cnJlbnRSZWNvcmQo
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEo
aWRlbnRpZmllciwgcmVzcG9uc2UpLCBSZXNvdXJjZVJlY2VpdmVSZXNwb25zZVRpbWVsaW5lUmVj
b3JkVHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUmVjZWl2ZVJl
c291cmNlUmVzcG9uc2UoKQpAQCAtMjQ1LDkgKzI0Niw5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UoKQogdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpkaWRGaW5pc2hMb2FkaW5nUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBib29sIGRpZEZhaWwpCiB7CiAgICAgcHVzaEdDRXZlbnRSZWNvcmRzKCk7Ci0gICAgU2Ny
aXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZChtX2Zyb250ZW5kLCBXVEY6OmN1cnJlbnRUaW1lTVMoKSk7Ci0gICAgcmVjb3JkLnNldCgi
ZGF0YSIsIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKG1f
ZnJvbnRlbmQsIGlkZW50aWZpZXIsIGRpZEZhaWwpKTsKLSAgICByZWNvcmQuc2V0KCJ0eXBlIiwg
UmVzb3VyY2VGaW5pc2hUaW1lbGluZVJlY29yZFR5cGUpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29y
ZChXVEY6OmN1cnJlbnRUaW1lTVMoKSk7CisgICAgcmVjb3JkLT5zZXQoImRhdGEiLCBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShpZGVudGlmaWVyLCBkaWRG
YWlsKSk7CisgICAgcmVjb3JkLT5zZXROdW1iZXIoInR5cGUiLCBSZXNvdXJjZUZpbmlzaFRpbWVs
aW5lUmVjb3JkVHlwZSk7CiAgICAgc2V0SGVhcFNpemVTdGF0aXN0aWMocmVjb3JkKTsKICAgICBt
X2Zyb250ZW5kLT5hZGRSZWNvcmRUb1RpbWVsaW5lKHJlY29yZCk7CiB9CkBAIC0yNTUsMjIgKzI1
NiwyMiBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmdSZXNv
dXJjZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmRpZE1hcmtUaW1lbGluZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcHVzaEdD
RXZlbnRSZWNvcmRzKCk7Ci0gICAgU2NyaXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChtX2Zyb250ZW5kLCBXVEY6OmN1cnJlbnRUaW1l
TVMoKSk7Ci0gICAgcmVjb3JkLnNldCgiZGF0YSIsIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlTWFya1RpbWVsaW5lRGF0YShtX2Zyb250ZW5kLCBtZXNzYWdlKSk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5l
cmljUmVjb3JkKFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICByZWNvcmQtPnNldCgiZGF0YSIs
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya1RpbWVsaW5lRGF0YShtZXNzYWdlKSk7
CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShyZWNvcmQsIE1hcmtUaW1lbGluZVJlY29yZFR5cGUp
OwogfQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtET01Db250ZW50RXZl
bnQoKQogewogICAgIHB1c2hHQ0V2ZW50UmVjb3JkcygpOwotICAgIFNjcmlwdE9iamVjdCByZWNv
cmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVu
ZCwgV1RGOjpjdXJyZW50VGltZU1TKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
Y29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChXVEY6OmN1
cnJlbnRUaW1lTVMoKSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShyZWNvcmQsIE1hcmtET01D
b250ZW50RXZlbnRUeXBlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRN
YXJrTG9hZEV2ZW50KCkKIHsKICAgICBwdXNoR0NFdmVudFJlY29yZHMoKTsKLSAgICBTY3JpcHRP
YmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3Jk
KG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNv
cmQoV1RGOjpjdXJyZW50VGltZU1TKCkpOwogICAgIGFkZFJlY29yZFRvVGltZWxpbmUocmVjb3Jk
LCBNYXJrTG9hZEV2ZW50VHlwZSk7CiB9CiAKQEAgLTI4NiwyNSArMjg3LDI1IEBAIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuCiAgICAgbV9mcm9udGVuZCA9IGZyb250ZW5kOwogfQogCi12b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoU2NyaXB0T2JqZWN0IHJl
Y29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29y
ZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7Ci0gICAgcmVjb3JkLnNldCgidHlwZSIsIHR5
cGUpOworICAgIHJlY29yZC0+c2V0TnVtYmVyKCJ0eXBlIiwgdHlwZSk7CiAgICAgc2V0SGVhcFNp
emVTdGF0aXN0aWMocmVjb3JkKTsKICAgICBpZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpCiAg
ICAgICAgIG1fZnJvbnRlbmQtPmFkZFJlY29yZFRvVGltZWxpbmUocmVjb3JkKTsKICAgICBlbHNl
IHsKICAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxh
c3QoKTsKLSAgICAgICAgcGFyZW50LmNoaWxkcmVuLnNldChwYXJlbnQuY2hpbGRyZW4ubGVuZ3Ro
KCksIHJlY29yZCk7CisgICAgICAgIHBhcmVudC5jaGlsZHJlbi0+cHVzaChyZWNvcmQpOwogICAg
IH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRIZWFwU2l6ZVN0YXRpc3Rp
YyhTY3JpcHRPYmplY3QgcmVjb3JkKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRI
ZWFwU2l6ZVN0YXRpc3RpYyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKQogewog
ICAgIHNpemVfdCB1c2VkSGVhcFNpemUgPSAwOwogICAgIHNpemVfdCB0b3RhbEhlYXBTaXplID0g
MDsKICAgICBTY3JpcHRHQ0V2ZW50OjpnZXRIZWFwU2l6ZSh1c2VkSGVhcFNpemUsIHRvdGFsSGVh
cFNpemUpOwotICAgIHJlY29yZC5zZXQoInVzZWRIZWFwU2l6ZSIsIHVzZWRIZWFwU2l6ZSk7Ci0g
ICAgcmVjb3JkLnNldCgidG90YWxIZWFwU2l6ZSIsIHRvdGFsSGVhcFNpemUpOworICAgIHJlY29y
ZC0+c2V0TnVtYmVyKCJ1c2VkSGVhcFNpemUiLCB1c2VkSGVhcFNpemUpOworICAgIHJlY29yZC0+
c2V0TnVtYmVyKCJ0b3RhbEhlYXBTaXplIiwgdG90YWxIZWFwU2l6ZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQpAQCAtMzE2LDE5ICszMTcsMjAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUp
CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgZW50cnkgPSBtX3JlY29yZFN0YWNrLmxhc3Qo
KTsKICAgICAgICAgbV9yZWNvcmRTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIEFTU0VSVChl
bnRyeS50eXBlID09IHR5cGUpOwotICAgICAgICBlbnRyeS5yZWNvcmQuc2V0KCJkYXRhIiwgZW50
cnkuZGF0YSk7Ci0gICAgICAgIGVudHJ5LnJlY29yZC5zZXQoImNoaWxkcmVuIiwgZW50cnkuY2hp
bGRyZW4pOwotICAgICAgICBlbnRyeS5yZWNvcmQuc2V0KCJlbmRUaW1lIiwgV1RGOjpjdXJyZW50
VGltZU1TKCkpOworICAgICAgICBlbnRyeS5yZWNvcmQtPnNldCgiZGF0YSIsIGVudHJ5LmRhdGEp
OworICAgICAgICBlbnRyeS5yZWNvcmQtPnNldCgiY2hpbGRyZW4iLCBlbnRyeS5jaGlsZHJlbik7
CisgICAgICAgIGVudHJ5LnJlY29yZC0+c2V0TnVtYmVyKCJlbmRUaW1lIiwgV1RGOjpjdXJyZW50
VGltZU1TKCkpOwogICAgICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKGVudHJ5LnJlY29yZCwgdHlw
ZSk7CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50
UmVjb3JkKFNjcmlwdE9iamVjdCBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3ZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewogICAgIHB1c2hH
Q0V2ZW50UmVjb3JkcygpOwotICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RGOjpjdXJyZW50VGlt
ZU1TKCkpOwotICAgIG1fcmVjb3JkU3RhY2suYXBwZW5kKFRpbWVsaW5lUmVjb3JkRW50cnkocmVj
b3JkLCBkYXRhLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpLCB0eXBlKSk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVHZW5lcmljUmVjb3JkKFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICBtX3JlY29yZFN0YWNr
LmFwcGVuZChUaW1lbGluZVJlY29yZEVudHJ5KHJlY29yZCwgZGF0YSwgSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpLCB0eXBlKSk7CiB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmgKaW5kZXggNGM1YjkzOS4uOWY4ZmFiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaApAQCAtMzQsMTcgKzM0LDE1IEBACiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNj
cmlwdEdDRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNs
dWRlICJTY3JpcHRPYmplY3QuaCIKLSNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXZlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZDsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCkBAIC0xMzIsMjIgKzEzMCwyMiBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFRpbWVsaW5lUmVjb3JkRW50cnkgewotICAgICAg
ICBUaW1lbGluZVJlY29yZEVudHJ5KFNjcmlwdE9iamVjdCByZWNvcmQsIFNjcmlwdE9iamVjdCBk
YXRhLCBTY3JpcHRBcnJheSBjaGlsZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCisgICAg
ICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29y
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGNoaWxkcmVuLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKICAgICAgICAgICAgIDog
cmVjb3JkKHJlY29yZCksIGRhdGEoZGF0YSksIGNoaWxkcmVuKGNoaWxkcmVuKSwgdHlwZSh0eXBl
KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgU2NyaXB0T2JqZWN0IHJlY29yZDsKLSAg
ICAgICAgU2NyaXB0T2JqZWN0IGRhdGE7Ci0gICAgICAgIFNjcmlwdEFycmF5IGNoaWxkcmVuOwor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGE7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hp
bGRyZW47CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAgICAgICAg
IAotICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoU2NyaXB0T2JqZWN0LCBUaW1lbGluZVJlY29y
ZFR5cGUpOwotICAgIHZvaWQgc2V0SGVhcFNpemVTdGF0aXN0aWMoU2NyaXB0T2JqZWN0IHJlY29y
ZCk7CisgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4sIFRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgdm9pZCBzZXRIZWFwU2l6ZVN0YXRpc3RpYyhQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKTsKICAgICAgICAgCiAgICAgdm9pZCBk
aWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlKTsKIAotICAgIHZvaWQg
YWRkUmVjb3JkVG9UaW1lbGluZShTY3JpcHRPYmplY3QsIFRpbWVsaW5lUmVjb3JkVHlwZSk7Cisg
ICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piwg
VGltZWxpbmVSZWNvcmRUeXBlKTsKIAogICAgIHZvaWQgcHVzaEdDRXZlbnRSZWNvcmRzKCk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmMyNmMyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBlc2NhcGVDaGFyKGNvbnN0IGNo
YXIgYywgU3RyaW5nKiBkc3QpIHsKKyAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXGInOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcYiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXGYnOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcZiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXG4nOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXHInOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcciIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXHQnOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcdCIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXFwnOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcXFwiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyInOgorICAg
ICAgZHN0LT5hcHBlbmQoIlxcXCIiKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRv
dWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBTdHJpbmcqIGRzdCkgeworICAgIGRz
dC0+YXBwZW5kKCciJyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ci5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBzdHJbaV07CisgICAgICAgIGlmICghZXNjYXBl
Q2hhcihjLCBkc3QpKSB7CisgICAgICAgICAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYgfHwgYyA9
PSAnPCcgfHwgYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBFc2NhcGluZyA8LCA+
IHRvIHByZXZlbnQgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICAgICAgICAgICAgICAvLyAyLiBUZWNo
bmljYWxseSwgd2UgY291bGQgYWxzbyBwYXNzIHRocm91Z2ggYyA+IDEyNiBhcyBVVEY4LCBidXQg
dGhpcworICAgICAgICAgICAgICAgIC8vICAgIGlzIGFsc28gb3B0aW9uYWwuICBJdCB3b3VsZCBh
bHNvIGJlIGEgcGFpbiB0byBpbXBsZW1lbnQgaGVyZS4KKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYXNfdWludCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oYyk7CisgICAgICAgICAg
ICAgICAgZHN0LT5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlxcdSUwNFgiLCBhc191aW50KSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBkc3QtPmFwcGVuZChjKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBkc3QtPmFwcGVuZCgnIicpOworfQorCitTdHJpbmcgSW5zcGVjdG9y
VmFsdWU6OnRvSlNPTlN0cmluZygpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICB3cml0ZUpT
T04oJnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbnNwZWN0b3JWYWx1
ZTo6d3JpdGVKU09OKFN0cmluZyogb3V0cHV0KQoreworICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgY2FzZSBUeXBlTnVsbDogb3V0cHV0LT5hcHBlbmQoIm51bGwiKTsgYnJlYWs7CisgICAgY2Fz
ZSBUeXBlQm9vbGVhbjogb3V0cHV0LT5hcHBlbmQobV9ib29sVmFsdWUgPyAidHJ1ZSIgOiAiZmFs
c2UiKTsgYnJlYWs7CisgICAgY2FzZSBUeXBlRG91YmxlOiBvdXRwdXQtPmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiJWYiLCBtX2RvdWJsZVZhbHVlKSk7IGJyZWFrOworICAgIGNhc2UgVHlwZVN0cmlu
ZzogZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsgYnJlYWs7CisgICAg
ZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3Rv
ck9iamVjdDo6c2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAg
bV9kYXRhLnNldChuYW1lLCBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yT2JqZWN0OjpzZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUg
dmFsdWUpCit7CisgICAgbV9kYXRhLnNldChuYW1lLCBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0OjpzZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fZGF0YS5zZXQobmFtZSwgSW5z
cGVjdG9yVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCit2b2lkIEluc3BlY3Rvck9iamVjdDo6
c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUp
Cit7CisgICAgbV9kYXRhLnNldChuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT2Jq
ZWN0Ojp3cml0ZUpTT04oU3RyaW5nKiBvdXRwdXQpCit7CisgICAgb3V0cHV0LT5hcHBlbmQoInsi
KTsKKyAgICBmb3IgKERpY3Rpb25hcnk6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0
ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQgIT0gbV9kYXRhLmJlZ2lu
KCkpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiLCIpOworICAgICAgICBkb3VibGVRdW90
ZVN0cmluZyhpdC0+Zmlyc3QsIG91dHB1dCk7CisgICAgICAgIG91dHB1dC0+YXBwZW5kKCI6Iik7
CisgICAgICAgIGl0LT5zZWNvbmQtPndyaXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRw
dXQtPmFwcGVuZCgifSIpOworfQorCit2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoQm9vbChib29s
IHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh2YWx1
ZSkpOworfQorCit2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoTnVtYmVyKGRvdWJsZSB2YWx1ZSkK
K3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclZhbHVlOjpjcmVhdGUodmFsdWUpKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQor
Cit2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEluc3BlY3RvckFy
cmF5Ojp3cml0ZUpTT04oU3RyaW5nKiBvdXRwdXQpCit7CisgICAgb3V0cHV0LT5hcHBlbmQoIlsi
KTsKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID46Oml0ZXJhdG9yIGl0
ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgeworICAgICAgICBp
ZiAoaXQgIT0gbV9kYXRhLmJlZ2luKCkpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiLCIp
OworICAgICAgICAoKml0KS0+d3JpdGVKU09OKG91dHB1dCk7CisgICAgfQorICAgIG91dHB1dC0+
YXBwZW5kKCJdIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzI3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SW5zcGVjdG9yVmFsdWVfaAorI2RlZmluZSBJbnNwZWN0b3JWYWx1ZV9oCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFz
cyBJbnNwZWN0b3JWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7Citw
dWJsaWM6CisgICAgSW5zcGVjdG9yVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9CisgICAg
dmlydHVhbCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBudWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yVmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGNyZWF0ZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBjcmVhdGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JWYWx1ZSh2YWx1ZSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVmFs
dWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBUeXBlTnVs
bCA9IDAsCisgICAgICAgIFR5cGVCb29sZWFuLAorICAgICAgICBUeXBlRG91YmxlLAorICAgICAg
ICBUeXBlU3RyaW5nLAorICAgICAgICBUeXBlT2JqZWN0LAorICAgICAgICBUeXBlQXJyYXkKKyAg
ICB9IFR5cGU7CisKKyAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIFN0
cmluZyB0b0pTT05TdHJpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZyog
b3V0cHV0KTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUg
dHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW5zcGVj
dG9yVmFsdWUoYm9vbCB2YWx1ZSkgOiBtX3R5cGUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2
YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoZG91YmxlIHZhbHVlKSA6IG1f
dHlwZShUeXBlRG91YmxlKSwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQg
SW5zcGVjdG9yVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgOiBtX3R5cGUoVHlwZVN0cmluZyks
IG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQorCisgICAgVHlwZSBtX3R5cGU7CisKKyAgICB1bmlv
biB7CisgICAgICAgIGJvb2wgbV9ib29sVmFsdWU7CisgICAgICAgIGRvdWJsZSBtX2RvdWJsZVZh
bHVlOworICAgIH07CisgICAgU3RyaW5nIG1fc3RyaW5nVmFsdWU7Cit9OworCitjbGFzcyBJbnNw
ZWN0b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yT2JqZWN0KCkpOworICAgIH0KKyAgICB+SW5zcGVj
dG9yT2JqZWN0KCkgeyB9CisKKyAgICB2b2lkIHNldEJvb2woY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKTsKKyAgICB2b2lkIHNldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7Cisg
ICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KTsKKworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3RyaW5nKiBvdXRwdXQpOworCitwcml2
YXRlOgorICAgIEluc3BlY3Rvck9iamVjdCgpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU9iamVjdCkg
eyB9CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiA+
IERpY3Rpb25hcnk7CisgICAgRGljdGlvbmFyeSBtX2RhdGE7Cit9OworCitjbGFzcyBJbnNwZWN0
b3JBcnJheSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc3BlY3RvckFycmF5KCkpOworICAgIH0KKyAgICB+SW5zcGVjdG9yQXJy
YXkoKSB7IH0KKworICAgIHZvaWQgcHVzaEJvb2woYm9vbCk7CisgICAgdm9pZCBwdXNoTnVtYmVy
KGRvdWJsZSk7CisgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
cHVzaChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
eyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihT
dHJpbmcqIG91dHB1dCk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQXJyYXkoKSA6IEluc3Bl
Y3RvclZhbHVlKFR5cGVBcnJheSkgeyB9CisgICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gPiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKaW5kZXggMDU0MGRhZC4u
Y2Q0NjAyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3Bw
CkBAIC0zNSwxNTYgKzM1LDE1NiBAQAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRlICJT
Y3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TY3JpcHRPYmplY3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVH
ZW5lcmljUmVjb3JkKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgZG91YmxlIHN0YXJ0VGlt
ZSkKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
R2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lKQogewotICAgIFNjcmlwdE9iamVjdCByZWNv
cmQgPSBmcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7Ci0gICAgcmVjb3JkLnNldCgic3RhcnRU
aW1lIiwgc3RhcnRUaW1lKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlY29yZC0+c2V0TnVtYmVyKCJzdGFydFRp
bWUiLCBzdGFydFRpbWUpOwogCiAgICAgU3RyaW5nIHNvdXJjZU5hbWU7CiAgICAgaW50IHNvdXJj
ZUxpbmVOdW1iZXI7CiAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsKICAgICBpZiAoU2NyaXB0Q2Fs
bFN0YWNrOjpjYWxsTG9jYXRpb24oJnNvdXJjZU5hbWUsICZzb3VyY2VMaW5lTnVtYmVyLCAmZnVu
Y3Rpb25OYW1lKSAmJiBzb3VyY2VOYW1lICE9ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgIHJlY29y
ZC5zZXQoImNhbGxlclNjcmlwdE5hbWUiLCBzb3VyY2VOYW1lKTsKLSAgICAgICAgcmVjb3JkLnNl
dCgiY2FsbGVyU2NyaXB0TGluZSIsIHNvdXJjZUxpbmVOdW1iZXIpOwotICAgICAgICByZWNvcmQu
c2V0KCJjYWxsZXJGdW5jdGlvbk5hbWUiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZWNvcmQt
PnNldFN0cmluZygiY2FsbGVyU2NyaXB0TmFtZSIsIHNvdXJjZU5hbWUpOworICAgICAgICByZWNv
cmQtPnNldE51bWJlcigiY2FsbGVyU2NyaXB0TGluZSIsIHNvdXJjZUxpbmVOdW1iZXIpOworICAg
ICAgICByZWNvcmQtPnNldFN0cmluZygiY2FsbGVyRnVuY3Rpb25OYW1lIiwgZnVuY3Rpb25OYW1l
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlY29yZDsKIH0KIAotU2NyaXB0T2JqZWN0IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR0NFdmVudERhdGEoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kLCBjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpCitSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdDRXZlbnREYXRhKGNvbnN0IHNpemVf
dCB1c2VkSGVhcFNpemVEZWx0YSkKIHsKLSAgICBTY3JpcHRPYmplY3QgZGF0YSA9IGZyb250ZW5k
LT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICBkYXRhLnNldCgidXNlZEhlYXBTaXplRGVsdGEiLCB1
c2VkSGVhcFNpemVEZWx0YSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c2V0TnVtYmVyKCJ1c2VkSGVhcFNp
emVEZWx0YSIsIHVzZWRIZWFwU2l6ZURlbHRhKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotU2Ny
aXB0T2JqZWN0IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50
IHNjcmlwdExpbmUpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQg
c2NyaXB0TGluZSkKIHsKLSAgICBTY3JpcHRPYmplY3QgZGF0YSA9IGZyb250ZW5kLT5uZXdTY3Jp
cHRPYmplY3QoKTsKLSAgICBkYXRhLnNldCgic2NyaXB0TmFtZSIsIHNjcmlwdE5hbWUpOwotICAg
IGRhdGEuc2V0KCJzY3JpcHRMaW5lIiwgc2NyaXB0TGluZSk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c2V0
U3RyaW5nKCJzY3JpcHROYW1lIiwgc2NyaXB0TmFtZSk7CisgICAgZGF0YS0+c2V0TnVtYmVyKCJz
Y3JpcHRMaW5lIiwgc2NyaXB0TGluZSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVNjcmlwdE9i
amVjdCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCwgY29uc3QgRXZlbnQmIGV2ZW50KQorUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmVudERpc3BhdGNoRGF0
YShjb25zdCBFdmVudCYgZXZlbnQpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IGRhdGEgPSBmcm9udGVu
ZC0+bmV3U2NyaXB0T2JqZWN0KCk7Ci0gICAgZGF0YS5zZXQoInR5cGUiLCBldmVudC50eXBlKCku
c3RyaW5nKCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldFN0cmluZygidHlwZSIsIGV2ZW50LnR5cGUo
KS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVNjcmlwdE9iamVjdCBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEoSW5zcGVjdG9yRnJvbnRlbmQq
IGZyb250ZW5kLCBpbnQgdGltZXJJZCkKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJZCkKIHsKLSAg
ICBTY3JpcHRPYmplY3QgZGF0YSA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICBk
YXRhLnNldCgidGltZXJJZCIsIHRpbWVySWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldE51bWJlcigi
dGltZXJJZCIsIHRpbWVySWQpOwogICAgIHJldHVybiBkYXRhOwogfQogCi1TY3JpcHRPYmplY3Qg
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCwgaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNo
b3QpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNo
b3QpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IGRhdGEgPSBmcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0
KCk7Ci0gICAgZGF0YS5zZXQoInRpbWVySWQiLCB0aW1lcklkKTsKLSAgICBkYXRhLnNldCgidGlt
ZW91dCIsIHRpbWVvdXQpOwotICAgIGRhdGEuc2V0KCJzaW5nbGVTaG90Iiwgc2luZ2xlU2hvdCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgZGF0YS0+c2V0TnVtYmVyKCJ0aW1lcklkIiwgdGltZXJJZCk7CisgICAgZGF0
YS0+c2V0TnVtYmVyKCJ0aW1lb3V0IiwgdGltZW91dCk7CisgICAgZGF0YS0+c2V0Qm9vbCgic2lu
Z2xlU2hvdCIsIHNpbmdsZVNob3QpOwogICAgIHJldHVybiBkYXRhOwogfQogCi1TY3JpcHRPYmpl
Y3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlT
dGF0ZSkKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0
YXRlKQogewotICAgIFNjcmlwdE9iamVjdCBkYXRhID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVj
dCgpOwotICAgIGRhdGEuc2V0KCJ1cmwiLCB1cmwpOwotICAgIGRhdGEuc2V0KCJyZWFkeVN0YXRl
IiwgcmVhZHlTdGF0ZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwor
ICAgIGRhdGEtPnNldE51bWJlcigicmVhZHlTdGF0ZSIsIHJlYWR5U3RhdGUpOwogICAgIHJldHVy
biBkYXRhOwogfQogCi1TY3JpcHRPYmplY3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVY
SFJMb2FkRGF0YShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNvbnN0IFN0cmluZyYgdXJs
KQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVY
SFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBTY3JpcHRPYmplY3QgZGF0YSA9
IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAgICBkYXRhLnNldCgidXJsIiwgdXJsKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICAgcmV0dXJuIGRhdGE7
CiB9CiAKLVNjcmlwdE9iamVjdCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRl
U2NyaXB0RGF0YShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNvbnN0IFN0cmluZyYgdXJs
LCBkb3VibGUgbGluZU51bWJlcikgCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmIHVybCwg
ZG91YmxlIGxpbmVOdW1iZXIpIAogewotICAgIFNjcmlwdE9iamVjdCBkYXRhID0gZnJvbnRlbmQt
Pm5ld1NjcmlwdE9iamVjdCgpOwotICAgIGRhdGEuc2V0KCJ1cmwiLCB1cmwpOwotICAgIGRhdGEu
c2V0KCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcik7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c2V0U3RyaW5n
KCJ1cmwiLCB1cmwpOworICAgIGRhdGEtPnNldE51bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1i
ZXIpOwogICAgIHJldHVybiBkYXRhOwogfQogCi1TY3JpcHRPYmplY3QgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVNYXJrVGltZWxpbmVEYXRhKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSAKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya1RpbWVsaW5lRGF0YShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpIAogewotICAgIFNjcmlwdE9iamVjdCBkYXRhID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9i
amVjdCgpOwotICAgIGRhdGEuc2V0KCJtZXNzYWdlIiwgbWVzc2FnZSk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGF0
YS0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAK
LVNjcmlwdE9iamVjdCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3Vy
Y2VSZXF1ZXN0RGF0YShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNvbnN0IFN0cmluZyYg
dXJsKQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVTY2hlZHVsZVJlc291cmNlUmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiB1cmwpIAogewotICAg
IFNjcmlwdE9iamVjdCBkYXRhID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwotICAgIGRh
dGEuc2V0KCJ1cmwiLCB1cmwpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldFN0cmluZygidXJsIiwgdXJs
KTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotU2NyaXB0T2JqZWN0IFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEoSW5zcGVjdG9yRnJvbnRlbmQqIGZy
b250ZW5kLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGJvb2wgaXNNYWluUmVzb3VyY2UsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVzdERhdGEodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBib29sIGlzTWFpblJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IGRhdGEgPSBmcm9udGVuZC0+bmV3
U2NyaXB0T2JqZWN0KCk7Ci0gICAgZGF0YS5zZXQoImlkZW50aWZpZXIiLCBpZGVudGlmaWVyKTsK
LSAgICBkYXRhLnNldCgidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgZGF0YS5z
ZXQoInJlcXVlc3RNZXRob2QiLCByZXF1ZXN0Lmh0dHBNZXRob2QoKSk7Ci0gICAgZGF0YS5zZXQo
ImlzTWFpblJlc291cmNlIiwgaXNNYWluUmVzb3VyY2UpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldE51
bWJlcigiaWRlbnRpZmllciIsIGlkZW50aWZpZXIpOworICAgIGRhdGEtPnNldFN0cmluZygidXJs
IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CisgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0
TWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOworICAgIGRhdGEtPnNldEJvb2woImlzTWFp
blJlc291cmNlIiwgaXNNYWluUmVzb3VyY2UpOwogICAgIHJldHVybiBkYXRhOwogfQogCi1TY3Jp
cHRPYmplY3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNw
b25zZURhdGEoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNw
b25zZURhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKLSAgICBTY3JpcHRPYmplY3QgZGF0YSA9IGZyb250ZW5kLT5uZXdTY3Jp
cHRPYmplY3QoKTsKLSAgICBkYXRhLnNldCgiaWRlbnRpZmllciIsIGlkZW50aWZpZXIpOwotICAg
IGRhdGEuc2V0KCJzdGF0dXNDb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAg
ZGF0YS5zZXQoIm1pbWVUeXBlIiwgcmVzcG9uc2UubWltZVR5cGUoKSk7Ci0gICAgZGF0YS5zZXQo
ImV4cGVjdGVkQ29udGVudExlbmd0aCIsIHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgp
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBkYXRhLT5zZXROdW1iZXIoImlkZW50aWZpZXIiLCBpZGVudGlmaWVyKTsK
KyAgICBkYXRhLT5zZXROdW1iZXIoInN0YXR1c0NvZGUiLCByZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpKTsKKyAgICBkYXRhLT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgcmVzcG9uc2UubWltZVR5cGUo
KSk7CisgICAgZGF0YS0+c2V0TnVtYmVyKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiLCByZXNwb25z
ZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVNjcmlw
dE9iamVjdCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgYm9v
bCBkaWRGYWlsKQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVSZXNvdXJjZUZpbmlzaERhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBib29s
IGRpZEZhaWwpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IGRhdGEgPSBmcm9udGVuZC0+bmV3U2NyaXB0
T2JqZWN0KCk7Ci0gICAgZGF0YS5zZXQoImlkZW50aWZpZXIiLCBpZGVudGlmaWVyKTsKLSAgICBk
YXRhLnNldCgiZGlkRmFpbCIsIGRpZEZhaWwpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldE51bWJlcigi
aWRlbnRpZmllciIsIGlkZW50aWZpZXIpOworICAgIGRhdGEtPnNldEJvb2woImRpZEZhaWwiLCBk
aWRGYWlsKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotU2NyaXB0T2JqZWN0IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YShJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgU2NyaXB0T2JqZWN0IGRhdGEgPSBmcm9udGVu
ZC0+bmV3U2NyaXB0T2JqZWN0KCk7Ci0gICAgZGF0YS5zZXQoImlkZW50aWZpZXIiLCBpZGVudGlm
aWVyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBkYXRhLT5zZXROdW1iZXIoImlkZW50aWZpZXIiLCBpZGVudGlmaWVy
KTsKICAgICByZXR1cm4gZGF0YTsKIH0KICAgICAKLVNjcmlwdE9iamVjdCBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFNj
cmlwdE9iamVjdCBkYXRhID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwotICAgIGRhdGEu
c2V0KCJ4IiwgcmVjdC54KCkpOwotICAgIGRhdGEuc2V0KCJ5IiwgcmVjdC55KCkpOwotICAgIGRh
dGEuc2V0KCJ3aWR0aCIsIHJlY3Qud2lkdGgoKSk7Ci0gICAgZGF0YS5zZXQoImhlaWdodCIsIHJl
Y3QuaGVpZ2h0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRhdGEtPnNldE51bWJlcigieCIsIHJlY3QueCgpKTsK
KyAgICBkYXRhLT5zZXROdW1iZXIoInkiLCByZWN0LnkoKSk7CisgICAgZGF0YS0+c2V0TnVtYmVy
KCJ3aWR0aCIsIHJlY3Qud2lkdGgoKSk7CisgICAgZGF0YS0+c2V0TnVtYmVyKCJoZWlnaHQiLCBy
ZWN0LmhlaWdodCgpKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAotU2NyaXB0T2JqZWN0IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YShJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2lnbmVkIGludCBzdGFydExpbmUpCitS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNl
SFRNTERhdGEodW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSkKIHsK
LSAgICBTY3JpcHRPYmplY3QgZGF0YSA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKLSAg
ICBkYXRhLnNldCgibGVuZ3RoIiwgbGVuZ3RoKTsKLSAgICBkYXRhLnNldCgic3RhcnRMaW5lIiwg
c3RhcnRMaW5lKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBkYXRhLT5zZXROdW1iZXIoImxlbmd0aCIsIGxlbmd0aCk7
CisgICAgZGF0YS0+c2V0TnVtYmVyKCJzdGFydExpbmUiLCBzdGFydExpbmUpOwogICAgIHJldHVy
biBkYXRhOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29y
ZEZhY3RvcnkuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oCmlu
ZGV4IGY5MDVlY2MuLjZjMmI5NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3Jk
RmFjdG9yeS5oCkBAIC0zNyw0NyArMzcsNDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CisgICAgY2xhc3MgSW5z
cGVjdG9yT2JqZWN0OwogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0gICAgY2xhc3MgU2NyaXB0T2JqZWN0
OwogCiAgICAgY2xhc3MgVGltZWxpbmVSZWNvcmRGYWN0b3J5IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRlR2VuZXJpY1JlY29yZChJbnNwZWN0b3JGcm9u
dGVuZCosIGRvdWJsZSBzdGFydFRpbWUpOworICAgICAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lKTsKIAotICAgICAg
ICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZUdDRXZlbnREYXRhKEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCwgY29uc3Qgc2l6ZV90IHVzZWRIZWFwU2l6ZURlbHRhKTsKKyAgICAgICAgc3Rh
dGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdDRXZlbnREYXRhKGNvbnN0IHNpemVf
dCB1c2VkSGVhcFNpemVEZWx0YSk7CiAKLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVh
dGVGdW5jdGlvbkNhbGxEYXRhKEluc3BlY3RvckZyb250ZW5kKiwgY29uc3QgU3RyaW5nJiBzY3Jp
cHROYW1lLCBpbnQgc2NyaXB0TGluZSk7CisgICAgICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwg
aW50IHNjcmlwdExpbmUpOwogCi0gICAgICAgIHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRlRXZl
bnREaXNwYXRjaERhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCBjb25zdCBFdmVudCYpOworICAgICAg
ICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlRXZlbnREaXNwYXRjaERhdGEo
Y29uc3QgRXZlbnQmKTsKIAotICAgICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZUdlbmVy
aWNUaW1lckRhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCBpbnQgdGltZXJJZCk7CisgICAgICAgIHN0
YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0
aW1lcklkKTsKIAotICAgICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZVRpbWVySW5zdGFs
bERhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wg
c2luZ2xlU2hvdCk7CisgICAgICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGVUaW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVT
aG90KTsKIAotICAgICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZVhIUlJlYWR5U3RhdGVD
aGFuZ2VEYXRhKEluc3BlY3RvckZyb250ZW5kKiwgY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFk
eVN0YXRlKTsKKyAgICAgICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhI
UlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSk7
CiAKLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVhdGVYSFJMb2FkRGF0YShJbnNwZWN0
b3JGcm9udGVuZCosIGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICAgICAgc3RhdGljIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmFs
dWF0ZVNjcmlwdERhdGEoY29uc3QgU3RyaW5nJiwgZG91YmxlIGxpbmVOdW1iZXIpOworICAgICAg
ICAKKyAgICAgICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZU1hcmtUaW1l
bGluZURhdGEoY29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBj
cmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCBjb25zdCBTdHJpbmcm
LCBkb3VibGUgbGluZU51bWJlcik7Ci0KLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVh
dGVNYXJrVGltZWxpbmVEYXRhKEluc3BlY3RvckZyb250ZW5kKiwgY29uc3QgU3RyaW5nJik7Ci0K
LSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0
YShJbnNwZWN0b3JGcm9udGVuZCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAg
c3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3RE
YXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKICAgICAgICAgICAgIGJvb2wgaXNNYWluUmVz
b3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCi0gICAgICAgIHN0YXRpYyBTY3JpcHRP
YmplY3QgY3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKEluc3BlY3RvckZyb250ZW5k
KiwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVhdGVS
ZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0
YShjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZVJl
Y2VpdmVSZXNvdXJjZURhdGEoSW5zcGVjdG9yRnJvbnRlbmQqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpOworICAgICAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVz
b3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgICAgIHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRl
UmVzb3VyY2VGaW5pc2hEYXRhKEluc3BlY3RvckZyb250ZW5kKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBib29sIGRpZEZhaWwpOworICAgICAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gY3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
OworICAgICAgICAKKyAgICAgICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZVJlc291cmNlRmluaXNoRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGJvb2wgZGlkRmFp
bCk7CiAKLSAgICAgICAgc3RhdGljIFNjcmlwdE9iamVjdCBjcmVhdGVQYWludERhdGEoSW5zcGVj
dG9yRnJvbnRlbmQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVQYWludERhdGEoY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAg
IHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRlUGFyc2VIVE1MRGF0YShJbnNwZWN0b3JGcm9udGVu
ZCosIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2lnbmVkIGludCBzdGFydExpbmUpOworICAgICAg
ICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNp
Z25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgc3RhcnRMaW5lKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkRmFjdG9yeSgpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDMzNzNjMDQuLjYwODhkNjEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTM0NCwxMCArMzQ0LDE3IEBAIFdlYkluc3Bl
Y3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAKICAgICBfYXR0cmlidXRlc1VwZGF0ZWQ6IGZ1
bmN0aW9uKG5vZGVJZCwgYXR0cnNBcnJheSkKICAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5s
b2coIl9hdHRyaWJ1dGVzVXBkYXRlZDogIiArIG5vZGVJZCk7CiAgICAgICAgIHZhciBub2RlID0g
dGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygibm9k
ZTogIiArIG5vZGUpOworICAgICAgICAvLyBFbGVtZW50OjphdHRyaWJ1dGVzIGdlbmVyYXRlcyBh
cnRpZmljaWFsIHNldEF0dHJpYnV0ZSBmb3IgInN0eWxlIiBhbmQgd2UgY3Jhc2ggYmVsb3cuCisg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBub2RlLl9z
ZXRBdHRyaWJ1dGVzUGF5bG9hZChhdHRyc0FycmF5KTsKICAgICAgICAgdmFyIGV2ZW50ID0ge3Rh
cmdldDogbm9kZX07CiAgICAgICAgIHRoaXMuZG9jdW1lbnQuX2ZpcmVEb21FdmVudCgiRE9NQXR0
ck1vZGlmaWVkIiwgZXZlbnQpOworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKCJET01BdHRyTW9k
aWZpZWQiKTsKICAgICB9LAogCiAgICAgbm9kZUZvcklkOiBmdW5jdGlvbihub2RlSWQpIHsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXggYzg1MzQ0
MC4uZTZmNDBlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFu
ZWwuanMKQEAgLTQ4Myw4ICs0ODMsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJv
dG90eXBlID0gewogICAgIF9hdHRyaWJ1dGVzVXBkYXRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLnJlY2VudGx5TW9kaWZpZWROb2Rlcy5wdXNoKHtub2RlOiBldmVudC50
YXJnZXQsIHVwZGF0ZWQ6IHRydWV9KTsKLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkKKyAgICAg
ICAgaWYgKHRoaXMudmlzaWJsZSkgewogICAgICAgICAgICAgdGhpcy5fdXBkYXRlTW9kaWZpZWRO
b2Rlc1Nvb24oKTsKKyAgICAgICAgICAgIGlmIChub2RlID09PSB0aGlzLmZvY3VzZWRET01Ob2Rl
KQorICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKHRydWUpOworICAgICAgICB9CiAg
ICAgfSwKIAogICAgIF9ub2RlSW5zZXJ0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5q
cwppbmRleCA1NDU2MDY5Li4zYTEyYWI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpAQCAtNTgsMTUgKzU4
LDExIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IGZhbHNlOwogICAgIH0sCiAKLSAgICBh
dHRhY2g6IGZ1bmN0aW9uKCkKKyAgICByZXF1ZXN0QXR0YWNoV2luZG93OiBmdW5jdGlvbigpCiAg
ICAgewogICAgIH0sCiAKLSAgICBkZXRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfSwKLQot
ICAgIHNlYXJjaDogZnVuY3Rpb24oc291cmNlUm93LCBxdWVyeSkKKyAgICByZXF1ZXN0RGV0YWNo
V2luZG93OiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAgLTc0LDEwICs3MCw2IEBAIFdl
Ykluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKICAgICB7
CiAgICAgfSwKIAotICAgIG1vdmVXaW5kb3dCeTogZnVuY3Rpb24oeCwgeSkKLSAgICB7Ci0gICAg
fSwKLQogICAgIGxvYWRlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LApAQCAtMTAwLDcgKzky
LDcgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0g
ewogICAgIHsKICAgICB9LAogCi0gICAgY2FuQXR0YWNoV2luZG93OiBmdW5jdGlvbigpCisgICAg
c2hvd0NvbnRleHRNZW51OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1Np
ZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQ
YW5lLmpzCmluZGV4IDM1ZDI1ZDQuLmI2ZTQzY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTE2NCw2ICsxNjQsNyBAQCBXZWJJ
bnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAgICAgX3JlYnVpbGRV
cGRhdGU6IGZ1bmN0aW9uKG5vZGUsIHN0eWxlcykKICAgICB7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2coc3R5bGVzLmZvbnRGYW1pbHkpOwogICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92
ZUNoaWxkcmVuKCk7CiAgICAgICAgIHRoaXMuX2NvbXB1dGVkU3R5bGVQYW5lLmJvZHlFbGVtZW50
LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIHZhciBzdHlsZVJ1bGVzID0gdGhpcy5fcmVidWls
ZFN0eWxlUnVsZXMobm9kZSwgc3R5bGVzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCmluZGV4IGY2YWU3OWQuLjAzZTAzNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNTY5LDYgKzU2OSwxMiBAQCBXZWJJbnNwZWN0b3IuZGlz
cGF0Y2ggPSBmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KGRlbGF5RGlzcGF0Y2gsIDApOwog
fQogCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlID0gZnVuY3Rpb24oc2VyaWFsaXplZE1l
c3NhZ2UpIHsKKyAgICBXZWJJbnNwZWN0b3IubG9nKCIgLS0tLTogIiArIHNlcmlhbGl6ZWRNZXNz
YWdlKTsKKyAgICB2YXIgbWVzc2FnZSA9IEpTT04ucGFyc2Uoc2VyaWFsaXplZE1lc3NhZ2UpOwor
ICAgIFdlYkluc3BlY3Rvci5kaXNwYXRjaC5hcHBseSh0aGlzLCBtZXNzYWdlKTsKK30KKwogV2Vi
SW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KQogewogICAgIGlmICh0aGlz
LmN1cnJlbnRQYW5lbCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56874</attachid>
            <date>2010-05-24 05:19:50 -0700</date>
            <delta_ts>2010-05-31 06:56:02 -0700</delta_ts>
            <desc>[patch] initial version.</desc>
            <filename>patch_1</filename>
            <type>text/plain</type>
            <size>32991</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTEzZWJjNi4uMzJhNjUwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wNS0yNCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBJbml0aWFsIGltcGxlbWVudGF0aW9u
IG9mIEluc3BlY3RvclZhbHVlcyBmb3IgbmF0aXZlIHNlcmlhbGl6YXRpb24gdG8gSlNPTi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MjA0CisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5leHA6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3Rv
ckZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kRGVsZWdhdGU6On5JbnNwZWN0b3JGcm9u
dGVuZERlbGVnYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjpkaXNwYXRjaE1lc3NhZ2VUb0luc3BlY3Rvcik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU09OQnVm
ZmVyOjpKU09OQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTT05CdWZmZXI6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpKU09OQnVmZmVyOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNPTkJ1ZmZlcjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpKU09OQnVmZmVy
OjpjaGVja0FwcGVuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQ2hhcik6CisgICAg
ICAgIChXZWJDb3JlOjpkb3VibGVRdW90ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYXNlVmFsdWU6OnRvSlNPTlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYXNlVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNl
VmFsdWU6OndyaXRlSlNPTk9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNl
VmFsdWU6OndyaXRlSlNPTkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VW
YWx1ZTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OmFzc2ln
bik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OmNsZWFyKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQmFzZVZhbHVlOjopOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFz
ZVZhbHVlOjpJbnNwZWN0b3JCYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFzZVZhbHVlOjp+SW5zcGVjdG9yQmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJhc2VWYWx1ZTo6dW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
c2VWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6SW5zcGVjdG9yVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXJyYXk6Okluc3BlY3RvckFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5OjpwdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFycmF5OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
T2JqZWN0OjpJbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2Jq
ZWN0OjpzZXQpOgorCiAyMDEwLTA1LTIzICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MDA2MC4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4
IGI1NGYyOGEuLmVlMzk1NGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMxNCw2ICsxMzE0LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCiAJV2Vi
Q29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9T
Y3JpcHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLkluc3Bl
Y3Rvci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCA1Y2RhODkzLi5k
MGJjYjI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMSwzICsxLDggQEAKK19fWk43V2ViQ29y
ZTE4SW5zcGVjdG9yQmFzZVZhbHVlNGluaXRFTlMwXzRUeXBlRQorX19aTjdXZWJDb3JlMThJbnNw
ZWN0b3JCYXNlVmFsdWU1Y2xlYXJFdgorX19aTjdXZWJDb3JlMThJbnNwZWN0b3JCYXNlVmFsdWU2
YXNzaWduRVJLUzBfCitfX1pON1dlYkNvcmUxOEluc3BlY3RvckJhc2VWYWx1ZTRpbml0RU5TMF80
VHlwZUUKK19fWk5LN1dlYkNvcmUxOEluc3BlY3RvckJhc2VWYWx1ZTEydG9KU09OU3RyaW5nRXYK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEwc2V0U2V0dGluZ0VSS05TXzZTdHJp
bmdFUzNfCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZURlYnVnZ2Vy
RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlUHJvZmlsZXJFYmIK
QEAgLTI2LDUgKzMxLDcgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsMTJtb3ZlV2luZG93QnlFZmYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDE3c2V0QXR0YWNoZWRXaW5kb3dFYgogX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodEVqCitfX1pO
N1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmRpc3BhdGNoTWVzc2FnZVRv
SW5zcGVjdG9yRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDE5cmVxdWVzdERldGFjaFdpbmRvd0V2CiBfX1pON1dlYkNvcmUyOEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwxOXJlcXVlc3RBdHRhY2hXaW5kb3dFdgorX19aVGhuNF9ON1dl
YkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmRpc3BhdGNoTWVzc2FnZVRvSW5z
cGVjdG9yRVJLTlNfNlN0cmluZ0UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNDM0YjEyZC4uZTQ4MmQxOCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE2ODcs
NiArMTY4Nyw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rv
cldvcmtlclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3Bv
aW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggZTJmYzExNi4uMmFlNGUzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MTAsNiArNzEwLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgXAogICAgIGluc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIvYXJjaGl2ZS9BcmNo
aXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZS5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYTEyMTUxMC4uZjZmMTVj
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NDM1Myw2ICs0NDM1
MywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1
ZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjY3
YmZhMS4uNTBjN2Q1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEwMTQsNiArMTAxNCw4IEBACiAJCTRFMTk1OTJDMEEzOURBQ0MwMDIyMEZFNSAvKiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRv
ci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTky
NzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgKi87IH07CiAJCTRFMTk1OTJF
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVk
aWFRdWVyeUV4cC5oICovOyB9OworCQk0RjMyODlCNTExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVj
dG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRGMzI4OUIzMTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwICovOyB9
OworCQk0RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjMyODlCNDExQTQyQUFC
MDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEZEOEQwRjIxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlw
dEdDRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwICovOyB9Owog
CQk0RkQ4RDBGMzExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZEOEQwRjExMTlDNzE4QjAwMkZB
ODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVG
IC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzNjMsNyArMTM2NSw3
IEBACiAJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwICovOyB9OwogCQk3QURFNzIyNjEwQ0JCQjlCMDA2QjNCM0EgLyogQ29udGV4dE1lbnVQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCAqLzsgfTsK
IAkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRUQzRTAzMEZCQjFF
QUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi87IH07Ci0JCTdBRUQzRTA2MEZC
QjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFRDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8qIElu
c3BlY3RvckZyb250ZW5kLmggKi87IH07CisJCTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAzQyAvKiBJ
bnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FFRDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FGRDRB
OEIxMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkQ0QThBMTEzMUMyNzYwMDM1Qjg4MyAv
KiBTY3JpcHRCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0FGRDRGRjQxMTMyNzdCNjAwMzVCODgzIC8qIFNjcmlwdERlYnVnTGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
RkQ0RkYzMTEzMjc3QjYwMDM1Qjg4MyAvKiBTY3JpcHREZWJ1Z0xpc3RlbmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODJCNjU4OTgxMTg5RTM5
MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVj
dG9yQ1NTU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjYwOSw2ICs2NjExLDggQEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8q
IE1lZGlhUXVlcnlFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhUXVlcnlFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUx
OTU5MjcwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyog
SW5zcGVjdG9yVmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluc3BlY3RvclZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGMzI4
OUI0MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRGRDhEMEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyog
U2NyaXB0R0NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRH
Q0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEw
MDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhY2hlZFBhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTMyLDYgKzEx
MTM2LDggQEAKIAkJCQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3Vy
Y2UuaCAqLywKIAkJCQk3NTQxMzNBOTEwMkUwMEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAgKi8sCiAJCQkJNzU0MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaCAqLywKKwkJCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5z
cGVjdG9yVmFsdWVzLmNwcCAqLywKKwkJCQk0RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5z
cGVjdG9yVmFsdWVzLmggKi8sCiAJCQkJRjM3NUNDMDYxMTUwRDMwMDAwOEREQjgxIC8qIEluc3Bl
Y3RvcldvcmtlclJlc291cmNlLmggKi8sCiAJCQkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8q
IEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsICovLAogCQkJCUJDQzY0RjVGMERDRkI4NEUwMDgxRUYz
QiAvKiBsb2NhbGl6ZWRTdHJpbmdzLmpzICovLApAQCAtMTkyOTcsNiArMTkzMDMsNyBAQAogCQkJ
CTU5QThGMUQ2MTFBNjk1MTMwMDFBQzM0QSAvKiBEZXZpY2VPcmllbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTlBOEYxRDgxMUE2OTUyMDAwMUFDMzRBIC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODc5QzYyNjExQTlEMUY3MDA1OTIzN0EgLyog
SFRNTDVUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEYzMjg5QjYxMUE0MkFBQjAw
NUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTU4Myw2ICsy
MTU5MCw3IEBACiAJCQkJNTlBODYwMDYxMTlEQUY3RjAwREVGMUVGIC8qIEpTRGV2aWNlT3JpZW50
YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OUE4RjFENDExQTY5NTA4MDAxQUMz
NEEgLyogRGV2aWNlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3OUM2MjUx
MUE5RDFGNzAwNTkyMzdBIC8qIEhUTUw1VHJlZUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBkODlh
ZTcxLi42OTc0MTA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxs
LmgiCkBAIC00NSwxMiArNDYsMTMgQEAKICNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRl
bmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKLSAgICA6IG1fd2ViSW5zcGVjdG9yKHdlYklu
c3BlY3RvcikKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChTY3JpcHRPYmpl
Y3Qgd2ViSW5zcGVjdG9yLCBJbnNwZWN0b3JGcm9udGVuZERlbGVnYXRlKiBpbnNwZWN0b3JGcm9u
dGVuZERlbGVnYXRlKQorICAgIDogbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKSwgbV9pbnNw
ZWN0b3JGcm9udGVuZERlbGVnYXRlKGluc3BlY3RvckZyb250ZW5kRGVsZWdhdGUpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDBlN2Q3YjMuLmM2OTQ3ODkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCiAjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gK
IAorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEFycmF5Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKQEAg
LTQwLDE1ICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRGF0YWJhc2U7
CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CisgICAgY2xh
c3MgSW5zcGVjdG9yT2JqZWN0OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgU2NyaXB0U3Ry
aW5nOwogICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBTdG9yYWdl
OwogICAgIGNsYXNzIEluc3BlY3RvcldvcmtlclJlc291cmNlOwogCisgICAgY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmREZWxlZ2F0ZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kRGVsZWdhdGUoKSB7IH0KKyAgICB9Owor
CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3Bl
Y3Rvcik7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0
b3IsIEluc3BlY3RvckZyb250ZW5kRGVsZWdhdGUqIHdlYkluc3BlY3RvckRlbGVnYXRlKTsKICAg
ICAgICAgfkluc3BlY3RvckZyb250ZW5kKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGNsb3Nl
KCk7CkBAIC0xNjgsNiArMTc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgY2FsbFNpbXBsZUZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IG1fd2ViSW5zcGVjdG9yOworICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZERlbGVnYXRlKiBtX2luc3BlY3RvckZyb250ZW5kRGVsZWdhdGU7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAppbmRleCAxOGM1MmRhLi4zN2JlYjVlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcApAQCAtODksNyArODksNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmZyb250ZW5kTG9hZGVkKCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRGcm9udGVuZChu
ZXcgSW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9yT2JqKSk7CisgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5zZXRGcm9udGVuZChuZXcgSW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9y
T2JqLCB0aGlzKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVx
dWVzdEF0dGFjaFdpbmRvdygpCkBAIC0xNjIsNiArMTYyLDE4IEBAIHVuc2lnbmVkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQKICAgICByZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIG1pbjxm
bG9hdD4ocHJlZmVycmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hl
ZEhlaWdodFJhdGlvKSkpOwogfQogICAgIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpkaXNwYXRjaE1lc3NhZ2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2Jh
bE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYklu
c3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHdlYkluc3BlY3Rv
ck9iaiwgImRpc3BhdGNoTWVzc2FnZVRvSW5zcGVjdG9yIik7CisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQobWVzc2FnZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oCmluZGV4IGNlNjYxZmUuLjYwYTEwNTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgKQEAgLTMxLDYg
KzMxLDcgQEAKICNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbF9oCiAjZGVmaW5l
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAogCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00MSw3ICs0
Miw3IEBAIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q7CiBjbGFzcyBQYWdlOwogCi1jbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
IDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LCBwdWJsaWMgTm9uY29weWFibGUgewor
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCA6IHB1YmxpYyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCwgcHVibGljIEluc3BlY3RvckZyb250ZW5kRGVsZWdhdGUsIHB1YmxpYyBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChJbnNw
ZWN0b3JDb250cm9sbGVyKiwgUGFnZSopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwoKTsKQEAgLTU5LDYgKzYwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2hXaW5kb3coKSA9IDA7CiAgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaE1lc3NhZ2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CiAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVmZjkzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorCisjaW5jbHVkZSAiU3RyaW5nQnVmZmVy
LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTT05CdWZmZXIgeworcHVibGljOgor
ICAgIEpTT05CdWZmZXIoc2l6ZV90IHByZWFsbG9jYXRlKSA6IG1fcG9zaXRpb24oMCksIG1fYnVm
ZmVyKHByZWFsbG9jYXRlKSB7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciogc291cmNl
LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgY2hlY2tBcHBlbmRTaXplKGxlbmd0aCk7
CisgICAgICAgIG1lbWNweShtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX3Bvc2l0aW9uLCBzb3Vy
Y2UsIHNpemVvZihVQ2hhcikgKiBsZW5ndGgpOworICAgICAgICBtX3Bvc2l0aW9uICs9IGxlbmd0
aDsKKyAgICB9CisgICAgdm9pZCBhcHBlbmQoVUNoYXIgYykKKyAgICB7CisgICAgICAgIGNoZWNr
QXBwZW5kU2l6ZSgxKTsKKyAgICAgICAgbV9idWZmZXJbbV9wb3NpdGlvbisrXSA9IGM7CisgICAg
fQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc291cmNlKQorICAgIHsKKyAgICAgICAg
YXBwZW5kKHNvdXJjZS5jaGFyYWN0ZXJzKCksIHNvdXJjZS5sZW5ndGgoKSk7CisgICAgfQorICAg
IHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgVUNoYXIq
IGNoYXJhY3RlcnMoKSB7IHJldHVybiBtX2J1ZmZlci5jaGFyYWN0ZXJzKCk7IH0KK3ByaXZhdGU6
CisgICAgdm9pZCBjaGVja0FwcGVuZFNpemUoc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAg
IHNpemVfdCBsZWZ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSBtX3Bvc2l0aW9uOworICAgICAgICBp
ZiAobGVmdCA8IGxlbmd0aCkKKyAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZSgobV9wb3NpdGlv
biArIGxlbmd0aCkgKiAyKTsKKyAgICB9CisgICAgc2l6ZV90IG1fcG9zaXRpb247CisgICAgU3Ry
aW5nQnVmZmVyIG1fYnVmZmVyOworfTsKKworaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBj
LCBKU09OQnVmZmVyKiBkc3QpCit7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXGInOiBk
c3QtPmFwcGVuZCgiXFxiIik7IGJyZWFrOworICAgIGNhc2UgJ1xmJzogZHN0LT5hcHBlbmQoIlxc
ZiIpOyBicmVhazsKKyAgICBjYXNlICdcbic6IGRzdC0+YXBwZW5kKCJcXG4iKTsgYnJlYWs7Cisg
ICAgY2FzZSAnXHInOiBkc3QtPmFwcGVuZCgiXFxyIik7IGJyZWFrOworICAgIGNhc2UgJ1x0Jzog
ZHN0LT5hcHBlbmQoIlxcdCIpOyBicmVhazsKKyAgICBjYXNlICdcXCc6IGRzdC0+YXBwZW5kKCJc
XFxcIik7IGJyZWFrOworICAgIGNhc2UgJyInOiBkc3QtPmFwcGVuZCgiXFxcIiIpOyBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
ciwgSlNPTkJ1ZmZlciogZHN0KQoreworICAgIGRzdC0+YXBwZW5kKCciJyk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMg
PSBzdHJbaV07CisgICAgICAgIGlmICghZXNjYXBlQ2hhcihjLCBkc3QpKSB7CisgICAgICAgICAg
ICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYgfHwgYyA9PSAnPCcgfHwgYyA9PSAnPicpIHsKKyAgICAg
ICAgICAgICAgICAvLyAxLiBFc2NhcGluZyA8LCA+IHRvIHByZXZlbnQgc2NyaXB0IGV4ZWN1dGlv
bi4KKyAgICAgICAgICAgICAgICAvLyAyLiBUZWNobmljYWxseSwgd2UgY291bGQgYWxzbyBwYXNz
IHRocm91Z2ggYyA+IDEyNiBhcyBVVEY4LCBidXQgdGhpcworICAgICAgICAgICAgICAgIC8vICAg
IGlzIGFsc28gb3B0aW9uYWwuICBJdCB3b3VsZCBhbHNvIGJlIGEgcGFpbiB0byBpbXBsZW1lbnQg
aGVyZS4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3ltYm9sID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihjKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3ltYm9sQ29kZSA9IFN0
cmluZzo6Zm9ybWF0KCJcXHUlMDRYIiwgc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBkc3QtPmFw
cGVuZChzeW1ib2xDb2RlLmNoYXJhY3RlcnMoKSwgc3ltYm9sQ29kZS5sZW5ndGgoKSk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBkc3QtPmFwcGVuZChjKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBkc3QtPmFwcGVuZCgnIicpOworfQorCitTdHJpbmcgSW5zcGVjdG9yQmFz
ZVZhbHVlOjp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAgIEpTT05CdWZmZXIgcmVzdWx0KDUx
Mik7CisgICAgd3JpdGVKU09OKCZyZXN1bHQpOworICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmNo
YXJhY3RlcnMoKSwgcmVzdWx0Lmxlbmd0aCgpKTsKK30KKworc2l6ZV90IEluc3BlY3RvckJhc2VW
YWx1ZTo6d3JpdGVKU09OKEpTT05CdWZmZXIqIG91dHB1dCkgY29uc3QKK3sKKyAgICBpbnQgb2Jq
ZWN0c0NvdW50ID0gMTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgVHlwZU51bGw6
IG91dHB1dC0+YXBwZW5kKCJudWxsIik7IGJyZWFrOworICAgIGNhc2UgVHlwZUJvb2xlYW46IG91
dHB1dC0+YXBwZW5kKG1fYm9vbFZhbHVlID8gInRydWUiIDogImZhbHNlIik7IGJyZWFrOworICAg
IGNhc2UgVHlwZURvdWJsZTogb3V0cHV0LT5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiVmIiwgbV9k
b3VibGVWYWx1ZSkpOyBicmVhazsKKyAgICBjYXNlIFR5cGVTdHJpbmc6IGRvdWJsZVF1b3RlU3Ry
aW5nKCptX3N0cmluZywgb3V0cHV0KTsgYnJlYWs7CisgICAgY2FzZSBUeXBlT2JqZWN0OiBvYmpl
Y3RzQ291bnQgKz0gd3JpdGVKU09OT2JqZWN0KG91dHB1dCk7IGJyZWFrOworICAgIGNhc2UgVHlw
ZUFycmF5OiBvYmplY3RzQ291bnQgKz0gd3JpdGVKU09OQXJyYXkob3V0cHV0KTsgYnJlYWs7Cisg
ICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBvYmpl
Y3RzQ291bnQ7Cit9CisKK3NpemVfdCBJbnNwZWN0b3JCYXNlVmFsdWU6OndyaXRlSlNPTk9iamVj
dChKU09OQnVmZmVyKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgc2l6ZV90IG9iamVjdHNDb3VudCA9
IDA7CisgICAgb3V0cHV0LT5hcHBlbmQoJ3snKTsKKyAgICBmb3IgKFByb3BlcnR5TWFwOjppdGVy
YXRvciBpdCA9IG1fbWFwLT5iZWdpbigpOyBpdCAhPSBtX21hcC0+ZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0ICE9IG1fbWFwLT5iZWdpbigpKQorICAgICAgICAgICAgb3V0cHV0LT5hcHBl
bmQoJywnKTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmZpcnN0LCBvdXRwdXQpOwor
ICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOworICAgICAgICBvYmplY3RzQ291bnQgKz0gaXQt
PnNlY29uZC53cml0ZUpTT04ob3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0LT5hcHBlbmQoJ30n
KTsKKyAgICByZXR1cm4gb2JqZWN0c0NvdW50OworfQorCitzaXplX3QgSW5zcGVjdG9yQmFzZVZh
bHVlOjp3cml0ZUpTT05BcnJheShKU09OQnVmZmVyKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgc2l6
ZV90IG9iamVjdHNDb3VudCA9IDA7CisgICAgb3V0cHV0LT5hcHBlbmQoJ1snKTsKKyAgICBmb3Ig
KFByb3BlcnR5QXJyYXk6Oml0ZXJhdG9yIGl0ID0gbV9hcnJheS0+YmVnaW4oKTsgaXQgIT0gbV9h
cnJheS0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IG1fYXJyYXktPmJlZ2luKCkp
CisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgnLCcpOworICAgICAgICBvYmplY3RzQ291bnQg
Kz0gaXQtPndyaXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnXScp
OworICAgIHJldHVybiBvYmplY3RzQ291bnQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFzZVZhbHVl
Ojppbml0KFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVB
cnJheTogbV9hcnJheSA9IG5ldyBQcm9wZXJ0eUFycmF5KCk7IGJyZWFrOworICAgIGNhc2UgVHlw
ZU9iamVjdDogbV9tYXAgPSBuZXcgUHJvcGVydHlNYXAoKTsgYnJlYWs7CisgICAgY2FzZSBUeXBl
U3RyaW5nOiBtX3N0cmluZyA9IG5ldyBQcm9wZXJ0eVN0cmluZygpOyBicmVhazsKKyAgICBjYXNl
IFR5cGVOdWxsOgorICAgIGNhc2UgVHlwZURvdWJsZToKKyAgICBjYXNlIFR5cGVCb29sZWFuOgor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7
CisgICAgfQorICAgIG1fdHlwZSA9IHR5cGU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFzZVZhbHVl
Ojphc3NpZ24oY29uc3QgSW5zcGVjdG9yQmFzZVZhbHVlJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQo
bV90eXBlID09IFR5cGVOdWxsKTsKKyAgICBzd2l0Y2ggKHZhbHVlLm1fdHlwZSkgeworICAgIGNh
c2UgVHlwZUFycmF5OgorICAgICAgICBtX2FycmF5ID0gdmFsdWUubV9hcnJheTsKKyAgICAgICAg
bV9hcnJheS0+cmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZU9iamVjdDoKKyAg
ICAgICAgbV9tYXAgPSB2YWx1ZS5tX21hcDsKKyAgICAgICAgbV9tYXAtPnJlZigpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFR5cGVTdHJpbmc6CisgICAgICAgIG1fc3RyaW5nID0gdmFsdWUu
bV9zdHJpbmc7CisgICAgICAgIG1fc3RyaW5nLT5yZWYoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUeXBlQm9vbGVhbjoKKyAgICAgICAgbV9ib29sVmFsdWUgPSB2YWx1ZS5tX2Jvb2xWYWx1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlRG91YmxlOgorICAgICAgICBtX2RvdWJs
ZVZhbHVlID0gdmFsdWUubV9kb3VibGVWYWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
eXBlTnVsbDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIG1fdHlwZSA9IHZhbHVlLm1fdHlwZTsKKworfQorCit2
b2lkIEluc3BlY3RvckJhc2VWYWx1ZTo6Y2xlYXIoKQoreworICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgY2FzZSBUeXBlQXJyYXk6IG1fYXJyYXktPmRlcmVmKCk7IGJyZWFrOworICAgIGNhc2Ug
VHlwZU9iamVjdDogbV9tYXAtPmRlcmVmKCk7IGJyZWFrOworICAgIGNhc2UgVHlwZVN0cmluZzog
bV9zdHJpbmctPmRlcmVmKCk7IGJyZWFrOworICAgIGNhc2UgVHlwZU51bGw6CisgICAgY2FzZSBU
eXBlQm9vbGVhbjoKKyAgICBjYXNlIFR5cGVEb3VibGU6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgbV90eXBlID0gVHlwZU51bGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmRhYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMCwwICsx
LDE0NCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisqIG1ldDoKKyoKKyog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiBk
aXN0cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBJbnNwZWN0b3JWYWx1
ZXNfaAorI2RlZmluZSBJbnNwZWN0b3JWYWx1ZXNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIlN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNPTkJ1ZmZl
cjsKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQmFzZVZhbHVlIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBUeXBlTnVsbCA9IDAsCisgICAgICAgIFR5cGVC
b29sZWFuLAorICAgICAgICBUeXBlRG91YmxlLAorICAgICAgICBUeXBlU3RyaW5nLAorICAgICAg
ICBUeXBlT2JqZWN0LAorICAgICAgICBUeXBlQXJyYXkKKyAgICB9IFR5cGU7CisKKyAgICBJbnNw
ZWN0b3JCYXNlVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9CisgICAgSW5zcGVjdG9yQmFz
ZVZhbHVlKGNvbnN0IEluc3BlY3RvckJhc2VWYWx1ZSYgdmFsdWUpIDogbV90eXBlKFR5cGVOdWxs
KSB7IGFzc2lnbih2YWx1ZSk7IH0KKyAgICB+SW5zcGVjdG9yQmFzZVZhbHVlKCkgeyBjbGVhcigp
OyB9CisgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0
IEluc3BlY3RvckJhc2VWYWx1ZSB1bmRlZmluZWQoKSB7IHJldHVybiBJbnNwZWN0b3JCYXNlVmFs
dWUoKTsgfQorCisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIEluc3BlY3RvckJhc2VWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IEluc3BlY3RvckJhc2VWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUubV90eXBlICE9IFR5cGVBcnJh
eSB8fCBtX3R5cGUgPT0gVHlwZUFycmF5IHx8IG1fdHlwZSA9PSBUeXBlTnVsbCk7CisgICAgICAg
IEFTU0VSVCh2YWx1ZS5tX3R5cGUgIT0gVHlwZU9iamVjdCB8fCBtX3R5cGUgPT0gVHlwZU9iamVj
dCB8fCBtX3R5cGUgPT0gVHlwZU51bGwpOworICAgICAgICBjbGVhcigpOworICAgICAgICBhc3Np
Z24odmFsdWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorcHJvdGVjdGVkOgorCisg
ICAgSW5zcGVjdG9yQmFzZVZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5cGUoVHlwZU51bGwpIHsgaW5p
dCh0eXBlKTsgfQorCisgICAgdm9pZCBpbml0KFR5cGUpOworICAgIHZvaWQgYXNzaWduKGNvbnN0
IEluc3BlY3RvckJhc2VWYWx1ZSYgdmFsdWUpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHNp
emVfdCB3cml0ZUpTT04oSlNPTkJ1ZmZlciogb3V0cHV0KSBjb25zdDsKKyAgICBzaXplX3Qgd3Jp
dGVKU09OT2JqZWN0KEpTT05CdWZmZXIqIG91dHB1dCkgY29uc3Q7CisgICAgc2l6ZV90IHdyaXRl
SlNPTkFycmF5KEpTT05CdWZmZXIqIG91dHB1dCkgY29uc3Q7CisKKyAgICBjbGFzcyBQcm9wZXJ0
eU1hcCA6IHB1YmxpYyBSZWZDb3VudGVkPFByb3BlcnR5TWFwPiwgcHVibGljIEhhc2hNYXA8U3Ry
aW5nLCBJbnNwZWN0b3JCYXNlVmFsdWU+IHsgfTsKKyAgICBjbGFzcyBQcm9wZXJ0eUFycmF5IDog
cHVibGljIFJlZkNvdW50ZWQ8UHJvcGVydHlBcnJheT4sIHB1YmxpYyBWZWN0b3I8SW5zcGVjdG9y
QmFzZVZhbHVlPiB7IH07CisgICAgY2xhc3MgUHJvcGVydHlTdHJpbmcgOiBwdWJsaWMgUmVmQ291
bnRlZDxQcm9wZXJ0eVN0cmluZz4sIHB1YmxpYyBTdHJpbmcgeyB9OworCisgICAgVHlwZSBtX3R5
cGU7CisgICAgdW5pb24geworICAgICAgICBib29sIG1fYm9vbFZhbHVlOworICAgICAgICBkb3Vi
bGUgbV9kb3VibGVWYWx1ZTsKKyAgICAgICAgUHJvcGVydHlNYXAgKm1fbWFwOworICAgICAgICBQ
cm9wZXJ0eUFycmF5ICptX2FycmF5OworICAgICAgICBQcm9wZXJ0eVN0cmluZyAqbV9zdHJpbmc7
CisgICAgfTsKK307CisKK2NsYXNzIEluc3BlY3RvclZhbHVlIDogcHVibGljIEluc3BlY3RvckJh
c2VWYWx1ZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yVmFsdWUoKSA6IEluc3BlY3RvckJhc2VW
YWx1ZShUeXBlTnVsbCkgeyB9CisKKyAgICBJbnNwZWN0b3JWYWx1ZShjb25zdCBjaGFyICp2YWx1
ZSkgOiBJbnNwZWN0b3JCYXNlVmFsdWUoVHlwZVN0cmluZykgeyAqKFN0cmluZyopbV9zdHJpbmcg
PSB2YWx1ZTsgfQorICAgIEluc3BlY3RvclZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIDogSW5z
cGVjdG9yQmFzZVZhbHVlKFR5cGVTdHJpbmcpIHsgKihTdHJpbmcqKW1fc3RyaW5nID0gdmFsdWU7
IH0KKyAgICBJbnNwZWN0b3JWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSA6IEluc3Bl
Y3RvckJhc2VWYWx1ZShUeXBlU3RyaW5nKSB7ICooU3RyaW5nKiltX3N0cmluZyA9IHZhbHVlLnN0
cmluZygpOyB9CisKKyAgICBJbnNwZWN0b3JWYWx1ZShkb3VibGUgdmFsdWUpIDogSW5zcGVjdG9y
QmFzZVZhbHVlKFR5cGVEb3VibGUpIHsgbV9kb3VibGVWYWx1ZSA9IHZhbHVlOyB9CisgICAgSW5z
cGVjdG9yVmFsdWUoaW50IHZhbHVlKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBlRG91YmxlKSB7
IG1fZG91YmxlVmFsdWUgPSAoZG91YmxlKXZhbHVlOyB9CisgICAgSW5zcGVjdG9yVmFsdWUodW5z
aWduZWQgaW50IHZhbHVlKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBlRG91YmxlKSB7IG1fZG91
YmxlVmFsdWUgPSAoZG91YmxlKXZhbHVlOyB9CisgICAgSW5zcGVjdG9yVmFsdWUobG9uZyB2YWx1
ZSkgOiBJbnNwZWN0b3JCYXNlVmFsdWUoVHlwZURvdWJsZSkgeyBtX2RvdWJsZVZhbHVlID0gKGRv
dWJsZSl2YWx1ZTsgfQorICAgIEluc3BlY3RvclZhbHVlKHVuc2lnbmVkIGxvbmcgdmFsdWUpIDog
SW5zcGVjdG9yQmFzZVZhbHVlKFR5cGVEb3VibGUpIHsgbV9kb3VibGVWYWx1ZSA9IChkb3VibGUp
dmFsdWU7IH0KKworICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKGJvb2wgdmFsdWUpIDogSW5z
cGVjdG9yQmFzZVZhbHVlKFR5cGVCb29sZWFuKSB7IG1fYm9vbFZhbHVlID0gdmFsdWU7IH0KK3By
aXZhdGU6CisgICAgSW5zcGVjdG9yVmFsdWUoY29uc3QgSW5zcGVjdG9yVmFsdWUmIHZhbHVlKSA6
IEluc3BlY3RvckJhc2VWYWx1ZSh2YWx1ZSkgeyB9Cit9OworCitjbGFzcyBJbnNwZWN0b3JPYmpl
Y3Q7CisKK2NsYXNzIEluc3BlY3RvckFycmF5IDogcHVibGljIEluc3BlY3RvckJhc2VWYWx1ZSB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQXJyYXkoKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBl
QXJyYXkpIHsgfQorICAgIEluc3BlY3RvckFycmF5KGNvbnN0IEluc3BlY3RvckFycmF5JiB2YWx1
ZSkgOiBJbnNwZWN0b3JCYXNlVmFsdWUodmFsdWUpIHsgfQorICAgIHZvaWQgcHVzaChjb25zdCBJ
bnNwZWN0b3JWYWx1ZSYgdmFsdWUpIHsgbV9hcnJheS0+YXBwZW5kKHZhbHVlKTsgfQorICAgIHZv
aWQgcHVzaChjb25zdCBJbnNwZWN0b3JCYXNlVmFsdWUmIHZhbHVlKSB7IG1fYXJyYXktPmFwcGVu
ZCh2YWx1ZSk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
LT5zaXplKCk7IH0KK307CisKK2NsYXNzIEluc3BlY3Rvck9iamVjdCA6IHB1YmxpYyBJbnNwZWN0
b3JCYXNlVmFsdWUgeworcHVibGljOgorICAgIEluc3BlY3Rvck9iamVjdCgpIDogSW5zcGVjdG9y
QmFzZVZhbHVlKFR5cGVPYmplY3QpIHsgfQorICAgIEluc3BlY3Rvck9iamVjdChjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIHZhbHVlKSA6IEluc3BlY3RvckJhc2VWYWx1ZSh2YWx1ZSkgeyB9CisgICAg
dm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJbnNwZWN0b3JWYWx1ZSYgdmFsdWUp
IHsgbV9tYXAtPnNldChuYW1lLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEluc3BlY3RvckJhc2VWYWx1ZSYgdmFsdWUpIHsgbV9tYXAtPnNldChuYW1l
LCB2YWx1ZSk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVmFsdWVzX2gpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAwNmFlNTAzLi4zNDVj
NzlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTU2OSw2
ICs1NjksMTMgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAgICAgc2V0
VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAorV2ViSW5zcGVjdG9yLmRpc3BhdGNoTWVz
c2FnZVRvSW5zcGVjdG9yID0gZnVuY3Rpb24oYXJncykKK3sKKyAgICB2YXIgYXJndW1lbnRzID0g
SlNPTi5wYXJzZShhcmdzKTsKKyAgICB2YXIgbWV0aG9kTmFtZSA9IGFyZ3VtZW50cy5zaGlmdCgp
OworICAgIFdlYkluc3BlY3RvclttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwor
fQorCiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAg
aWYgKHRoaXMuY3VycmVudFBhbmVsKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDdlNmVkYi4uYmJiMmM0ZiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMjQgIElseWEgVGlraG9ub3Zz
a3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYkluc3BlY3RvcjogSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBJbnNwZWN0b3JWYWx1ZXMgZm9yIG5hdGl2ZSBzZXJpYWxpemF0aW9uIHRvIEpTT04uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDIwNAorCisgICAg
ICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoTWVzc2FnZVRvSW5zcGVjdG9yKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEluc3BlY3RvckZyb250ZW5kUHJveHlU
b0luc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oOgorCiAyMDEwLTA1LTIxICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggMDk2OWQzNy4uY2MyMzU3MSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTI5MSw2ICsyOTEsMTEg
QEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2VuZFJwY01lc3NhZ2UoY29uc3QgV2ViRGV2
VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGRhdGEpOwogfQogCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaXNwYXRjaE1lc3Nh
Z2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV90b29sc0FnZW50
RGVsZWdhdGVTdHViLT5kaXNwYXRjaE9uQ2xpZW50KG1lc3NhZ2UpOworfQorCiB2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjpjb21waWxlVXRpbGl0eVNjcmlwdHMoKQogewogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKQEAgLTM3MSw3ICszNzYsNyBAQCB2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250cm9sbGVy
KCkKICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQp
KTsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKTsK
ICAgICBpYy0+c2V0RnJvbnRlbmQobmV3IEluc3BlY3RvckZyb250ZW5kKAotICAgICAgICBTY3Jp
cHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSkpOworICAgICAgICBT
Y3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSwgdGhpcykpOwog
fQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBl
bmFibGVkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCmluZGV4
IDQ1NWRjZWYuLmJmODQ5OTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkFQVUFnZW50RGVsZWdhdGUu
aCIKICNpbmNsdWRlICJEZXZUb29sc1JQQy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
LmgiCiAjaW5jbHVkZSAiVG9vbHNBZ2VudC5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQ
cml2YXRlLmgiCiAKQEAgLTYyLDYgKzYzLDcgQEAgc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURh
dGE7CiAKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRJbXBsIDogcHVibGljIFdlYkRldlRvb2xzQWdl
bnRQcml2YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgVG9vbHNBZ2Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kRGVsZWdhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBE
ZXZUb29sc1JQQzo6RGVsZWdhdGUgewogcHVibGljOgogICAgIFdlYkRldlRvb2xzQWdlbnRJbXBs
KFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50
KTsKQEAgLTk1LDYgKzk3LDkgQEAgcHVibGljOgogICAgIC8vIERldlRvb2xzUlBDOjpEZWxlZ2F0
ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgc2VuZFJwY01lc3NhZ2UoY29uc3Qg
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSk7CiAKKyAgICAvLyBXZWJJbnNwZWN0b3JEZWxl
Z2F0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNZXNzYWdlVG9J
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKwogICAgIHZvaWQgZm9yY2VSZXBhaW50
KCk7CiAKICAgICBpbnQgaG9zdElkKCkgeyByZXR1cm4gbV9ob3N0SWQ7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57459</attachid>
            <date>2010-05-31 06:56:02 -0700</date>
            <delta_ts>2010-05-31 07:30:40 -0700</delta_ts>
            <desc>[patch] Classes for native serialization to JSON.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20630</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNhODg2Yy4uOTlkZDU3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNS0zMSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGFzc2VzIGZvciBuYXRpdmUgc2Vy
aWFsaXphdGlvbiB0byBKU09OIHdlcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDIwNAorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5JbnNwZWN0b3IuZXhwOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVR
dW90ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OnRvSlNP
TlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OndyaXRlSlNP
Tik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6Okluc3Bl
Y3RvckJhc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6On5J
bnNwZWN0b3JCYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzZVZhbHVl
OjpudWxsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZh
bHVlOjpJbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6SW5zcGVjdG9yU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck9iamVjdDo6fkluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPYmplY3Q6Okluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp+SW5zcGVj
dG9yQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6SW5zcGVjdG9yQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpzZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck9iamVjdDo6c2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5OjpwdXNoQm9vbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcnJheTo6cHVzaCk6CisKIDIwMTAtMDUtMzAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDli
OTUzMzAuLmZjNmI4MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMyOSw2ICsxMzI5LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rv
ci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCA1YmY2ZjA1Li4xZTcz
MGMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAorKysgYi9XZWJD
b3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMSwzICsxLDQgQEAKK19fWk5LN1dlYkNvcmUx
OEluc3BlY3RvckJhc2VWYWx1ZTEydG9KU09OU3RyaW5nRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjEwc2V0U2V0dGluZ0VSS05TXzZTdHJpbmdFUzNfCiBfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZURlYnVnZ2VyRXYKIF9fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlUHJvZmlsZXJFYmIKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWI0YzU1OS4uNzNiMDBi
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE2OTYsNiArMTY5Niw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1
Z0xpc3RlbmVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggZDNlYjExNS4uY2M4N2EzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MTQsNiArNzE0LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAgXAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2Fk
ZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hp
dmVSZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
ZmNiYjdmNS4uYjJiNmNlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC00NDcxMyw2ICs0NDcxMywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JWYWx1ZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMTYxOTRlNy4uOWM4MjVkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMTQsNiArMTAxNCw4IEBACiAJCTRFMTk1OTJDMEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBGRTUgLyogTWVk
aWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAyMjBGRTUgLyog
TWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgKi87
IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyODBBMzlEQUND
MDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OworCQk0RjMyODlCNTExQTQyQUFCMDA1
QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGMzI4OUIzMTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JW
YWx1ZXMuY3BwICovOyB9OworCQk0RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9y
VmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEZEOEQwRjIxMTlDNzE4QjAw
MkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZl
bnQuY3BwICovOyB9OwogCQk0RkQ4RDBGMzExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZEOEQw
RjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAqLzsgfTsKIAkJNTEwMTg0Njkw
QjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQ
YWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTY2MzYsNiArNjYzOCw4IEBACiAJCTRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTI3MEEz
OURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEUxOTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JWYWx1ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RjMyODlCNDExQTQy
QUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluc3BlY3RvclZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdD
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYg
LyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQ
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTIwNCw2ICsxMTIwOCw4IEBA
CiAJCQkJNDFGMDYxRkYwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggKi8s
CiAJCQkJNzU0MTMzQTkxMDJFMDBGNDAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwICovLAogCQkJCTc1NDEzM0E3MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmggKi8sCisJCQkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZh
bHVlcy5jcHAgKi8sCisJCQkJNEYzMjg5QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZh
bHVlcy5oICovLAogCQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JXb3Jr
ZXJSZXNvdXJjZS5oICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRFMDA4MUVGM0IgLyogbG9j
YWxpemVkU3RyaW5ncy5qcyAqLywKQEAgLTE5NDA4LDYgKzE5NDE0LDcgQEAKIAkJCQlDNTFEQTlB
NzExQUVGMkMxMDA5Nzk5QzUgLyogSURCSW5kZXhJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTFEQTlBOTExQUVGMkMxMDA5Nzk5QzUgLyogSURCSW5kZXhSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNUJCQzlEMTExQUVGODM4MDA3QzJCRkUgLyogSlNJREJJbmRleFJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JW
YWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE3MDcsNiArMjE3MTQsNyBAQAogCQkJCUM1MURB
OUE2MTFBRUYyQzEwMDk3OTlDNSAvKiBJREJJbmRleEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzUxREE5QTgxMUFFRjJDMTAwOTc5OUM1IC8qIElEQkluZGV4UmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNUJCQzlEMDExQUVGODM4MDA3QzJCRkUgLyogSlNJREJJbmRleFJlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMWYyNjAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBA
IC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgorCisjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBib29sIGVzY2FwZUNoYXIoVUNo
YXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQoreworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2Ug
J1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVhazsKKyAgICBjYXNlICdcZic6IGRzdC0+
YXBwZW5kKCJcXGYiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXG4nOiBkc3QtPmFwcGVuZCgiXFxu
IiwgMik7IGJyZWFrOworICAgIGNhc2UgJ1xyJzogZHN0LT5hcHBlbmQoIlxcciIsIDIpOyBicmVh
azsKKyAgICBjYXNlICdcdCc6IGRzdC0+YXBwZW5kKCJcXHQiLCAyKTsgYnJlYWs7CisgICAgY2Fz
ZSAnXFwnOiBkc3QtPmFwcGVuZCgiXFxcXCIsIDIpOyBicmVhazsKKyAgICBjYXNlICciJzogZHN0
LT5hcHBlbmQoIlxcXCIiLCAyKTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgZG91Ymxl
UXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKK3sKKyAg
ICBkc3QtPmFwcGVuZCgnIicpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIubGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gc3RyW2ldOworICAgICAgICBpZiAoIWVz
Y2FwZUNoYXIoYywgZHN0KSkgeworICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI2IHx8
IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gRXNjYXBpbmcg
PCwgPiB0byBwcmV2ZW50IHNjcmlwdCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgLy8gMi4g
VGVjaG5pY2FsbHksIHdlIGNvdWxkIGFsc28gcGFzcyB0aHJvdWdoIGMgPiAxMjYgYXMgVVRGOCwg
YnV0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICBpcyBhbHNvIG9wdGlvbmFsLiAgSXQgd291
bGQgYWxzbyBiZSBhIHBhaW4gdG8gaW1wbGVtZW50IGhlcmUuCisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHN5bWJvbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oYyk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIHN5bWJvbENvZGUgPSBTdHJpbmc6OmZvcm1hdCgiXFx1JTA0WCIsIHN5
bWJvbCk7CisgICAgICAgICAgICAgICAgZHN0LT5hcHBlbmQoc3ltYm9sQ29kZS5jaGFyYWN0ZXJz
KCksIHN5bWJvbENvZGUubGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgZHN0LT5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZHN0LT5hcHBlbmQo
JyInKTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhc2VWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KDUxMik7CisgICAgd3JpdGVKU09OKCZyZXN1bHQpOworICAgIHJldHVybiBTdHJpbmcocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFzZVZhbHVl
Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAoreworICAgIEFTU0VSVCht
X3R5cGUgPT0gVHlwZU51bGwpOworICAgIG91dHB1dC0+YXBwZW5kKCJudWxsIiwgNCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlw
ZURvdWJsZSk7CisgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgeworICAgICAgICBpZiAo
bV9ib29sVmFsdWUpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgidHJ1ZSIsIDQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiZmFsc2UiLCA1KTsKKyAgICB9
IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlRG91YmxlKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9
IFN0cmluZzo6Zm9ybWF0KCIlZiIsIG1fZG91YmxlVmFsdWUpOworICAgICAgICBvdXRwdXQtPmFw
cGVuZCh2YWx1ZS5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0aCgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CisgICAgZG91YmxlUXVvdGVT
dHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPYmplY3Q6
OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit7CisgICAgb3V0cHV0LT5h
cHBlbmQoJ3snKTsKKyAgICBmb3IgKERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9k
YXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQg
IT0gbV9kYXRhLmJlZ2luKCkpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgnLCcpOworICAg
ICAgICBkb3VibGVRdW90ZVN0cmluZyhpdC0+Zmlyc3QsIG91dHB1dCk7CisgICAgICAgIG91dHB1
dC0+YXBwZW5kKCc6Jyk7CisgICAgICAgIGl0LT5zZWNvbmQtPndyaXRlSlNPTihvdXRwdXQpOwor
ICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnfScpOworfQorCit2b2lkIEluc3BlY3RvckFycmF5
Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAoreworICAgIG91dHB1dC0+
YXBwZW5kKCdbJyk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEluc3BlY3RvckJhc2VWYWx1ZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4oKTsgaXQgIT0gbV9kYXRhLmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGlmIChpdCAhPSBtX2RhdGEuYmVnaW4oKSkKKyAgICAgICAgICAg
IG91dHB1dC0+YXBwZW5kKCcsJyk7CisgICAgICAgICgqaXQpLT53cml0ZUpTT04ob3V0cHV0KTsK
KyAgICB9CisgICAgb3V0cHV0LT5hcHBlbmQoJ10nKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNGMwMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0w
LDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JWYWx1ZXNfaAorI2RlZmluZSBJbnNwZWN0b3JW
YWx1ZXNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIlN0cmluZy5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JCYXNlVmFs
dWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYXNlVmFsdWU+IHsKK3B1YmxpYzoKKyAg
ICBJbnNwZWN0b3JCYXNlVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9CisgICAgdmlydHVh
bCB+SW5zcGVjdG9yQmFzZVZhbHVlKCkgeyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JCYXNlVmFsdWU+IG51bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JCYXNlVmFsdWUoKSk7CisgICAgfQorCisgICAgdHlwZWRlZiBlbnVtIHsKKyAg
ICAgICAgVHlwZU51bGwgPSAwLAorICAgICAgICBUeXBlQm9vbGVhbiwKKyAgICAgICAgVHlwZURv
dWJsZSwKKyAgICAgICAgVHlwZVN0cmluZywKKyAgICAgICAgVHlwZU9iamVjdCwKKyAgICAgICAg
VHlwZUFycmF5CisgICAgfSBUeXBlOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzZVZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5cGUo
dHlwZSkgeyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBJbnNw
ZWN0b3JWYWx1ZSA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlVmFsdWUgeworcHVibGljOgorCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNyZWF0ZShib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JWYWx1ZSh2YWx1ZSkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjcmVhdGUoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JWYWx1
ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBjcmVhdGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBJbnNwZWN0b3JWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBl
Qm9vbGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KKyAgICBleHBsaWNpdCBJbnNwZWN0b3JW
YWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9yQmFzZVZhbHVlKFR5cGVEb3VibGUpLCBtX2RvdWJs
ZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKGRv
dWJsZSB2YWx1ZSkgOiBJbnNwZWN0b3JCYXNlVmFsdWUoVHlwZURvdWJsZSksIG1fZG91YmxlVmFs
dWUodmFsdWUpIHsgfQorCisgICAgdW5pb24geworICAgICAgICBib29sIG1fYm9vbFZhbHVlOwor
ICAgICAgICBkb3VibGUgbV9kb3VibGVWYWx1ZTsKKyAgICB9OworfTsKKworY2xhc3MgSW5zcGVj
dG9yU3RyaW5nIDogcHVibGljIEluc3BlY3RvckJhc2VWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3RyaW5nKHZh
bHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBj
cmVhdGUoY29uc3QgY2hhciogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIDogSW5zcGVjdG9yQmFz
ZVZhbHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKyAgICBleHBsaWNp
dCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgY2hhciogdmFsdWUpIDogSW5zcGVjdG9yQmFzZVZhbHVl
KFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKworICAgIFN0cmluZyBtX3N0
cmluZ1ZhbHVlOworfTsKKworY2xhc3MgSW5zcGVjdG9yT2JqZWN0IDogcHVibGljIEluc3BlY3Rv
ckJhc2VWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3JPYmplY3QoKSk7CisgICAgfQorICAgIH5JbnNwZWN0b3JPYmplY3QoKSB7IH0KKworICAgIHZv
aWQgc2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOworICAgIHZvaWQgc2V0TnVtYmVy
KGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0KGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNlVmFsdWU+KTsKKworICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBJbnNwZWN0b3JPYmplY3QoKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBlT2JqZWN0KSB7IH0K
KyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yQmFzZVZhbHVlPiA+
IERpY3Rpb25hcnk7CisgICAgRGljdGlvbmFyeSBtX2RhdGE7Cit9OworCitjbGFzcyBJbnNwZWN0
b3JBcnJheSA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JBcnJheSgpKTsKKyAgICB9CisgICAgfkluc3BlY3Rv
ckFycmF5KCkgeyB9CisKKyAgICB2b2lkIHB1c2hCb29sKGJvb2wpOworICAgIHZvaWQgcHVzaE51
bWJlcihkb3VibGUpOworICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHB1c2goUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNlVmFsdWU+KTsKKyAgICB1bnNpZ25lZCBs
ZW5ndGgoKSB7IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5z
cGVjdG9yQXJyYXkoKSA6IEluc3BlY3RvckJhc2VWYWx1ZShUeXBlQXJyYXkpIHsgfQorICAgIFZl
Y3RvcjxSZWZQdHI8SW5zcGVjdG9yQmFzZVZhbHVlPiA+IG1fZGF0YTsKK307CisKK2lubGluZSB2
b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgdmFs
dWUpCit7CisgICAgbV9kYXRhLnNldChuYW1lLCBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHZhbHVl
KSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIG1fZGF0YS5zZXQobmFtZSwgSW5zcGVj
dG9yVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgbV9kYXRhLnNldChuYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOwor
fQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnNldChjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzZVZhbHVlPiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuc2V0
KG5hbWUsIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXk6OnB1c2hCb29s
KGJvb2wgdmFsdWUpCit7CisgICAgbV9kYXRhLmFwcGVuZChJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRl
KHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoTnVtYmVyKGRv
dWJsZSB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclZhbHVlOjpjcmVhdGUo
dmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXk6OnB1c2hTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclN0cmluZzo6
Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFzZVZhbHVlPiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5k
KHZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JWYWx1ZXNfaCkKKwo=
</data>
<flag name="review"
          id="42041"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57461</attachid>
            <date>2010-05-31 07:30:40 -0700</date>
            <delta_ts>2010-05-31 07:39:49 -0700</delta_ts>
            <desc>[patch] second iteration</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20568</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNhODg2Yy4uOTlkZDU3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNS0zMSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGFzc2VzIGZvciBuYXRpdmUgc2Vy
aWFsaXphdGlvbiB0byBKU09OIHdlcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDIwNAorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5JbnNwZWN0b3IuZXhwOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVR
dW90ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OnRvSlNP
TlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OndyaXRlSlNP
Tik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6Okluc3Bl
Y3RvckJhc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6On5J
bnNwZWN0b3JCYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzZVZhbHVl
OjpudWxsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZh
bHVlOjpJbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6SW5zcGVjdG9yU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck9iamVjdDo6fkluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPYmplY3Q6Okluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp+SW5zcGVj
dG9yQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6SW5zcGVjdG9yQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpzZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck9iamVjdDo6c2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5OjpwdXNoQm9vbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcnJheTo6cHVzaCk6CisKIDIwMTAtMDUtMzAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDli
OTUzMzAuLmZjNmI4MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMyOSw2ICsxMzI5LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rv
ci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCA1YmY2ZjA1Li4xZTcz
MGMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAorKysgYi9XZWJD
b3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMSwzICsxLDQgQEAKK19fWk5LN1dlYkNvcmUx
OEluc3BlY3RvckJhc2VWYWx1ZTEydG9KU09OU3RyaW5nRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjEwc2V0U2V0dGluZ0VSS05TXzZTdHJpbmdFUzNfCiBfX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZURlYnVnZ2VyRXYKIF9fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlUHJvZmlsZXJFYmIKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWI0YzU1OS4uNzNiMDBi
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE2OTYsNiArMTY5Niw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHREZWJ1
Z0xpc3RlbmVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggZDNlYjExNS4uY2M4N2EzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MTQsNiArNzE0LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAgXAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2Fk
ZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hp
dmVSZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
ZmNiYjdmNS4uYjJiNmNlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC00NDcxMyw2ICs0NDcxMywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JWYWx1ZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMTYxOTRlNy4uOWM4MjVkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMTQsNiArMTAxNCw4IEBACiAJCTRFMTk1OTJDMEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBGRTUgLyogTWVk
aWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAyMjBGRTUgLyog
TWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgKi87
IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyODBBMzlEQUND
MDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OworCQk0RjMyODlCNTExQTQyQUFCMDA1
QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGMzI4OUIzMTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JW
YWx1ZXMuY3BwICovOyB9OworCQk0RjMyODlCNjExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9y
VmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEZEOEQwRjIxMTlDNzE4QjAw
MkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZl
bnQuY3BwICovOyB9OwogCQk0RkQ4RDBGMzExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZEOEQw
RjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAqLzsgfTsKIAkJNTEwMTg0Njkw
QjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQ
YWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTY2MzYsNiArNjYzOCw4IEBACiAJCTRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTI3MEEz
OURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEUxOTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JWYWx1ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RjMyODlCNDExQTQy
QUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluc3BlY3RvclZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdD
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYg
LyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQ
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTIwNCw2ICsxMTIwOCw4IEBA
CiAJCQkJNDFGMDYxRkYwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggKi8s
CiAJCQkJNzU0MTMzQTkxMDJFMDBGNDAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwICovLAogCQkJCTc1NDEzM0E3MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmggKi8sCisJCQkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZh
bHVlcy5jcHAgKi8sCisJCQkJNEYzMjg5QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZh
bHVlcy5oICovLAogCQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JXb3Jr
ZXJSZXNvdXJjZS5oICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRFMDA4MUVGM0IgLyogbG9j
YWxpemVkU3RyaW5ncy5qcyAqLywKQEAgLTE5NDA4LDYgKzE5NDE0LDcgQEAKIAkJCQlDNTFEQTlB
NzExQUVGMkMxMDA5Nzk5QzUgLyogSURCSW5kZXhJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTFEQTlBOTExQUVGMkMxMDA5Nzk5QzUgLyogSURCSW5kZXhSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNUJCQzlEMTExQUVGODM4MDA3QzJCRkUgLyogSlNJREJJbmRleFJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JW
YWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE3MDcsNiArMjE3MTQsNyBAQAogCQkJCUM1MURB
OUE2MTFBRUYyQzEwMDk3OTlDNSAvKiBJREJJbmRleEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzUxREE5QTgxMUFFRjJDMTAwOTc5OUM1IC8qIElEQkluZGV4UmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNUJCQzlEMDExQUVGODM4MDA3QzJCRkUgLyogSlNJREJJbmRleFJlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OWU5MDAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFyIGMsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKK3sK
KyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICdcYic6IGRzdC0+YXBwZW5kKCJcXGIiLCAyKTsg
YnJlYWs7CisgICAgY2FzZSAnXGYnOiBkc3QtPmFwcGVuZCgiXFxmIiwgMik7IGJyZWFrOworICAg
IGNhc2UgJ1xuJzogZHN0LT5hcHBlbmQoIlxcbiIsIDIpOyBicmVhazsKKyAgICBjYXNlICdccic6
IGRzdC0+YXBwZW5kKCJcXHIiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXHQnOiBkc3QtPmFwcGVu
ZCgiXFx0IiwgMik7IGJyZWFrOworICAgIGNhc2UgJ1xcJzogZHN0LT5hcHBlbmQoIlxcXFwiLCAy
KTsgYnJlYWs7CisgICAgY2FzZSAnIic6IGRzdC0+YXBwZW5kKCJcXFwiIiwgMik7IGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
LCBWZWN0b3I8VUNoYXI+KiBkc3QpCit7CisgICAgZHN0LT5hcHBlbmQoJyInKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIg
YyA9IHN0cltpXTsKKyAgICAgICAgaWYgKCFlc2NhcGVDaGFyKGMsIGRzdCkpIHsKKyAgICAgICAg
ICAgIGlmIChjIDwgMzIgfHwgYyA+IDEyNiB8fCBjID09ICc8JyB8fCBjID09ICc+JykgeworICAg
ICAgICAgICAgICAgIC8vIDEuIEVzY2FwaW5nIDwsID4gdG8gcHJldmVudCBzY3JpcHQgZXhlY3V0
aW9uLgorICAgICAgICAgICAgICAgIC8vIDIuIFRlY2huaWNhbGx5LCB3ZSBjb3VsZCBhbHNvIHBh
c3MgdGhyb3VnaCBjID4gMTI2IGFzIFVURjgsIGJ1dCB0aGlzCisgICAgICAgICAgICAgICAgLy8g
ICAgaXMgYWxzbyBvcHRpb25hbC4gIEl0IHdvdWxkIGFsc28gYmUgYSBwYWluIHRvIGltcGxlbWVu
dCBoZXJlLgorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzeW1ib2wgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGMpOworICAgICAgICAgICAgICAgIFN0cmluZyBzeW1ib2xDb2RlID0g
U3RyaW5nOjpmb3JtYXQoIlxcdSUwNFgiLCBzeW1ib2wpOworICAgICAgICAgICAgICAgIGRzdC0+
YXBwZW5kKHN5bWJvbENvZGUuY2hhcmFjdGVycygpLCBzeW1ib2xDb2RlLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGRzdC0+YXBwZW5kKGMpOworICAgICAg
ICB9CisgICAgfQorICAgIGRzdC0+YXBwZW5kKCciJyk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JW
YWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDUxMik7CisgICAgd3JpdGVKU09OKCZyZXN1bHQp
OworICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlTnVsbCk7CisgICAgb3V0cHV0LT5hcHBl
bmQoIm51bGwiLCA0KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04o
VmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlw
ZUJvb2xlYW4gfHwgdHlwZSgpID09IFR5cGVEb3VibGUpOworICAgIGlmICh0eXBlKCkgPT0gVHlw
ZUJvb2xlYW4pIHsKKyAgICAgICAgaWYgKG1fYm9vbFZhbHVlKQorICAgICAgICAgICAgb3V0cHV0
LT5hcHBlbmQoInRydWUiLCA0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0cHV0LT5h
cHBlbmQoImZhbHNlIiwgNSk7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZURvdWJsZSkg
eworICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgiJWYiLCBtX2RvdWJsZVZh
bHVlKTsKKyAgICAgICAgb3V0cHV0LT5hcHBlbmQodmFsdWUuY2hhcmFjdGVycygpLCB2YWx1ZS5s
ZW5ndGgoKSk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFZl
Y3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSgpID09IFR5cGVT
dHJpbmcpOworICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFsdWUsIG91dHB1dCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdAoreworICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CisgICAgZm9yIChEaWN0aW9uYXJ5
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5iZWdpbigpOyBpdCAhPSBtX2RhdGEuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IG1fZGF0YS5iZWdpbigpKQorICAgICAgICAgICAg
b3V0cHV0LT5hcHBlbmQoJywnKTsKKyAgICAgICAgZG91YmxlUXVvdGVTdHJpbmcoaXQtPmZpcnN0
LCBvdXRwdXQpOworICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicpOworICAgICAgICBpdC0+c2Vj
b25kLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0LT5hcHBlbmQoJ30nKTsK
K30KKwordm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1
dCkgY29uc3QKK3sKKyAgICBvdXRwdXQtPmFwcGVuZCgnWycpOworICAgIGZvciAoVmVjdG9yPFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuYmVnaW4o
KTsgaXQgIT0gbV9kYXRhLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdCAhPSBtX2RhdGEu
YmVnaW4oKSkKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCcsJyk7CisgICAgICAgICgqaXQp
LT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICB9CisgICAgb3V0cHV0LT5hcHBlbmQoJ10nKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTYxZmYyZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JWYWx1ZXNf
aAorI2RlZmluZSBJbnNwZWN0b3JWYWx1ZXNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgIlN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitj
bGFzcyBJbnNwZWN0b3JWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9Cisg
ICAgdmlydHVhbCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBudWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yVmFsdWUoKSk7CisgICAgfQorCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAg
ICAgVHlwZU51bGwgPSAwLAorICAgICAgICBUeXBlQm9vbGVhbiwKKyAgICAgICAgVHlwZURvdWJs
ZSwKKyAgICAgICAgVHlwZVN0cmluZywKKyAgICAgICAgVHlwZU9iamVjdCwKKyAgICAgICAgVHlw
ZUFycmF5CisgICAgfSBUeXBlOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworCitwcm90ZWN0ZWQ6
CisgICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoVHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKSB7
IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIEluc3BlY3RvckJh
c2ljVmFsdWUgOiBwdWJsaWMgSW5zcGVjdG9yVmFsdWUgeworcHVibGljOgorCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGJvb2wgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBj
cmVhdGUoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFs
dWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9
CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9y
VmFsdWUoVHlwZURvdWJsZSksIG1fZG91YmxlVmFsdWUoKGRvdWJsZSl2YWx1ZSkgeyB9CisgICAg
ZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShkb3VibGUgdmFsdWUpIDogSW5zcGVjdG9yVmFs
dWUoVHlwZURvdWJsZSksIG1fZG91YmxlVmFsdWUodmFsdWUpIHsgfQorCisgICAgdW5pb24gewor
ICAgICAgICBib29sIG1fYm9vbFZhbHVlOworICAgICAgICBkb3VibGUgbV9kb3VibGVWYWx1ZTsK
KyAgICB9OworfTsKKworY2xhc3MgSW5zcGVjdG9yU3RyaW5nIDogcHVibGljIEluc3BlY3RvclZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJpbmc+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JTdHJpbmc+IGNyZWF0ZShjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1
ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IGNoYXIqIHZhbHVlKSA6
IEluc3BlY3RvclZhbHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKwor
ICAgIFN0cmluZyBtX3N0cmluZ1ZhbHVlOworfTsKKworY2xhc3MgSW5zcGVjdG9yT2JqZWN0IDog
cHVibGljIEluc3BlY3RvclZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3Rvck9iamVjdCgpKTsKKyAgICB9CisgICAgfkluc3BlY3Rvck9iamVjdCgpIHsg
fQorCisgICAgdm9pZCBzZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCk7CisgICAgdm9p
ZCBzZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOworICAgIHZvaWQgc2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXQoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgSW5zcGVjdG9yT2JqZWN0KCkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlT2JqZWN0KSB7
IH0KKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID4g
RGljdGlvbmFyeTsKKyAgICBEaWN0aW9uYXJ5IG1fZGF0YTsKK307CisKK2NsYXNzIEluc3BlY3Rv
ckFycmF5IDogcHVibGljIEluc3BlY3RvclZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yQXJyYXkoKSk7CisgICAgfQorICAgIH5JbnNwZWN0b3JBcnJh
eSgpIHsgfQorCisgICAgdm9pZCBwdXNoQm9vbChib29sKTsKKyAgICB2b2lkIHB1c2hOdW1iZXIo
ZG91YmxlKTsKKyAgICB2b2lkIHB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBw
dXNoKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7
IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZl
Y3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQXJy
YXkoKSA6IEluc3BlY3RvclZhbHVlKFR5cGVBcnJheSkgeyB9CisgICAgVmVjdG9yPFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gPiBtX2RhdGE7Cit9OworCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmpl
Y3Q6OnNldEJvb2woY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIG1fZGF0
YS5zZXQobmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lu
bGluZSB2b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
ZG91YmxlIHZhbHVlKQoreworICAgIG1fZGF0YS5zZXQobmFtZSwgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBt
X2RhdGEuc2V0KG5hbWUsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lu
bGluZSB2b2lkIEluc3BlY3Rvck9iamVjdDo6c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgbV9kYXRhLnNldChuYW1lLCB2YWx1
ZSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoQm9vbChib29sIHZhbHVl
KQoreworICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVl
KSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoTnVtYmVyKGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2
YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yU3RyaW5nOjpj
cmVhdGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXk6OnB1c2goUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgbV9kYXRhLmFwcGVuZCh2YWx1
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVmFsdWVzX2gpCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57463</attachid>
            <date>2010-05-31 07:39:49 -0700</date>
            <delta_ts>2010-05-31 07:53:08 -0700</delta_ts>
            <desc>[patch] third iteration. With fixes for linux build.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20572</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNhODg2Yy4uOTlkZDU3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNS0zMSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGFzc2VzIGZvciBuYXRpdmUgc2Vy
aWFsaXphdGlvbiB0byBKU09OIHdlcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDIwNAorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5JbnNwZWN0b3IuZXhwOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVR
dW90ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OnRvSlNP
TlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OndyaXRlSlNP
Tik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6Okluc3Bl
Y3RvckJhc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6On5J
bnNwZWN0b3JCYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzZVZhbHVl
OjpudWxsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZh
bHVlOjpJbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6SW5zcGVjdG9yU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck9iamVjdDo6fkluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPYmplY3Q6Okluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp+SW5zcGVj
dG9yQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6SW5zcGVjdG9yQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpzZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck9iamVjdDo6c2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5OjpwdXNoQm9vbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcnJheTo6cHVzaCk6CisKIDIwMTAtMDUtMzAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDli
OTUzMzAuLmZjNmI4MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMyOSw2ICsxMzI5LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rv
ci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCA1YmY2ZjA1Li44NWZh
YjljIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAorKysgYi9XZWJD
b3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMSwzICsxLDQgQEAKK19fWk5LN1dlYkNvcmUx
OEluc3BlY3RvclZhbHVlMTJ0b0pTT05TdHJpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMTBzZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KIF9fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlRGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyMTRlbmFibGVQcm9maWxlckViYgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1YjRjNTU5Li43M2IwMGJlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTY5Niw2ICsxNjk2LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
JywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1Nj
cmlwdEJyZWFrcG9pbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlz
dGVuZXIuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBkM2ViMTE1Li5jYzg3YTNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcxNCw2ICs3MTQsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBc
CiAgICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9h
cmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJl
c291cmNlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmY2Ji
N2Y1Li5iMmI2Y2VmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQ0
NzEzLDYgKzQ0NzEzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
c3BlY3RvclZhbHVlcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvcldvcmtlclJlc291cmNlLmgiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAxNjE5NGU3Li45YzgyNWQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTAxNCw2ICsxMDE0LDggQEAKIAkJNEUxOTU5MkMwQTM5REFDQzAw
MjIwRkU1IC8qIE1lZGlhUXVlcnlFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1
ZXJ5RXZhbHVhdG9yLmggKi87IH07CiAJCTRFMTk1OTJEMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRp
YVF1ZXJ5RXhwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRFMTk1OTI3MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLzsgfTsK
IAkJNEUxOTU5MkUwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI4MEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggKi87IH07CisJCTRGMzI4OUI1MTFBNDJBQUIwMDVBQkU3
RSAvKiBJbnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVl
cy5jcHAgKi87IH07CisJCTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMzI4
OUI0MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RkQ4RDBGMjExOUM3MThCMDAyRkE4
MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5j
cHAgKi87IH07CiAJCTRGRDhEMEYzMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMTEx
OUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oICovOyB9OwogCQk1MTAxODQ2OTBCMDg2
MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjYz
Niw2ICs2NjM4LDggQEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlF
dmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlF
dmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjcwQTM5REFD
QzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFs
dWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclZh
bHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGMzI4OUI0MTFBNDJBQUIw
MDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRG
RDhEMEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRHQ0V2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBD
YWNoZWRQYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjA0LDYgKzExMjA4LDggQEAKIAkJ
CQk0MUYwNjFGRjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCAqLywKIAkJ
CQk3NTQxMzNBOTEwMkUwMEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAg
Ki8sCiAJCQkJNzU0MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCAqLywKKwkJCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVz
LmNwcCAqLywKKwkJCQk0RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVz
LmggKi8sCiAJCQkJRjM3NUNDMDYxMTUwRDMwMDAwOEREQjgxIC8qIEluc3BlY3RvcldvcmtlclJl
c291cmNlLmggKi8sCiAJCQkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRD
YWxsRnJhbWUuaWRsICovLAogCQkJCUJDQzY0RjVGMERDRkI4NEUwMDgxRUYzQiAvKiBsb2NhbGl6
ZWRTdHJpbmdzLmpzICovLApAQCAtMTk0MDgsNiArMTk0MTQsNyBAQAogCQkJCUM1MURBOUE3MTFB
RUYyQzEwMDk3OTlDNSAvKiBJREJJbmRleEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MURB
OUE5MTFBRUYyQzEwMDk3OTlDNSAvKiBJREJJbmRleFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1QkJDOUQxMTFBRUY4MzgwMDdDMkJGRSAvKiBKU0lEQkluZGV4UmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNEYzMjg5QjYxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTcwNyw2ICsyMTcxNCw3IEBACiAJCQkJQzUxREE5QTYx
MUFFRjJDMTAwOTc5OUM1IC8qIElEQkluZGV4SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
NTFEQTlBODExQUVGMkMxMDA5Nzk5QzUgLyogSURCSW5kZXhSZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM1QkJDOUQwMTFBRUY4MzgwMDdDMkJGRSAvKiBKU0lEQkluZGV4UmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0RjMyODlCNTExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVj
dG9yVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5ZTkwMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTAs
MCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lu
bGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQoreworICAg
IHN3aXRjaCAoYykgeworICAgIGNhc2UgJ1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVh
azsKKyAgICBjYXNlICdcZic6IGRzdC0+YXBwZW5kKCJcXGYiLCAyKTsgYnJlYWs7CisgICAgY2Fz
ZSAnXG4nOiBkc3QtPmFwcGVuZCgiXFxuIiwgMik7IGJyZWFrOworICAgIGNhc2UgJ1xyJzogZHN0
LT5hcHBlbmQoIlxcciIsIDIpOyBicmVhazsKKyAgICBjYXNlICdcdCc6IGRzdC0+YXBwZW5kKCJc
XHQiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXFwnOiBkc3QtPmFwcGVuZCgiXFxcXCIsIDIpOyBi
cmVhazsKKyAgICBjYXNlICciJzogZHN0LT5hcHBlbmQoIlxcXCIiLCAyKTsgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFZl
Y3RvcjxVQ2hhcj4qIGRzdCkKK3sKKyAgICBkc3QtPmFwcGVuZCgnIicpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjID0g
c3RyW2ldOworICAgICAgICBpZiAoIWVzY2FwZUNoYXIoYywgZHN0KSkgeworICAgICAgICAgICAg
aWYgKGMgPCAzMiB8fCBjID4gMTI2IHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7CisgICAgICAg
ICAgICAgICAgLy8gMS4gRXNjYXBpbmcgPCwgPiB0byBwcmV2ZW50IHNjcmlwdCBleGVjdXRpb24u
CisgICAgICAgICAgICAgICAgLy8gMi4gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFsc28gcGFzcyB0
aHJvdWdoIGMgPiAxMjYgYXMgVVRGOCwgYnV0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICBp
cyBhbHNvIG9wdGlvbmFsLiAgSXQgd291bGQgYWxzbyBiZSBhIHBhaW4gdG8gaW1wbGVtZW50IGhl
cmUuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5bWJvbCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oYyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN5bWJvbENvZGUgPSBTdHJp
bmc6OmZvcm1hdCgiXFx1JTA0WCIsIHN5bWJvbCk7CisgICAgICAgICAgICAgICAgZHN0LT5hcHBl
bmQoc3ltYm9sQ29kZS5jaGFyYWN0ZXJzKCksIHN5bWJvbENvZGUubGVuZ3RoKCkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZHN0LT5hcHBlbmQoYyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZHN0LT5hcHBlbmQoJyInKTsKK30KKworU3RyaW5nIEluc3BlY3RvclZhbHVl
Ojp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoNTEyKTsKKyAgICB3cml0ZUpTT04oJnJlc3VsdCk7Cisg
ICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsKKyAgICBvdXRwdXQtPmFwcGVuZCgi
bnVsbCIsIDQpOworfQorCit2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0
b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9v
bGVhbiB8fCB0eXBlKCkgPT0gVHlwZURvdWJsZSk7CisgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9v
bGVhbikgeworICAgICAgICBpZiAobV9ib29sVmFsdWUpCisgICAgICAgICAgICBvdXRwdXQtPmFw
cGVuZCgidHJ1ZSIsIDQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVu
ZCgiZmFsc2UiLCA1KTsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlRG91YmxlKSB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCIlZiIsIG1fZG91YmxlVmFsdWUp
OworICAgICAgICBvdXRwdXQtPmFwcGVuZCh2YWx1ZS5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0
aCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9y
PFVDaGFyPiogb3V0cHV0KSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmlu
Zyk7CisgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKK30KKwor
dm9pZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNv
bnN0Cit7CisgICAgb3V0cHV0LT5hcHBlbmQoJ3snKTsKKyAgICBmb3IgKERpY3Rpb25hcnk6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytp
dCkgeworICAgICAgICBpZiAoaXQgIT0gbV9kYXRhLmJlZ2luKCkpCisgICAgICAgICAgICBvdXRw
dXQtPmFwcGVuZCgnLCcpOworICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhpdC0+Zmlyc3QsIG91
dHB1dCk7CisgICAgICAgIG91dHB1dC0+YXBwZW5kKCc6Jyk7CisgICAgICAgIGl0LT5zZWNvbmQt
PndyaXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnfScpOworfQor
Cit2b2lkIEluc3BlY3RvckFycmF5Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBj
b25zdAoreworICAgIG91dHB1dC0+YXBwZW5kKCdbJyk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRy
PEluc3BlY3RvclZhbHVlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5iZWdpbigpOyBp
dCAhPSBtX2RhdGEuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IG1fZGF0YS5iZWdp
bigpKQorICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKKyAgICAgICAgKCppdCktPndy
aXRlSlNPTihvdXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnXScpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hNjBiYjJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclZhbHVlc19oCisj
ZGVmaW5lIEluc3BlY3RvclZhbHVlc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsK
KworY2xhc3MgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1
ZT4geworcHVibGljOgorICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZU51bGwpIHsg
fQorICAgIHZpcnR1YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluc3BlY3RvclZhbHVlKCkpOworICAgIH0KKworICAgIHR5cGVkZWYgZW51bSB7Cisg
ICAgICAgIFR5cGVOdWxsID0gMCwKKyAgICAgICAgVHlwZUJvb2xlYW4sCisgICAgICAgIFR5cGVE
b3VibGUsCisgICAgICAgIFR5cGVTdHJpbmcsCisgICAgICAgIFR5cGVPYmplY3QsCisgICAgICAg
IFR5cGVBcnJheQorICAgIH0gVHlwZTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorCisgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIGV4cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5cGUodHlw
ZSkgeyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBJbnNwZWN0
b3JCYXNpY1ZhbHVlIDogcHVibGljIEluc3BlY3RvclZhbHVlIHsKK3B1YmxpYzoKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShib29sIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZh
bHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1
ZT4gY3JlYXRlKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29s
IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29sVmFsdWUodmFsdWUp
IHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZhbHVlKSA6IEluc3Bl
Y3RvclZhbHVlKFR5cGVEb3VibGUpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQor
ICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3Rv
clZhbHVlKFR5cGVEb3VibGUpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KKworICAgIHVuaW9u
IHsKKyAgICAgICAgYm9vbCBtX2Jvb2xWYWx1ZTsKKyAgICAgICAgZG91YmxlIG1fZG91YmxlVmFs
dWU7CisgICAgfTsKK307CisKK2NsYXNzIEluc3BlY3RvclN0cmluZyA6IHB1YmxpYyBJbnNwZWN0
b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5n
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yU3RyaW5nKHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hhciogdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUo
dmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1
ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9
CisKKyAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKK307CisKK2NsYXNzIEluc3BlY3Rvck9iamVj
dCA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JPYmplY3QoKSk7CisgICAgfQorICAgIH5JbnNwZWN0b3JPYmplY3Qo
KSB7IH0KKworICAgIHZvaWQgc2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOworICAg
IHZvaWQgc2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKKyAgICB2b2lkIHNl
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOworCisgICAg
dmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEluc3BlY3Rvck9iamVjdCgpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU9iamVj
dCkgeyB9CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiA+IERpY3Rpb25hcnk7CisgICAgRGljdGlvbmFyeSBtX2RhdGE7Cit9OworCitjbGFzcyBJbnNw
ZWN0b3JBcnJheSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckFycmF5KCkpOworICAgIH0KKyAgICB+SW5zcGVjdG9y
QXJyYXkoKSB7IH0KKworICAgIHZvaWQgcHVzaEJvb2woYm9vbCk7CisgICAgdm9pZCBwdXNoTnVt
YmVyKGRvdWJsZSk7CisgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgcHVzaChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CisgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluc3BlY3Rv
ckFycmF5KCkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlQXJyYXkpIHsgfQorICAgIFZlY3RvcjxSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+ID4gbV9kYXRhOworfTsKKworaW5saW5lIHZvaWQgSW5zcGVjdG9y
T2JqZWN0OjpzZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBt
X2RhdGEuc2V0KG5hbWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQor
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnNldE51bWJlcihjb25zdCBTdHJpbmcmIG5h
bWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuc2V0KG5hbWUsIEluc3BlY3RvckJhc2lj
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6
OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgbV9kYXRhLnNldChuYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOworfQor
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIG1fZGF0YS5zZXQobmFtZSwg
dmFsdWUpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaEJvb2woYm9vbCB2
YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2
YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcihkb3Vi
bGUgdmFsdWUpCit7CisgICAgbV9kYXRhLmFwcGVuZChJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVh
dGUodmFsdWUpKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXk6OnB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclN0cmlu
Zzo6Y3JlYXRlKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNo
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQo
dmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclZhbHVlc19oKQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57466</attachid>
            <date>2010-05-31 07:53:08 -0700</date>
            <delta_ts>2010-06-03 13:29:12 -0700</delta_ts>
            <desc>[patch] fourth iteration. With fixed mac export list.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20161</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNhODg2Yy4uOTlkZDU3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNS0zMSAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBDbGFzc2VzIGZvciBuYXRpdmUgc2Vy
aWFsaXphdGlvbiB0byBKU09OIHdlcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDIwNAorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5JbnNwZWN0b3IuZXhwOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZXNjYXBlQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVR
dW90ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OnRvSlNP
TlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6OndyaXRlSlNP
Tik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvck9iamVjdDo6d3JpdGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFycmF5Ojp3cml0ZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6Okluc3Bl
Y3RvckJhc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNlVmFsdWU6On5J
bnNwZWN0b3JCYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFzZVZhbHVl
OjpudWxsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2VWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZh
bHVlOjpJbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0cmluZzo6SW5zcGVjdG9yU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck9iamVjdDo6fkluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPYmplY3Q6Okluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojp+SW5zcGVj
dG9yQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6SW5zcGVjdG9yQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjpzZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck9iamVjdDo6c2V0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck9iamVjdDo6c2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5OjpwdXNoQm9vbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcnJheTo6cHVzaFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcnJheTo6cHVzaCk6CisKIDIwMTAtMDUtMzAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDli
OTUzMzAuLmZjNmI4MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMyOSw2ICsxMzI5LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z0xpc3RlbmVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1YjRjNTU5Li43M2IwMGJlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTY5Niw2
ICsxNjk2LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCisgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
V29ya2VyUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9p
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaCcsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBkM2ViMTE1Li5jYzg3YTNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcxNCw2ICs3MTQsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCiAgICAgaW5zcGVj
dG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hp
dmVGYWN0b3J5LmNwcCBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmY2JiN2Y1Li5iMmI2Y2Vm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQ0NzEzLDYgKzQ0NzEz
LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclZhbHVl
cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvcldvcmtlclJlc291cmNlLmgiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNjE5
NGU3Li45YzgyNWQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTAxNCw2ICsxMDE0LDggQEAKIAkJNEUxOTU5MkMwQTM5REFDQzAwMjIwRkU1IC8qIE1l
ZGlhUXVlcnlFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9y
LmggKi87IH07CiAJCTRFMTk1OTJEMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI3
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLzsgfTsKIAkJNEUxOTU5MkUw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI4MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRp
YVF1ZXJ5RXhwLmggKi87IH07CisJCTRGMzI4OUI1MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0
b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAgKi87IH07
CisJCTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMzI4OUI0MTFBNDJBQUIw
MDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0RkQ4RDBGMjExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0
R0NFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi87IH07CiAJ
CTRGRDhEMEYzMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMTExOUM3MThCMDAyRkE4
MjUgLyogU2NyaXB0R0NFdmVudC5oICovOyB9OwogCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYg
LyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjYzNiw2ICs2NjM4LDgg
QEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFdmFsdWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlFdmFsdWF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjcwQTM5REFDQzAwMjIwRkU1IC8q
IE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTky
ODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclZhbHVlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGMzI4OUI0MTFBNDJBQUIwMDVBQkU3RSAvKiBJ
bnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVj
dG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYwMTE5Qzcx
OEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjcmlwdEdDRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRHQ0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjA0LDYgKzExMjA4LDggQEAKIAkJCQk0MUYwNjFGRjBG
NUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCAqLywKIAkJCQk3NTQxMzNBOTEw
MkUwMEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgKi8sCiAJCQkJNzU0
MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCAqLywKKwkJ
CQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAqLywKKwkJ
CQk0RjMyODlCNDExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggKi8sCiAJCQkJ
RjM3NUNDMDYxMTUwRDMwMDAwOEREQjgxIC8qIEluc3BlY3RvcldvcmtlclJlc291cmNlLmggKi8s
CiAJCQkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaWRs
ICovLAogCQkJCUJDQzY0RjVGMERDRkI4NEUwMDgxRUYzQiAvKiBsb2NhbGl6ZWRTdHJpbmdzLmpz
ICovLApAQCAtMTk0MDgsNiArMTk0MTQsNyBAQAogCQkJCUM1MURBOUE3MTFBRUYyQzEwMDk3OTlD
NSAvKiBJREJJbmRleEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MURBOUE5MTFBRUYyQzEw
MDk3OTlDNSAvKiBJREJJbmRleFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QkJDOUQx
MTFBRUY4MzgwMDdDMkJGRSAvKiBKU0lEQkluZGV4UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNEYzMjg5QjYxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0yMTcwNyw2ICsyMTcxNCw3IEBACiAJCQkJQzUxREE5QTYxMUFFRjJDMTAwOTc5
OUM1IC8qIElEQkluZGV4SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTFEQTlBODExQUVG
MkMxMDA5Nzk5QzUgLyogSURCSW5kZXhSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1
QkJDOUQwMTFBRUY4MzgwMDdDMkJGRSAvKiBKU0lEQkluZGV4UmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0RjMyODlCNTExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5ZTkwMAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBib29sIGVz
Y2FwZUNoYXIoVUNoYXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQoreworICAgIHN3aXRjaCAoYykg
eworICAgIGNhc2UgJ1xiJzogZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVhazsKKyAgICBjYXNl
ICdcZic6IGRzdC0+YXBwZW5kKCJcXGYiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXG4nOiBkc3Qt
PmFwcGVuZCgiXFxuIiwgMik7IGJyZWFrOworICAgIGNhc2UgJ1xyJzogZHN0LT5hcHBlbmQoIlxc
ciIsIDIpOyBicmVhazsKKyAgICBjYXNlICdcdCc6IGRzdC0+YXBwZW5kKCJcXHQiLCAyKTsgYnJl
YWs7CisgICAgY2FzZSAnXFwnOiBkc3QtPmFwcGVuZCgiXFxcXCIsIDIpOyBicmVhazsKKyAgICBj
YXNlICciJzogZHN0LT5hcHBlbmQoIlxcXCIiLCAyKTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5l
IHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFZlY3RvcjxVQ2hhcj4q
IGRzdCkKK3sKKyAgICBkc3QtPmFwcGVuZCgnIicpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gc3RyW2ldOworICAg
ICAgICBpZiAoIWVzY2FwZUNoYXIoYywgZHN0KSkgeworICAgICAgICAgICAgaWYgKGMgPCAzMiB8
fCBjID4gMTI2IHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgLy8g
MS4gRXNjYXBpbmcgPCwgPiB0byBwcmV2ZW50IHNjcmlwdCBleGVjdXRpb24uCisgICAgICAgICAg
ICAgICAgLy8gMi4gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFsc28gcGFzcyB0aHJvdWdoIGMgPiAx
MjYgYXMgVVRGOCwgYnV0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyAgICBpcyBhbHNvIG9wdGlv
bmFsLiAgSXQgd291bGQgYWxzbyBiZSBhIHBhaW4gdG8gaW1wbGVtZW50IGhlcmUuCisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHN5bWJvbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
Yyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN5bWJvbENvZGUgPSBTdHJpbmc6OmZvcm1hdCgi
XFx1JTA0WCIsIHN5bWJvbCk7CisgICAgICAgICAgICAgICAgZHN0LT5hcHBlbmQoc3ltYm9sQ29k
ZS5jaGFyYWN0ZXJzKCksIHN5bWJvbENvZGUubGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgZHN0LT5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZHN0LT5hcHBlbmQoJyInKTsKK30KKworU3RyaW5nIEluc3BlY3RvclZhbHVlOjp0b0pTT05TdHJp
bmcoKSBjb25zdAoreworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlQ2FwYWNpdHkoNTEyKTsKKyAgICB3cml0ZUpTT04oJnJlc3VsdCk7CisgICAgcmV0dXJuIFN0
cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JW
YWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV90eXBlID09IFR5cGVOdWxsKTsKKyAgICBvdXRwdXQtPmFwcGVuZCgibnVsbCIsIDQpOwor
fQorCit2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBl
KCkgPT0gVHlwZURvdWJsZSk7CisgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgeworICAg
ICAgICBpZiAobV9ib29sVmFsdWUpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgidHJ1ZSIs
IDQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiZmFsc2UiLCA1
KTsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlRG91YmxlKSB7CisgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCIlZiIsIG1fZG91YmxlVmFsdWUpOworICAgICAgICBv
dXRwdXQtPmFwcGVuZCh2YWx1ZS5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0aCgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0
cHV0KSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CisgICAgZG91
YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKK30KKwordm9pZCBJbnNwZWN0
b3JPYmplY3Q6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Cit7CisgICAg
b3V0cHV0LT5hcHBlbmQoJ3snKTsKKyAgICBmb3IgKERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytpdCkgeworICAgICAg
ICBpZiAoaXQgIT0gbV9kYXRhLmJlZ2luKCkpCisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgn
LCcpOworICAgICAgICBkb3VibGVRdW90ZVN0cmluZyhpdC0+Zmlyc3QsIG91dHB1dCk7CisgICAg
ICAgIG91dHB1dC0+YXBwZW5kKCc6Jyk7CisgICAgICAgIGl0LT5zZWNvbmQtPndyaXRlSlNPTihv
dXRwdXQpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnfScpOworfQorCit2b2lkIEluc3Bl
Y3RvckFycmF5Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAoreworICAg
IG91dHB1dC0+YXBwZW5kKCdbJyk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZh
bHVlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YS5iZWdpbigpOyBpdCAhPSBtX2RhdGEu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IG1fZGF0YS5iZWdpbigpKQorICAgICAg
ICAgICAgb3V0cHV0LT5hcHBlbmQoJywnKTsKKyAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRw
dXQpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgnXScpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBiYjJj
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgK
QEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclZhbHVlc19oCisjZGVmaW5lIEluc3Bl
Y3RvclZhbHVlc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgSW5z
cGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1ZT4geworcHVibGlj
OgorICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZU51bGwpIHsgfQorICAgIHZpcnR1
YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gbnVsbCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvclZhbHVlKCkpOworICAgIH0KKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIFR5cGVO
dWxsID0gMCwKKyAgICAgICAgVHlwZUJvb2xlYW4sCisgICAgICAgIFR5cGVEb3VibGUsCisgICAg
ICAgIFR5cGVTdHJpbmcsCisgICAgICAgIFR5cGVPYmplY3QsCisgICAgICAgIFR5cGVBcnJheQor
ICAgIH0gVHlwZTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CisgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IEluc3BlY3RvclZhbHVlKFR5cGUgdHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CisKK3By
aXZhdGU6CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBJbnNwZWN0b3JCYXNpY1ZhbHVl
IDogcHVibGljIEluc3BlY3RvclZhbHVlIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShib29sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFz
aWNWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckJhc2ljVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKSA6IElu
c3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29sVmFsdWUodmFsdWUpIHsgfQorICAgIGV4
cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5
cGVEb3VibGUpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQorICAgIGV4cGxpY2l0
IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVE
b3VibGUpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KKworICAgIHVuaW9uIHsKKyAgICAgICAg
Ym9vbCBtX2Jvb2xWYWx1ZTsKKyAgICAgICAgZG91YmxlIG1fZG91YmxlVmFsdWU7CisgICAgfTsK
K307CisKK2NsYXNzIEluc3BlY3RvclN0cmluZyA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yU3RyaW5nKHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3RyaW5nPiBjcmVhdGUoY29uc3QgY2hhciogdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOworICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
IDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQor
ICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgOiBJbnNwZWN0
b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBTdHJp
bmcgbV9zdHJpbmdWYWx1ZTsKK307CisKK2NsYXNzIEluc3BlY3Rvck9iamVjdCA6IHB1YmxpYyBJ
bnNwZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JPYmplY3QoKSk7CisgICAgfQorICAgIH5JbnNwZWN0b3JPYmplY3QoKSB7IH0KKworICAg
IHZvaWQgc2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOworICAgIHZvaWQgc2V0TnVt
YmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldFN0cmluZyhjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOworCisgICAgdmlydHVhbCB2b2lk
IHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEluc3BlY3Rvck9iamVjdCgpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU9iamVjdCkgeyB9CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiA+IERpY3Rpb25h
cnk7CisgICAgRGljdGlvbmFyeSBtX2RhdGE7Cit9OworCitjbGFzcyBJbnNwZWN0b3JBcnJheSA6
IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckFycmF5KCkpOworICAgIH0KKyAgICB+SW5zcGVjdG9yQXJyYXkoKSB7IH0K
KworICAgIHZvaWQgcHVzaEJvb2woYm9vbCk7CisgICAgdm9pZCBwdXNoTnVtYmVyKGRvdWJsZSk7
CisgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcHVzaChQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4g
bV9kYXRhLnNpemUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNo
YXI+KiBvdXRwdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluc3BlY3RvckFycmF5KCkgOiBJ
bnNwZWN0b3JWYWx1ZShUeXBlQXJyYXkpIHsgfQorICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+ID4gbV9kYXRhOworfTsKKworaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0OjpzZXRC
b29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuc2V0KG5h
bWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JPYmplY3Q6OnNldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICBtX2RhdGEuc2V0KG5hbWUsIEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0
ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3Q6OnNldFN0cmluZyhj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbV9kYXRhLnNl
dChuYW1lLCBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JPYmplY3Q6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpOworfQor
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaEJvb2woYm9vbCB2YWx1ZSkKK3sKKyAg
ICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworfQor
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheTo6cHVzaE51bWJlcihkb3VibGUgdmFsdWUpCit7
CisgICAgbV9kYXRhLmFwcGVuZChJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsK
K30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXk6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZh
bHVlKSk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIG1fZGF0YS5hcHBlbmQodmFsdWUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclZhbHVlc19oKQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>