<?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>24524</bug_id>
          
          <creation_ts>2009-03-11 15:24:51 -0700</creation_ts>
          <short_desc>Introduce ScriptFunctionCall and ScriptObject abstractions</short_desc>
          <delta_ts>2009-03-13 14:32:03 -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>
          
          <blocked>24590</blocked>
    
    <blocked>24623</blocked>
    
    <blocked>24989</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113238</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-11 15:24:51 -0700</bug_when>
    <thetext>The reason for this change is two-fold:

1) Unfork Inspector controller by reducing and eventually removing JSC-specific code using lightweight abstractions.

2) Refactor InspectorController to reduce its complexity

I intentionally limited the scope of the change to InspectorDatabaseResource, because it seemed like a good starting point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113240</commentid>
    <comment_count>1</comment_count>
      <attachid>28496</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-11 15:30:06 -0700</bug_when>
    <thetext>Created attachment 28496
Introduce ScriptObject and ScriptFunctionCall abstractions, v1.

 WebCore/ChangeLog                               |   29 ++++++
 WebCore/GNUmakefile.am                          |    5 +
 WebCore/WebCore.pro                             |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj           |   20 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj       |   20 ++++
 WebCore/WebCoreSources.bkl                      |    2 +
 WebCore/bindings/js/ScriptFunctionCall.cpp      |  122 +++++++++++++++++++++++
 WebCore/bindings/js/ScriptFunctionCall.h        |   63 ++++++++++++
 WebCore/bindings/js/ScriptObject.cpp            |   63 ++++++++++++
 WebCore/bindings/js/ScriptObject.h              |   57 +++++++++++
 WebCore/bindings/js/ScriptObjectQuarantine.h    |   62 ++++++++++++
 WebCore/inspector/InspectorController.cpp       |   87 +---------------
 WebCore/inspector/InspectorController.h         |    4 -
 WebCore/inspector/InspectorDatabaseResource.cpp |   53 +++++++---
 WebCore/inspector/InspectorDatabaseResource.h   |   18 ++--
 15 files changed, 496 insertions(+), 111 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113243</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-03-11 15:44:07 -0700</bug_when>
    <thetext>Why does ScriptObject contain an ExecState?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113245</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-11 15:46:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Why does ScriptObject contain an ExecState?
&gt; 

I struggled with this and open to ideas. Current InspectorController holds on to both ContextRef and ObjectRef, and it seemed really appealing to keep them coupled in one object.

But I understand that if we view ScriptObject as a more general abstraction, it seems less logical.

I am very open to ideas here.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113251</commentid>
    <comment_count>4</comment_count>
      <attachid>28496</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-11 16:00:42 -0700</bug_when>
    <thetext>Comment on attachment 28496
Introduce ScriptObject and ScriptFunctionCall abstractions, v1.

Taking this out of review queue and marking obsolete. weinig schooled me and I am now on the right path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113410</commentid>
    <comment_count>5</comment_count>
      <attachid>28533</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-12 10:35:14 -0700</bug_when>
    <thetext>Created attachment 28533
Introduce ScriptObject and ScriptFunctionCall abstractions, v2.

 WebCore/ChangeLog                               |   29 ++++++
 WebCore/GNUmakefile.am                          |    5 +
 WebCore/WebCore.pro                             |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj           |   20 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj       |   20 ++++
 WebCore/WebCoreSources.bkl                      |    2 +
 WebCore/bindings/js/ScriptFunctionCall.cpp      |  121 +++++++++++++++++++++++
 WebCore/bindings/js/ScriptFunctionCall.h        |   64 ++++++++++++
 WebCore/bindings/js/ScriptObject.cpp            |   43 ++++++++
 WebCore/bindings/js/ScriptObject.h              |   52 ++++++++++
 WebCore/bindings/js/ScriptObjectQuarantine.h    |   62 ++++++++++++
 WebCore/inspector/InspectorController.cpp       |   87 +----------------
 WebCore/inspector/InspectorController.h         |    4 -
 WebCore/inspector/InspectorDatabaseResource.cpp |   54 +++++++---
 WebCore/inspector/InspectorDatabaseResource.h   |   19 ++--
 15 files changed, 473 insertions(+), 111 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113411</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-12 10:38:18 -0700</bug_when>
    <thetext>Sam, what do you think? Did I learn my ABCs? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113619</commentid>
    <comment_count>7</comment_count>
      <attachid>28584</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-13 10:37:27 -0700</bug_when>
    <thetext>Created attachment 28584
Introduce ScriptObject and ScriptFunctionCall abstractions, v2.1.

 WebCore/ChangeLog                               |   29 ++++++
 WebCore/GNUmakefile.am                          |    5 +
 WebCore/WebCore.pro                             |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj           |   20 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj       |   20 ++++
 WebCore/WebCoreSources.bkl                      |    2 +
 WebCore/bindings/js/ScriptFunctionCall.cpp      |  121 +++++++++++++++++++++++
 WebCore/bindings/js/ScriptFunctionCall.h        |   64 ++++++++++++
 WebCore/bindings/js/ScriptObject.cpp            |   43 ++++++++
 WebCore/bindings/js/ScriptObject.h              |   50 +++++++++
 WebCore/bindings/js/ScriptObjectQuarantine.h    |   62 ++++++++++++
 WebCore/bindings/js/ScriptValue.h               |    1 +
 WebCore/inspector/InspectorController.cpp       |   87 +----------------
 WebCore/inspector/InspectorController.h         |    4 -
 WebCore/inspector/InspectorDatabaseResource.cpp |   54 +++++++---
 WebCore/inspector/InspectorDatabaseResource.h   |   19 ++--
 16 files changed, 472 insertions(+), 111 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113622</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-13 10:45:02 -0700</bug_when>
    <thetext>New patch up, addressing some of the comments on IRC:

* ScriptObject now inherits from ScriptValue. Pretty.
* I thought about changing &quot;bind/unbind&quot; method names, but couldn&apos;t come up with anything that&apos;s not verbose. I am open to ideas here, but I think this is pretty intuitive already.
* Going away from JSC API. I understand the dogfoodiness aspect of it, and I appreciate the desire. In fact, my using bindings functions was merely an attempt to homogenize the code base, not a direct desire to get rid of it.

So, here&apos;s my idea: perhaps we could convert all Script* objects to use JSC API? This could be a nice little GSoC project? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113682</commentid>
    <comment_count>9</comment_count>
      <attachid>28584</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-03-13 13:49:38 -0700</bug_when>
    <thetext>Comment on attachment 28584
Introduce ScriptObject and ScriptFunctionCall abstractions, v2.1.

Looks good, only two comments.

Don&apos;t indent the functions in the .cpp files inside the namespace block.

And getQuarantinedScriptObject seems a little large to be an inline function, so that should likely have a .cpp file to contain the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113701</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-13 14:32:03 -0700</bug_when>
    <thetext>Comments addressed, landed as http://trac.webkit.org/changeset/41684.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>28496</attachid>
            <date>2009-03-11 15:30:06 -0700</date>
            <delta_ts>2009-03-11 16:00:42 -0700</delta_ts>
            <desc>Introduce ScriptObject and ScriptFunctionCall abstractions, v1.</desc>
            <filename>Introduce-ScriptObject-and-ScriptFunctionCall-abstractions-v1..patch</filename>
            <type>text/plain</type>
            <size>38178</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">YzhjM2QzOTQ0OWNhMTY5NGM0ZmRiODQ1OTJjNzI0NzljMWZhZTgzYQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYjVlYWEwLi4zNDQ1M2Y0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA5LTAzLTExICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTI0CisgICAg
ICAgIEludHJvZHVjZSBTY3JpcHRPYmplY3QgYW5kIFNjcmlwdEZ1bmN0aW9uQ2FsbCBhYnN0cmFj
dGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgU2NyaXB0T2JqZWN0IGFu
ZCBTY3JpcHRGdW5jdGlvbkNhbGwgdG8gcHJvamVjdC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKTog
dXNlIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cyk6IHVzZSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOjp1bmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZE9wZW5EYXRhYmFzZSk6IHVzZSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJp
bmQKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOiBSZW1vdmUgYWRk
U2NyaXB0RGF0YWJhc2VSZXNvdXJjZSBhbmQKKyAgICAgICAgcmVtb3ZlU2NyaXB0RGF0YWJhc2VS
ZXNvdXJjZSBkZWNsYXJhdGlvbnMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJpbmQpOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOiBBZGRlZCBiaW5kIGFuZCB1bmJpbmQg
ZGVjbGFyYXRpb25zLgorCiAyMDA5LTAzLTExICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBTY29ucyBidWlsZC4gUGF0Y2ggZnJvbSBBbGV4YW5k
ZXIgR3V5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggN2VmMzRmZC4uODgwOWJmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zNjgsNyArMzY4
LDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2suaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmggXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5j
ZS5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgXAorCVdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNv
ZGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDQ0YmE2MDAuLjgxNjJlMzUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDky
LDYgKzQ5Miw4IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFt
ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAgXAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBjMDU2YzJmLi5lOGYzMjA0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTE0NDc3LDEwICsxNDQ3NywzMCBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRGdW5jdGlv
bkNhbGwuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRJbnN0YW5jZS5oIg0KIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNj
cmlwdE9iamVjdC5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0T2JqZWN0LmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3Nc
anNcU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
CTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFNvdXJjZUNv
ZGUuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNmY2Nzk0My4uMjU1YmY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYyOSwxMSArNjI5LDE0IEBACiAJCTM3QUND
RjY5MERBNDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAy
IC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVz
cG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKKwkJNDEwMDJDQ0QwRjY2
RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OworCQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNh
bGwuY3BwICovOyB9OwogCQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZF
NzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3
NUJGMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFE
IC8qIFNjcmlwdENhbGxTdGFjay5jcHAgKi87IH07CiAJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCAqLzsgfTsKIAkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVD
QTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJNDE2RjQ1
RjAwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNj
cmlwdFN0cmluZy5oICovOyB9OworCQk0MTk1MzY1MTBGNjgyMjI0MDBEMEM2NzkgLyogU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuaCAqLzsgfTsKIAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogQ29u
dGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovOyB9OwogCQk0MUQw
MTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCAqLzsgfTsKQEAgLTY0OCw2ICs2NTEsOCBAQAogCQk0MUYwNjIwMjBG
NUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8q
IEluc3BlY3RvclJlc291cmNlLmNwcCAqLzsgfTsKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFD
IC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggKi87IH07CiAJCTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAv
KiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLzsgfTsKKwkJNDFGMDY2RTQwRjY0QkNGNjAwQTA3RUFD
IC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFGMDY2RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovOyB9
OworCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2NkUzMEY2NEJDRjYw
MEEwN0VBQyAvKiBTY3JpcHRPYmplY3QuY3BwICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBE
QTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUYxRDIxRTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAqLzsg
fTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJD
MEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IH07CkBAIC01
NTc4LDExICs1NTgzLDE0IEBACiAJCTM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVz
Y3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERl
c2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNw
b25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwMDJDQ0IwRjY2RURFRjAw
OUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdENhbGxTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBF
REY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBT
Y3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1
RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0T2JqZWN0UXVhcmFudGluZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYg
LyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnRlbnRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM5MEY0
QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb250ZW50VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTk4LDYgKzU2MDYsOCBAQAogCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9yUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYw
NjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAv
KiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdE9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjZFMzBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlw
dE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVD
MkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxRjFEMjFFMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMw
RTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTM0MjYsNyArMTM0MzYsMTIgQEAKIAkJCQk5M0I3MEQ1MzA5
RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJOTNCNzBENTQw
OUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3MjBF
NDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKKwkJCQk0MTAwMkND
QzBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLywKKwkJCQk0MTAw
MkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi8sCiAJCQkJOTM0
Q0MxMTYwRURDQUM3MzAwQTY1OEYyIC8qIFNjcmlwdEluc3RhbmNlLmggKi8sCisJCQkJNDFGMDY2
RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovLAorCQkJCTQxRjA2NkUzMEY2
NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRPYmplY3QuY3BwICovLAorCQkJCTQxOTUzNjUwMEY2ODIy
MjQwMEQwQzY3OSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmggKi8sCiAJCQkJOTM0Q0MxMDkw
RURCMjIzOTAwQTY1OEYyIC8qIFNjcmlwdFNvdXJjZUNvZGUuaCAqLywKIAkJCQk0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLywKIAkJCQk0MTZGNDVFRjBFRDdCMzEx
MDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8sCkBAIC0xNjU2OCw3ICsxNjU4MywxMCBAQAog
CQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwOEE0ODQ3ODBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxMDAyQ0NEMEY2NkVERUYwMDlF
NjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTE3
MEVEQ0FDNzMwMEE2NThGMiAvKiBTY3JpcHRJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDFGMDY2RTQwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDE5NTM2NTEwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRT
b3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYg
LyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgy
MTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMTg2MDMsNiArMTg2MjEs
OCBAQAogCQkJCUE4M0UxQzc0MEU0OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhBNDg0NzcwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlw
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExQzlEQjAwRUIzNjk5NTAwRTQwOURC
IC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDEwMDJD
Q0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xs
Vmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyog
U2Nyb2xsVmlld01hYy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCBhZmMxZDUz
Li4yNTQ0NjNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9X
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtMTIyLDYgKzEyMiw4IEBAIFRoaXMgZmlsZSBj
b250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAg
ICAgYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCisgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKyAgICAgICAg
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRW
YWx1ZS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQ1Y2E1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlw
dE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgY2hhciogbmFtZSkKKyAgICAgICAgOiBtX3RoaXNP
YmplY3QodGhpc09iamVjdCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlw
dE9iamVjdCYgYXJndW1lbnQpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJn
dW1lbnQuanNPYmplY3QoKSk7CisgICAgfQorCisgICAgdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudCkKKyAgICB7CisgICAg
ICAgIG1fYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudC5qc1ZhbHVlKCkpOworICAgIH0KKworICAg
IHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFy
Z3VtZW50KQorICAgIHsKKyAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV90aGlzT2JqZWN0LmV4ZWMoKSwgYXJndW1lbnQpKTsK
KyAgICB9CisKKyAgICBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYg
aGFkRXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV90aGlzT2Jq
ZWN0LmV4ZWMoKTsKKyAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3Qu
anNPYmplY3QoKTsKKworICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisKKyAgICAgICAgSlNW
YWx1ZVB0ciBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IG1fbmFtZSkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAg
ICBoYWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7
CisgICAgICAgIH0KKworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFs
dWUoKTsKKworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cyk7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIFNjcmlwdE9i
amVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pCisg
ICAgeworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3RoaXNPYmplY3QuZXhlYygpOworICAg
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOworCisg
ICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKworICAgICAgICBKU09iamVjdCogY29uc3RydWN0
b3IgPSBhc09iamVjdCh0aGlzT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBtX25h
bWUpKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGhh
ZEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgICAg
IENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGNvbnN0cnVjdG9yLT5nZXRDb25zdHJ1Y3RE
YXRhKGNvbnN0cnVjdERhdGEpOworICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1
Y3RUeXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKKworICAgICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBtX2FyZ3VtZW50cyk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMs
IGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gU2NyaXB0T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHJlc3VsdCkpOworICAgIH0KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMDkyZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2NyaXB0RnVuY3Rpb25DYWxsX2gKKyNkZWZpbmUgU2NyaXB0RnVu
Y3Rpb25DYWxsX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKKyNpbmNsdWRlIDxydW50
aW1lL0FyZ0xpc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFNjcmlwdFZh
bHVlOworCisgICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNv
bnN0IGNoYXIqIG5hbWUpOworICAgICAgICB2aXJ0dWFsIH5TY3JpcHRGdW5jdGlvbkNhbGwoKSB7
fTsKKworICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgcGFy
YW1ldGVyKTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYg
cGFyYW1ldGVyKTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIHBh
cmFtZXRlcik7CisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKTsK
KyAgICAgICAgU2NyaXB0T2JqZWN0IGNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pOworCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBTY3JpcHRPYmplY3QgbV90aGlzT2JqZWN0OworICAgICAg
ICBTdHJpbmcgbV9uYW1lOworICAgICAgICBKU0M6OkFyZ0xpc3QgbV9hcmd1bWVudHM7CisgICAg
ICAgIGJvb2wgbV9xdWFyYW50aW5lT2JqZWN0czsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI5YzZh
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3Bw
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
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
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0T2Jq
ZWN0LmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgPGludGVycHJl
dGVyL0NhbGxGcmFtZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NjcmlwdE9iamVjdDo6U2NyaXB0T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKKyAgICA6IG1fZXhlYyhleGVjKQorICAgICwgbV9vYmplY3Qob2JqZWN0
KQoreworfQorCitTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdCgpCisgICAgOiBtX2V4ZWMoMCkK
K3sKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6Omhhc05vVmFsdWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2V4ZWMgPT0gMDsKK30KKworSlNPYmplY3QqIFNjcmlwdE9iamVjdDo6anNPYmplY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBhc09iamVjdChtX29iamVjdCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2VjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlw
dE9iamVjdF9oCisjZGVmaW5lIFNjcmlwdE9iamVjdF9oCisKKyNpbmNsdWRlIDxydW50aW1lL1By
b3RlY3QuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xh
c3MgRXhlY1N0YXRlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTY3Jp
cHRPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0T2JqZWN0KEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCopOworICAgICAgICBTY3JpcHRPYmplY3QoKTsKKyAgICAgICAg
Ym9vbCBoYXNOb1ZhbHVlKCkgY29uc3Q7CisgICAgICAgIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0
KCkgY29uc3Q7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjKCkgY29uc3QgeyByZXR1cm4g
bV9leGVjOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsK
KyAgICAgICAgSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyIG1fb2JqZWN0OworICAgIH07CisKK30K
KworI2VuZGlmIC8vIFNjcmlwdE9iamVjdF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJi
ODQzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dFF1YXJhbnRpbmUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRPYmplY3RRdWFyYW50
aW5lX2gKKyNkZWZpbmUgU2NyaXB0T2JqZWN0UXVhcmFudGluZV9oCisKKyNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RlZE9i
amVjdFdyYXBwZXIuaCIKKworI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGJvb2wgZ2V0UXVhcmFu
dGluZWRTY3JpcHRPYmplY3QoRGF0YWJhc2UqIGRhdGFiYXNlLCBTY3JpcHRPYmplY3QmIHF1YXJh
bnRpbmVkT2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBkYXRhYmFzZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTRE9NV2luZG93KGZyYW1lKS0+Z2xvYmFsRXhlYygpOworCisgICAgICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgcXVhcmFudGluZWRPYmplY3QgPSBTY3JpcHRP
YmplY3QoZXhlYywgYXNPYmplY3QoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4ZWMs
IHRvSlMoZXhlYywgZGF0YWJhc2UpKSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworfQorCisjZW5kaWYgLy8gU2NyaXB0T2JqZWN0UXVhcmFudGluZV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDMzMjc5M2IuLjJhY2Q5MDUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMTg3LDcgKzExODcs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBk
YXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJh
c2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAgICAgIGFkZERhdGFiYXNlU2NyaXB0UmVz
b3VyY2UoKCppdCkuZ2V0KCkpOworICAgICAgICAoKml0KS0+YmluZChTY3JpcHRPYmplY3QodG9K
UyhtX3NjcmlwdENvbnRleHQpLCB0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9y
IGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CkBAIC0xMTk4LDgz
ICsxMTk4LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVj
dHMoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2Jq
ZWN0LCAicG9wdWxhdGVJbnRlcmZhY2UiKTsKIH0KIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLUpT
T2JqZWN0UmVmIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZERhdGFiYXNlU2NyaXB0UmVzb3VyY2Uo
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUX0FSRyhy
ZXNvdXJjZSwgcmVzb3VyY2UpOwotCi0gICAgaWYgKHJlc291cmNlLT5zY3JpcHRPYmplY3QpCi0g
ICAgICAgIHJldHVybiByZXNvdXJjZS0+c2NyaXB0T2JqZWN0OwotCi0gICAgQVNTRVJUKG1fc2Ny
aXB0Q29udGV4dCk7Ci0gICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsKLSAgICBpZiAoIW1fc2Ny
aXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
RnJhbWUqIGZyYW1lID0gcmVzb3VyY2UtPmRhdGFiYXNlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOwotCi0gICAgSlNWYWx1ZVJlZiBkYXRhYmFzZVByb3BlcnR5ID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigi
RGF0YWJhc2UiKS5nZXQoKSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRMRV9FWENFUFRJT04o
bV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpT
T2JqZWN0UmVmIGRhdGFiYXNlQ29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QobV9zY3JpcHRD
b250ZXh0LCBkYXRhYmFzZVByb3BlcnR5LCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VY
Q0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdpbmRvdyhmcmFtZSktPmdsb2JhbEV4ZWMo
KTsKLQotICAgIEpTVmFsdWVSZWYgZGF0YWJhc2U7Ci0KLSAgICB7Ci0gICAgICAgIEpTQzo6SlNM
b2NrIGxvY2soZmFsc2UpOwotICAgICAgICBkYXRhYmFzZSA9IHRvUmVmKEpTSW5zcGVjdGVkT2Jq
ZWN0V3JhcHBlcjo6d3JhcChleGVjLCB0b0pTKGV4ZWMsIHJlc291cmNlLT5kYXRhYmFzZS5nZXQo
KSkpKTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlUmVmIGRvbWFpblZhbHVlID0gSlNWYWx1ZU1ha2VT
dHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+ZG9tYWluKS5nZXQo
KSk7Ci0gICAgSlNWYWx1ZVJlZiBuYW1lVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3Njcmlw
dENvbnRleHQsIGpzU3RyaW5nUmVmKHJlc291cmNlLT5uYW1lKS5nZXQoKSk7Ci0gICAgSlNWYWx1
ZVJlZiB2ZXJzaW9uVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtX3NjcmlwdENvbnRleHQsIGpz
U3RyaW5nUmVmKHJlc291cmNlLT52ZXJzaW9uKS5nZXQoKSk7Ci0KLSAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0geyBkYXRhYmFzZSwgZG9tYWluVmFsdWUsIG5hbWVWYWx1ZSwgdmVyc2lvblZh
bHVlIH07Ci0gICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
cihtX3NjcmlwdENvbnRleHQsIGRhdGFiYXNlQ29uc3RydWN0b3IsIDQsIGFyZ3VtZW50cywgJmV4
Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNl
cHRpb24pKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAg
Y2FsbEZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJhZGREYXRhYmFz
ZSIsIDEsICZyZXN1bHQsIGV4Y2VwdGlvbik7Ci0KLSAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJlc291cmNlLT5zZXRTY3JpcHRPYmplY3QobV9zY3JpcHRDb250
ZXh0LCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpyZW1vdmVEYXRhYmFzZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIEFTU0VSVChtX3NjcmlwdENvbnRleHQpOwotICAg
IEFTU0VSVChtX3NjcmlwdE9iamVjdCk7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQgfHwgIW1f
c2NyaXB0T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocmVzb3VyY2UpOwot
ICAgIEFTU0VSVChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KTsKLSAgICBpZiAoIXJlc291cmNlIHx8
ICFyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVj
dFJlZiBzY3JpcHRPYmplY3QgPSByZXNvdXJjZS0+c2NyaXB0T2JqZWN0OwotICAgIHJlc291cmNl
LT5zZXRTY3JpcHRPYmplY3QoMCwgMCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
Ci0gICAgY2FsbEZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJyZW1v
dmVEYXRhYmFzZSIsIDEsICZzY3JpcHRPYmplY3QsIGV4Y2VwdGlvbik7Ci19Ci0jZW5kaWYKLQog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKIEpTT2JqZWN0UmVmIEluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZERPTVN0b3JhZ2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uq
IHJlc291cmNlKQogewpAQCAtMTQyMSwxMCArMTM0NCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzZXRTY3JpcHRPYmplY3RzKCkKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBE
YXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJl
c291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBp
dCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0
KSB7Ci0gICAgICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIHJlc291cmNlID0gKCppdCku
Z2V0KCk7Ci0gICAgICAgIHJlc291cmNlLT5zZXRTY3JpcHRPYmplY3QoMCwgMCk7Ci0gICAgfQor
ICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJl
c291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCisgICAgICAgICgqaXQp
LT51bmJpbmQoKTsKICNlbmRpZgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBET01TdG9y
YWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVz
b3VyY2VzLmVuZCgpOwpAQCAtMTc0OCw3ICsxNjY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRPcGVuRGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRv
bWEKICAgICBtX2RhdGFiYXNlUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CiAKICAgICBpZiAod2lu
ZG93VmlzaWJsZSgpKQotICAgICAgICBhZGREYXRhYmFzZVNjcmlwdFJlc291cmNlKHJlc291cmNl
LmdldCgpKTsKKyAgICAgICAgcmVzb3VyY2UtPmJpbmQoU2NyaXB0T2JqZWN0KHRvSlMobV9zY3Jp
cHRDb250ZXh0KSwgdG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMGZjM2JkZC4uNzk2ODU5NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMjg2LDEwICsyODYsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9jdW1l
bnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3VyY2Vz
KFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2VzKG1hcCk7IH0KIAotI2lmIEVOQUJM
RShEQVRBQkFTRSkKLSAgICBKU09iamVjdFJlZiBhZGREYXRhYmFzZVNjcmlwdFJlc291cmNlKElu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqKTsKLSAgICB2b2lkIHJlbW92ZURhdGFiYXNlU2NyaXB0
UmVzb3VyY2UoSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSopOwotI2VuZGlmCiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQogICAgIEpTT2JqZWN0UmVmIGFkZERPTVN0b3JhZ2VTY3JpcHRSZXNvdXJj
ZShJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqKTsKICAgICB2b2lkIHJlbW92ZURPTVN0b3Jh
Z2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAKaW5kZXggYzRhNTY4
My4uNGRiYmU1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAKQEAgLTMwLDM0ICszMCw1NyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQotCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oIgogCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCisjaW5jbHVk
ZSAiU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6Oklu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi0gICAg
ICAgIDogZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgZG9tYWluKGRvbWFpbikKLSAgICAg
ICAgLCBuYW1lKG5hbWUpCi0gICAgICAgICwgdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIHNj
cmlwdENvbnRleHQoMCkKLSAgICAgICAgLCBzY3JpcHRPYmplY3QoMCkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fZG9tYWluKGRvbWFpbikKKyAgICAgICAgLCBt
X25hbWUobmFtZSkKKyAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpzZXRTY3JpcHRPYmplY3QoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkKKyAgICB2b2lk
IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQoY29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJ
bnNwZWN0b3IpCiAgICAgewotICAgICAgICBpZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmpl
Y3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9i
amVjdCk7CisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3QuaGFzTm9WYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVCghd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUo
KSk7CisgICAgICAgIGlmICh3ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCByZXNvdXJjZUNvbnN0cnVjdG9y
KHdlYkluc3BlY3RvciwgIkRhdGFiYXNlIik7CisgICAgICAgIFNjcmlwdE9iamVjdCBkYXRhYmFz
ZTsKKyAgICAgICAgaWYgKCFnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChtX2RhdGFiYXNlLmdl
dCgpLCBkYXRhYmFzZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVzb3VyY2VD
b25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChkYXRhYmFzZSk7CisgICAgICAgIHJlc291cmNlQ29u
c3RydWN0b3IuYXBwZW5kQXJndW1lbnQobV9kb21haW4pOworICAgICAgICByZXNvdXJjZUNvbnN0
cnVjdG9yLmFwcGVuZEFyZ3VtZW50KG1fbmFtZSk7CisgICAgICAgIHJlc291cmNlQ29uc3RydWN0
b3IuYXBwZW5kQXJndW1lbnQobV92ZXJzaW9uKTsKIAotICAgICAgICBzY3JpcHRPYmplY3QgPSBu
ZXdTY3JpcHRPYmplY3Q7Ci0gICAgICAgIHNjcmlwdENvbnRleHQgPSBjb250ZXh0OworICAgICAg
ICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBtX3NjcmlwdE9iamVjdCA9IHJl
c291cmNlQ29uc3RydWN0b3IuY29uc3RydWN0KGhhZEV4Y2VwdGlvbik7CisgICAgICAgIGlmICho
YWRFeGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKChjb250
ZXh0ICYmIG5ld1NjcmlwdE9iamVjdCkgfHwgKCFjb250ZXh0ICYmICFuZXdTY3JpcHRPYmplY3Qp
KTsKLSAgICAgICAgaWYgKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAg
SlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2NyaXB0T2JqZWN0KTsKKyAgICAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGFkZERhdGFiYXNlKHdlYkluc3BlY3RvciwgImFkZERhdGFiYXNlIik7Cisg
ICAgICAgIGFkZERhdGFiYXNlLmFwcGVuZEFyZ3VtZW50KG1fc2NyaXB0T2JqZWN0KTsKKyAgICAg
ICAgYWRkRGF0YWJhc2UuY2FsbChoYWRFeGNlcHRpb24pOworICAgIH0KKworICAgIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6dW5iaW5kKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0
T2JqZWN0ID0gU2NyaXB0T2JqZWN0KCk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKaW5kZXgg
ZTNlMmJlNi4uYmJhOTJhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuaApAQCAtMzQsOCArMzQsOCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAog
I2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNDksMTcgKzQ5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShkYXRhYmFzZSwg
ZG9tYWluLCBuYW1lLCB2ZXJzaW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFNj
cmlwdE9iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKLQotICAgICAgICBSZWZQdHI8
RGF0YWJhc2U+IGRhdGFiYXNlOwotICAgICAgICBTdHJpbmcgZG9tYWluOwotICAgICAgICBTdHJp
bmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIHZlcnNpb247Ci0gICAgICAgIEpTQ29udGV4dFJlZiBz
Y3JpcHRDb250ZXh0OwotICAgICAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7CisgICAgICAg
IHZvaWQgYmluZChjb25zdCBTY3JpcHRPYmplY3QmIHdlYkluc3BlY3Rvcik7CisgICAgICAgIHZv
aWQgdW5iaW5kKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IG1fc2NyaXB0
T2JqZWN0OworCisgICAgICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICAgICAg
U3RyaW5nIG1fZG9tYWluOworICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgICAgICBTdHJpbmcg
bV92ZXJzaW9uOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28533</attachid>
            <date>2009-03-12 10:35:14 -0700</date>
            <delta_ts>2009-03-13 10:37:44 -0700</delta_ts>
            <desc>Introduce ScriptObject and ScriptFunctionCall abstractions, v2.</desc>
            <filename>Introduce-ScriptObject-and-ScriptFunctionCall-abstractions-v2..patch</filename>
            <type>text/plain</type>
            <size>37921</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZWFhMGRjODRiYzZmODgxMTA1M2Q2YzI2NTFlZDA0NzcyNjhkZWZmZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYjVlYWEwLi4zNDQ1M2Y0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA5LTAzLTExICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTI0CisgICAg
ICAgIEludHJvZHVjZSBTY3JpcHRPYmplY3QgYW5kIFNjcmlwdEZ1bmN0aW9uQ2FsbCBhYnN0cmFj
dGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgU2NyaXB0T2JqZWN0IGFu
ZCBTY3JpcHRGdW5jdGlvbkNhbGwgdG8gcHJvamVjdC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKTog
dXNlIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cyk6IHVzZSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOjp1bmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZE9wZW5EYXRhYmFzZSk6IHVzZSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJp
bmQKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOiBSZW1vdmUgYWRk
U2NyaXB0RGF0YWJhc2VSZXNvdXJjZSBhbmQKKyAgICAgICAgcmVtb3ZlU2NyaXB0RGF0YWJhc2VS
ZXNvdXJjZSBkZWNsYXJhdGlvbnMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJpbmQpOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOiBBZGRlZCBiaW5kIGFuZCB1bmJpbmQg
ZGVjbGFyYXRpb25zLgorCiAyMDA5LTAzLTExICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBTY29ucyBidWlsZC4gUGF0Y2ggZnJvbSBBbGV4YW5k
ZXIgR3V5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggN2VmMzRmZC4uODgwOWJmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zNjgsNyArMzY4
LDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2suaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmggXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5j
ZS5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgXAorCVdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNv
ZGUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDQ0YmE2MDAuLjgxNjJlMzUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDky
LDYgKzQ5Miw4IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFt
ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAgXAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBjMDU2YzJmLi5lOGYzMjA0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTE0NDc3LDEwICsxNDQ3NywzMCBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRGdW5jdGlv
bkNhbGwuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRJbnN0YW5jZS5oIg0KIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNj
cmlwdE9iamVjdC5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0T2JqZWN0LmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3Nc
anNcU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
CTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFNvdXJjZUNv
ZGUuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNmY2Nzk0My4uMjU1YmY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYyOSwxMSArNjI5LDE0IEBACiAJCTM3QUND
RjY5MERBNDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAy
IC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVz
cG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYw
NjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKKwkJNDEwMDJDQ0QwRjY2
RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OworCQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNh
bGwuY3BwICovOyB9OwogCQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZF
NzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3
NUJGMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFE
IC8qIFNjcmlwdENhbGxTdGFjay5jcHAgKi87IH07CiAJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCAqLzsgfTsKIAkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVD
QTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJNDE2RjQ1
RjAwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNj
cmlwdFN0cmluZy5oICovOyB9OworCQk0MTk1MzY1MTBGNjgyMjI0MDBEMEM2NzkgLyogU2NyaXB0
T2JqZWN0UXVhcmFudGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuaCAqLzsgfTsKIAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogQ29u
dGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovOyB9OwogCQk0MUQw
MTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCAqLzsgfTsKQEAgLTY0OCw2ICs2NTEsOCBAQAogCQk0MUYwNjIwMjBG
NUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8q
IEluc3BlY3RvclJlc291cmNlLmNwcCAqLzsgfTsKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFD
IC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggKi87IH07CiAJCTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAv
KiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLzsgfTsKKwkJNDFGMDY2RTQwRjY0QkNGNjAwQTA3RUFD
IC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFGMDY2RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovOyB9
OworCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2NkUzMEY2NEJDRjYw
MEEwN0VBQyAvKiBTY3JpcHRPYmplY3QuY3BwICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBE
QTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUYxRDIxRTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAqLzsg
fTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJD
MEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IH07CkBAIC01
NTc4LDExICs1NTgzLDE0IEBACiAJCTM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVz
Y3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERl
c2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNw
b25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwMDJDQ0IwRjY2RURFRjAw
OUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDEwMDJDQ0MwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdENhbGxTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBF
REY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBT
Y3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1
RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0T2JqZWN0UXVhcmFudGluZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYg
LyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnRlbnRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM5MEY0
QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb250ZW50VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTk4LDYgKzU2MDYsOCBAQAogCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9yUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYw
NjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAv
KiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdE9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjZFMzBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlw
dE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVD
MkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxRjFEMjFFMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMw
RTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTM0MjYsNyArMTM0MzYsMTIgQEAKIAkJCQk5M0I3MEQ1MzA5
RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJOTNCNzBENTQw
OUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3MjBF
NDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKKwkJCQk0MTAwMkND
QzBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLywKKwkJCQk0MTAw
MkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi8sCiAJCQkJOTM0
Q0MxMTYwRURDQUM3MzAwQTY1OEYyIC8qIFNjcmlwdEluc3RhbmNlLmggKi8sCisJCQkJNDFGMDY2
RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovLAorCQkJCTQxRjA2NkUzMEY2
NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRPYmplY3QuY3BwICovLAorCQkJCTQxOTUzNjUwMEY2ODIy
MjQwMEQwQzY3OSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmggKi8sCiAJCQkJOTM0Q0MxMDkw
RURCMjIzOTAwQTY1OEYyIC8qIFNjcmlwdFNvdXJjZUNvZGUuaCAqLywKIAkJCQk0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLywKIAkJCQk0MTZGNDVFRjBFRDdCMzEx
MDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8sCkBAIC0xNjU2OCw3ICsxNjU4MywxMCBAQAog
CQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwOEE0ODQ3ODBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxMDAyQ0NEMEY2NkVERUYwMDlF
NjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTE3
MEVEQ0FDNzMwMEE2NThGMiAvKiBTY3JpcHRJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDFGMDY2RTQwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDE5NTM2NTEwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRT
b3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYg
LyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgy
MTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMTg2MDMsNiArMTg2MjEs
OCBAQAogCQkJCUE4M0UxQzc0MEU0OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhBNDg0NzcwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlw
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExQzlEQjAwRUIzNjk5NTAwRTQwOURC
IC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDEwMDJD
Q0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xs
Vmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyog
U2Nyb2xsVmlld01hYy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCBhZmMxZDUz
Li4yNTQ0NjNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9X
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtMTIyLDYgKzEyMiw4IEBAIFRoaXMgZmlsZSBj
b250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAg
ICAgYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCisgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKyAgICAgICAg
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRW
YWx1ZS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI2OWRlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRl
KiBleGVjLCBjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUp
CisgICAgICAgIDogbV9leGVjKGV4ZWMpCisgICAgICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmpl
Y3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgU2Ny
aXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3Vt
ZW50KQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzT2JqZWN0
KCkpOworICAgIH0KKworICAgIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVu
dChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoYXJndW1lbnQuanNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKKyAgICB7
CisgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5k
KGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKKyAgICB9CisKKyAgICBTY3JpcHRWYWx1ZSBT
Y3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQorICAgIHsKKyAgICAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKKworICAg
ICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisKKyAgICAgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9
IHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBtX25hbWUpKTsKKyAg
ICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIHJlcG9ydEV4
Y2VwdGlvbihtX2V4ZWMsIG1fZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgaGFkRXhj
ZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisK
KyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cyk7CisgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24o
bV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIFNjcmlwdE9i
amVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pCisg
ICAgeworICAgICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVj
dCgpOworCisgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKworICAgICAgICBKU09iamVjdCog
Y29uc3RydWN0b3IgPSBhc09iamVjdCh0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVy
KG1fZXhlYywgbV9uYW1lKSkpOworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkg
eworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24o
KSk7CisgICAgICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IFNjcmlwdE9iamVjdCgpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOworICAgICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBjb25zdHJ1
Y3Rvci0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRhKTsKKyAgICAgICAgaWYgKGNvbnN0
cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gU2NyaXB0
T2JqZWN0KCk7CisKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBKU0M6OmNvbnN0cnVjdCht
X2V4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBtX2FyZ3Vt
ZW50cyk7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAg
ICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
ICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0
KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KGFzT2JqZWN0KHJl
c3VsdCkpOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDIwZjI2NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0RnVuY3Rpb25DYWxs
X2gKKyNkZWZpbmUgU2NyaXB0RnVuY3Rpb25DYWxsX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKKworI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgY2xhc3MgU2NyaXB0VmFsdWU7CisKKyAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBl
eGVjLCBjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpOwor
ICAgICAgICB2aXJ0dWFsIH5TY3JpcHRGdW5jdGlvbkNhbGwoKSB7fTsKKworICAgICAgICB2b2lk
IGFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgcGFyYW1ldGVyKTsKKyAgICAgICAg
dm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgcGFyYW1ldGVyKTsKKyAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIHBhcmFtZXRlcik7CisgICAgICAg
IFNjcmlwdFZhbHVlIGNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKTsKKyAgICAgICAgU2NyaXB0T2Jq
ZWN0IGNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pOworCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBTY3JpcHRTdGF0ZSogbV9leGVjOworICAgICAgICBTY3JpcHRPYmplY3QgbV90aGlzT2Jq
ZWN0OworICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgICAgICBKU0M6OkFyZ0xpc3QgbV9hcmd1
bWVudHM7CisgICAgICAgIGJvb2wgbV9xdWFyYW50aW5lT2JqZWN0czsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44MTc4Y2YwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRPYmplY3QuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2NyaXB0T2JqZWN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU2NyaXB0T2JqZWN0OjpTY3JpcHRPYmplY3QoSlNPYmplY3QqIG9iamVjdCkK
KyAgICA6IG1fb2JqZWN0KG9iamVjdCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDU0ZTIyMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0T2JqZWN0X2gKKyNkZWZp
bmUgU2NyaXB0T2JqZWN0X2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1Byb3RlY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgU2NyaXB0T2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdE9iamVjdChKU0M6
OkpTT2JqZWN0Kik7CisgICAgICAgIFNjcmlwdE9iamVjdCgpIHt9CisgICAgICAgIGJvb2wgaGFz
Tm9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX29iamVjdDsgfQorICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBqc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0M6OkpTT2JqZWN0PiBtX29iamVjdDsKKyAg
ICB9OworCit9CisKKyNlbmRpZiAvLyBTY3JpcHRPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmggYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zNTQ0ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRPYmplY3RRdWFyYW50aW5lLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0T2Jq
ZWN0UXVhcmFudGluZV9oCisjZGVmaW5lIFNjcmlwdE9iamVjdFF1YXJhbnRpbmVfaAorCisjaW5j
bHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjaW5jbHVkZSAiSlNJ
bnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBib29s
IGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KERhdGFiYXNlKiBkYXRhYmFzZSwgU2NyaXB0T2Jq
ZWN0JiBxdWFyYW50aW5lZE9iamVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhYmFzZSk7
CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZGF0YWJhc2UtPmRvY3VtZW50KCktPmZyYW1lKCk7
CisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdpbmRvdyhmcmFtZSktPmdsb2JhbEV4ZWMoKTsK
KworICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIHF1YXJhbnRpbmVkT2JqZWN0
ID0gU2NyaXB0T2JqZWN0KGFzT2JqZWN0KEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChl
eGVjLCB0b0pTKGV4ZWMsIGRhdGFiYXNlKSkpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK30KKworI2VuZGlmIC8vIFNjcmlwdE9iamVjdFF1YXJhbnRpbmVfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzMzI3OTNiLi5hNTQ5NmVhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTE4Nyw3ICsx
MTg3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMo
KQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0
b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERh
dGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBhZGREYXRhYmFzZVNjcmlw
dFJlc291cmNlKCgqaXQpLmdldCgpKTsKKyAgICAgICAgKCppdCktPmJpbmQodG9KUyhtX3Njcmlw
dENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKICNlbmRpZgog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVy
YXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwpAQCAtMTE5
OCw4MyArMTE5OCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRP
YmplY3RzKCkKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3Njcmlw
dE9iamVjdCwgInBvcHVsYXRlSW50ZXJmYWNlIik7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0Up
Ci1KU09iamVjdFJlZiBJbnNwZWN0b3JDb250cm9sbGVyOjphZGREYXRhYmFzZVNjcmlwdFJlc291
cmNlKEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIEFTU0VSVF9B
UkcocmVzb3VyY2UsIHJlc291cmNlKTsKLQotICAgIGlmIChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0
KQotICAgICAgICByZXR1cm4gcmVzb3VyY2UtPnNjcmlwdE9iamVjdDsKLQotICAgIEFTU0VSVCht
X3NjcmlwdENvbnRleHQpOwotICAgIEFTU0VSVChtX3NjcmlwdE9iamVjdCk7Ci0gICAgaWYgKCFt
X3NjcmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5kYXRhYmFzZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKLQotICAgIEpTVmFsdWVSZWYgZGF0YWJhc2VQcm9wZXJ0eSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwganNTdHJpbmdS
ZWYoIkRhdGFiYXNlIikuZ2V0KCksICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBU
SU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBKU09iamVjdFJlZiBkYXRhYmFzZUNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KG1fc2Ny
aXB0Q29udGV4dCwgZGF0YWJhc2VQcm9wZXJ0eSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRM
RV9FWENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlNET01XaW5kb3coZnJhbWUpLT5nbG9iYWxF
eGVjKCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRhdGFiYXNlOwotCi0gICAgewotICAgICAgICBKU0M6
OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgZGF0YWJhc2UgPSB0b1JlZihKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoZXhlYywgdG9KUyhleGVjLCByZXNvdXJjZS0+ZGF0YWJhc2Uu
Z2V0KCkpKSk7Ci0gICAgfQotCi0gICAgSlNWYWx1ZVJlZiBkb21haW5WYWx1ZSA9IEpTVmFsdWVN
YWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYocmVzb3VyY2UtPmRvbWFpbiku
Z2V0KCkpOwotICAgIEpTVmFsdWVSZWYgbmFtZVZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9z
Y3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+bmFtZSkuZ2V0KCkpOwotICAgIEpT
VmFsdWVSZWYgdmVyc2lvblZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0
LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+dmVyc2lvbikuZ2V0KCkpOwotCi0gICAgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSA9IHsgZGF0YWJhc2UsIGRvbWFpblZhbHVlLCBuYW1lVmFsdWUsIHZlcnNp
b25WYWx1ZSB9OwotICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3IobV9zY3JpcHRDb250ZXh0LCBkYXRhYmFzZUNvbnN0cnVjdG9yLCA0LCBhcmd1bWVudHMs
ICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwg
ZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQocmVzdWx0KTsKLQot
ICAgIGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAiYWRkRGF0
YWJhc2UiLCAxLCAmcmVzdWx0LCBleGNlcHRpb24pOwotCi0gICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KG1fc2NyaXB0
Q29udGV4dCwgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVtb3ZlRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRDb250ZXh0KTsK
LSAgICBBU1NFUlQobV9zY3JpcHRPYmplY3QpOwotICAgIGlmICghbV9zY3JpcHRDb250ZXh0IHx8
ICFtX3NjcmlwdE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHJlc291cmNl
KTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPnNjcmlwdE9iamVjdCk7Ci0gICAgaWYgKCFyZXNvdXJj
ZSB8fCAhcmVzb3VyY2UtPnNjcmlwdE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNP
YmplY3RSZWYgc2NyaXB0T2JqZWN0ID0gcmVzb3VyY2UtPnNjcmlwdE9iamVjdDsKLSAgICByZXNv
dXJjZS0+c2V0U2NyaXB0T2JqZWN0KDAsIDApOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSAwOwotICAgIGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAi
cmVtb3ZlRGF0YWJhc2UiLCAxLCAmc2NyaXB0T2JqZWN0LCBleGNlcHRpb24pOwotfQotI2VuZGlm
Ci0KICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiBKU09iamVjdFJlZiBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRET01TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlKiByZXNvdXJjZSkKIHsKQEAgLTE0MjEsMTAgKzEzNDQsOCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAg
ICAgRGF0YWJhc2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJh
c2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsg
KytpdCkgewotICAgICAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKiByZXNvdXJjZSA9ICgq
aXQpLmdldCgpOwotICAgICAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KDAsIDApOwotICAg
IH0KKyAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZGF0YWJh
c2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQorICAgICAgICAo
Kml0KS0+dW5iaW5kKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9N
U3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFn
ZVJlc291cmNlcy5lbmQoKTsKQEAgLTE3NDgsNyArMTY2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBkb21hCiAgICAgbV9kYXRhYmFzZVJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogCiAgICAgaWYg
KHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgYWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShyZXNv
dXJjZS5nZXQoKSk7CisgICAgICAgIHJlc291cmNlLT5iaW5kKHRvSlMobV9zY3JpcHRDb250ZXh0
KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDBmYzNiZGQuLjc5Njg1OTcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI4NiwxMCArMjg2
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCosIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXAgPSAwKTsKICAgICB2b2lkIHJlbW92ZUFsbFJlc291
cmNlcyhSZXNvdXJjZXNNYXAqIG1hcCkgeyBwcnVuZVJlc291cmNlcyhtYXApOyB9CiAKLSNpZiBF
TkFCTEUoREFUQUJBU0UpCi0gICAgSlNPYmplY3RSZWYgYWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJj
ZShJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKik7Ci0gICAgdm9pZCByZW1vdmVEYXRhYmFzZVNj
cmlwdFJlc291cmNlKEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqKTsKLSNlbmRpZgogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKICAgICBKU09iamVjdFJlZiBhZGRET01TdG9yYWdlU2NyaXB0UmVz
b3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKik7CiAgICAgdm9pZCByZW1vdmVET01T
dG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCmluZGV4IGM0
YTU2ODMuLmNkNDJkNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwCkBAIC0zMCwzNCArMzAsNTggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2lmIEVOQUJMRShEQVRBQkFTRSkKLQogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaCIKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
OjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQot
ICAgICAgICA6IGRhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIGRvbWFpbihkb21haW4pCi0g
ICAgICAgICwgbmFtZShuYW1lKQotICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKLSAgICAgICAg
LCBzY3JpcHRDb250ZXh0KDApCi0gICAgICAgICwgc2NyaXB0T2JqZWN0KDApCisgICAgICAgIDog
bV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX2RvbWFpbihkb21haW4pCisgICAgICAg
ICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCiAgICAgewogICAg
IH0KIAotICAgIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6c2V0U2NyaXB0T2JqZWN0
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCisgICAg
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNwZWN0b3IpCiAgICAgewotICAgICAgICBp
ZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5w
cm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7CisgICAgICAgIGlmICghbV9zY3Jp
cHRPYmplY3QuaGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFT
U0VSVChzY3JpcHRTdGF0ZSk7CisgICAgICAgIEFTU0VSVCghd2ViSW5zcGVjdG9yLmhhc05vVmFs
dWUoKSk7CisgICAgICAgIGlmICghc2NyaXB0U3RhdGUgfHwgd2ViSW5zcGVjdG9yLmhhc05vVmFs
dWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
cmVzb3VyY2VDb25zdHJ1Y3RvcihzY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yLCAiRGF0YWJhc2Ui
KTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IGRhdGFiYXNlOworICAgICAgICBpZiAoIWdldFF1YXJh
bnRpbmVkU2NyaXB0T2JqZWN0KG1fZGF0YWJhc2UuZ2V0KCksIGRhdGFiYXNlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICByZXNvdXJjZUNvbnN0cnVjdG9yLmFwcGVuZEFyZ3VtZW50
KGRhdGFiYXNlKTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudCht
X2RvbWFpbik7CisgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IuYXBwZW5kQXJndW1lbnQobV9u
YW1lKTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX3ZlcnNp
b24pOwogCi0gICAgICAgIHNjcmlwdE9iamVjdCA9IG5ld1NjcmlwdE9iamVjdDsKLSAgICAgICAg
c2NyaXB0Q29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFs
c2U7CisgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gcmVzb3VyY2VDb25zdHJ1Y3Rvci5jb25zdHJ1
Y3QoaGFkRXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGhhZEV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8
fCAoIWNvbnRleHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOwotICAgICAgICBpZiAoY29udGV4dCAm
JiBuZXdTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBu
ZXdTY3JpcHRPYmplY3QpOworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgYWRkRGF0YWJhc2Uo
c2NyaXB0U3RhdGUsIHdlYkluc3BlY3RvciwgImFkZERhdGFiYXNlIik7CisgICAgICAgIGFkZERh
dGFiYXNlLmFwcGVuZEFyZ3VtZW50KG1fc2NyaXB0T2JqZWN0KTsKKyAgICAgICAgYWRkRGF0YWJh
c2UuY2FsbChoYWRFeGNlcHRpb24pOworICAgIH0KKworICAgIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZTo6dW5iaW5kKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gU2Ny
aXB0T2JqZWN0KCk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKaW5kZXggZTNlMmJlNi4uMWJl
MjMzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uu
aApAQCAtMzQsOCArMzQsOSBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3Rh
dGUuaCIKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00OSwxNyArNTAsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwotCi0g
ICAgICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2U7Ci0gICAgICAgIFN0cmluZyBkb21haW47
Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgdmVyc2lvbjsKLSAgICAgICAg
SlNDb250ZXh0UmVmIHNjcmlwdENvbnRleHQ7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9i
amVjdDsKKyAgICAgICAgdm9pZCBiaW5kKFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0T2JqZWN0
JiB3ZWJJbnNwZWN0b3IpOworICAgICAgICB2b2lkIHVuYmluZCgpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShEYXRhYmFzZSosIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgICAgIFNjcmlwdE9iamVjdCBtX3NjcmlwdE9iamVjdDsKKworICAgICAgICBSZWZQdHI8RGF0
YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgICAgIFN0cmluZyBtX2RvbWFpbjsKKyAgICAgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICAgICAgU3RyaW5nIG1fdmVyc2lvbjsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28584</attachid>
            <date>2009-03-13 10:37:27 -0700</date>
            <delta_ts>2009-03-13 13:49:38 -0700</delta_ts>
            <desc>Introduce ScriptObject and ScriptFunctionCall abstractions, v2.1.</desc>
            <filename>Introduce-ScriptObject-and-ScriptFunctionCall-abstractions-v2.1..patch</filename>
            <type>text/plain</type>
            <size>38311</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">MzI4N2I3ZThhMGY2OTRkYmJlOWM4YjFiNmZmMjhmN2JiODUzYmUyZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjN2M2MDUxLi4wNjY1NWJj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA5LTAzLTExICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTI0CisgICAg
ICAgIEludHJvZHVjZSBTY3JpcHRPYmplY3QgYW5kIFNjcmlwdEZ1bmN0aW9uQ2FsbCBhYnN0cmFj
dGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgU2NyaXB0T2JqZWN0IGFu
ZCBTY3JpcHRGdW5jdGlvbkNhbGwgdG8gcHJvamVjdC4KKyAgICAgICAgKiBXZWJDb3JlLnBybzog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKTog
dXNlIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cyk6IHVzZSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOjp1bmJpbmQKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZE9wZW5EYXRhYmFzZSk6IHVzZSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJp
bmQKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOiBSZW1vdmUgYWRk
U2NyaXB0RGF0YWJhc2VSZXNvdXJjZSBhbmQKKyAgICAgICAgcmVtb3ZlU2NyaXB0RGF0YWJhc2VS
ZXNvdXJjZSBkZWNsYXJhdGlvbnMuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjp1bmJpbmQpOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOiBBZGRlZCBiaW5kIGFuZCB1bmJpbmQg
ZGVjbGFyYXRpb25zLgorCiAyMDA5LTAzLTEzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNmZm
OWVhMC4uODA0ZWQyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zNjksNyArMzY5LDEyIEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5oIFwKKwlXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaCBcCiAJV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmlu
Zy5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IGExNzQwYWMuLmFlNWFkNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDkzLDYgKzQ5Myw4IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAgXAogICAgIGJpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFjay5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIFwKKyAgICBi
aW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXAogICAgIGJyaWRn
ZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCAzZTNhYTM0Li4xZTYwNjc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTE0NDk3LDEwICsxNDQ5NywzMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0RnVuY3Rpb25D
YWxsLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRGdW5jdGlvbkNhbGwuaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xTY3JpcHRJbnN0YW5jZS5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdE9iamVjdC5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcU2NyaXB0T2JqZWN0LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0T2JqZWN0UXVhcmFu
dGluZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFNvdXJjZUNvZGUuaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZWNmYWIxNy4uNzVkZTUwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTYyOSwxMSArNjI5LDE0IEBACiAJCTM3QUNDRjY5MERBNDE0RTcwMDg5RTYwMiAv
KiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5j
cHAgKi87IH07CiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3Rjgx
OEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y4MThGRTBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVV
UkxSZXNwb25zZS5tbSAqLzsgfTsKKwkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlw
dEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICov
OyB9OworCQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0ND
MEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OwogCQk0MTZF
NzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3NUJGMEVERjhGRDcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5j
cHAgKi87IH07CiAJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUM5
MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsKIAkJNDE2RTc1Q0Mw
RURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQgLyog
U2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovOyB9Owor
CQk0MTk1MzY1MTBGNjgyMjI0MDBEMEM2NzkgLyogU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5NTM2NTAwRjY4
MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLzsgfTsKIAkJNDFDNzYw
QjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2Ny
aXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDAxNUM4MEY0QjVDNzEwMDRB
NjYyRiAvKiBDb250ZW50VHlwZS5oICovOyB9OwogCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYg
LyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLzsg
fTsKQEAgLTY0OCw2ICs2NTEsOCBAQAogCQk0MUYwNjIwMjBGNUYwQjY2MDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFGMDYyMDAwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNw
cCAqLzsgfTsKIAkJNDFGMDYyMTQwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRjA2MjEyMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgg
Ki87IH07CiAJCTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cCAqLzsgfTsKKwkJNDFGMDY2RTQwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDY2RTIwRjY0
QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovOyB9OworCQk0MUYwNjZFNTBGNjRCQ0Y2
MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2NkUzMEY2NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRPYmpl
Y3QuY3BwICovOyB9OwogCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGMUQyMjAw
RUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRTBFRjM1QzJBMDBEQTg3
NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCAqLzsgfTsKIAkJNDQxNTI5MkUwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IH07CkBAIC01NTgzLDExICs1NTg4LDE0IEBACiAJ
CTM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERlc2NyaXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3Jl
VVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0
aW9uQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRGdW5jdGlv
bkNhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEwMDJDQ0MwRjY2RURFRjAw
OUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2Ny
aXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUM5
MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRT
dHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE5NTM2NTAwRjY4MjIyNDAw
RDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250
ZW50VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50
VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NjAzLDYgKzU2MTEsOCBA
QAogCQk0MUYwNjIwMDBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUmVzb3VyY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMg
LyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYw
NjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MUYwNjZFMzBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdE9iamVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRD
YWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFF
MEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTM0MzksNyArMTM0NDksMTIgQEAKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyogU2Ny
aXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIFNj
cmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBCOUMgLyogU2Ny
aXB0Q29udHJvbGxlck1hYy5tbSAqLywKKwkJCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2MEQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLywKKwkJCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQg
LyogU2NyaXB0RnVuY3Rpb25DYWxsLmggKi8sCiAJCQkJOTM0Q0MxMTYwRURDQUM3MzAwQTY1OEYy
IC8qIFNjcmlwdEluc3RhbmNlLmggKi8sCisJCQkJNDFGMDY2RTIwRjY0QkNGNjAwQTA3RUFDIC8q
IFNjcmlwdE9iamVjdC5oICovLAorCQkJCTQxRjA2NkUzMEY2NEJDRjYwMEEwN0VBQyAvKiBTY3Jp
cHRPYmplY3QuY3BwICovLAorCQkJCTQxOTUzNjUwMEY2ODIyMjQwMEQwQzY3OSAvKiBTY3JpcHRP
YmplY3RRdWFyYW50aW5lLmggKi8sCiAJCQkJOTM0Q0MxMDkwRURCMjIzOTAwQTY1OEYyIC8qIFNj
cmlwdFNvdXJjZUNvZGUuaCAqLywKIAkJCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2Ny
aXB0U3RhdGUuaCAqLywKIAkJCQk0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3Ry
aW5nLmggKi8sCkBAIC0xNjU4MSw3ICsxNjU5NiwxMCBAQAogCQkJCTkzQjcwRDcwMDlFQjBDN0Mw
MDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEE0ODQ3
ODBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQxMDAyQ0NEMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlv
bkNhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTE3MEVEQ0FDNzMwMEE2NThGMiAvKiBT
Y3JpcHRJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDY2RTQwRjY0QkNGNjAwQTA3
RUFDIC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE5NTM2NTEwRjY4MjIy
NDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNENDMTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcu
aCBpbiBIZWFkZXJzICovLApAQCAtMTg2MTksNiArMTg2MzcsOCBAQAogCQkJCUE4M0UxQzc0MEU0
OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDhBNDg0NzcwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTExQzlEQjAwRUIzNjk5NTAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8q
IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUYwNjZFNTBGNjRC
Q0Y2MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNEND
MEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCBhYjBjODBlLi4zNjQyOTAzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbApAQCAtMTIyLDYgKzEyMiw4IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBm
aWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgYmluZGluZ3MvanMvU2NyaXB0
Q2FsbEZyYW1lLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCiAg
ICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisgICAgICAgIGJpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKyAgICAgICAgYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKICAgICAgICAgYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU1dlYktp
dENTU01hdHJpeENvbnN0cnVjdG9yLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OWRlYmYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RnVuY3Rpb25DYWxsLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRP
YmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgICAgIDogbV9leGVjKGV4
ZWMpCisgICAgICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCisgICAgICAgICwgbV9uYW1l
KG5hbWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBl
bmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAg
bV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzT2JqZWN0KCkpOworICAgIH0KKworICAgIHZv
aWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYg
YXJndW1lbnQpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQuanNW
YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKKyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJn
dW1lbnQpKTsKKyAgICB9CisKKyAgICBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNh
bGwoYm9vbCYgaGFkRXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKKworICAgICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisKKyAgICAgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2V4
ZWMsIElkZW50aWZpZXIobV9leGVjLCBtX25hbWUpKTsKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1fZXhl
Yy0+ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2Fs
bERhdGEoY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQor
ICAgICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisKKyAgICAgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzT2JqZWN0LCBtX2FyZ3VtZW50cyk7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTY3JpcHRW
YWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pCisgICAgeworICAgICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOworCisgICAgICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKKworICAgICAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBhc09iamVj
dCh0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgbV9uYW1lKSkpOwor
ICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOworICAg
ICAgICB9CisKKyAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOworICAgICAgICBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBjb25zdHJ1Y3Rvci0+Z2V0Q29uc3RydWN0RGF0
YShjb25zdHJ1Y3REYXRhKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisKKyAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBKU0M6OmNvbnN0cnVjdChtX2V4ZWMsIGNvbnN0cnVjdG9yLCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBtX2FyZ3VtZW50cyk7CisgICAgICAgIGlmICht
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24obV9l
eGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KGFzT2JqZWN0KHJlc3VsdCkpOworICAgIH0KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwZjI2NwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2NyaXB0RnVuY3Rpb25DYWxsX2gKKyNkZWZpbmUgU2NyaXB0RnVu
Y3Rpb25DYWxsX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2Ny
aXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKworI2luY2x1ZGUgPHJ1bnRp
bWUvQXJnTGlzdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgU2NyaXB0VmFs
dWU7CisKKyAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRPYmpl
Y3QmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgICAgICB2aXJ0dWFsIH5TY3Jp
cHRGdW5jdGlvbkNhbGwoKSB7fTsKKworICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0
IFNjcmlwdE9iamVjdCYgcGFyYW1ldGVyKTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChj
b25zdCBTY3JpcHRWYWx1ZSYgcGFyYW1ldGVyKTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVu
dChjb25zdCBTdHJpbmcmIHBhcmFtZXRlcik7CisgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoYm9v
bCYgaGFkRXhjZXB0aW9uKTsKKyAgICAgICAgU2NyaXB0T2JqZWN0IGNvbnN0cnVjdChib29sJiBo
YWRFeGNlcHRpb24pOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBTY3JpcHRTdGF0ZSogbV9l
eGVjOworICAgICAgICBTY3JpcHRPYmplY3QgbV90aGlzT2JqZWN0OworICAgICAgICBTdHJpbmcg
bV9uYW1lOworICAgICAgICBKU0M6OkFyZ0xpc3QgbV9hcmd1bWVudHM7CisgICAgICAgIGJvb2wg
bV9xdWFyYW50aW5lT2JqZWN0czsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTY3JpcHRGdW5jdGlvbkNhbGwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDhkYWM1Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NyaXB0T2Jq
ZWN0OjpTY3JpcHRPYmplY3QoSlNPYmplY3QqIG9iamVjdCkKKyAgICA6IFNjcmlwdFZhbHVlKG9i
amVjdCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmYTMyMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2NyaXB0T2JqZWN0X2gKKyNkZWZpbmUgU2NyaXB0T2JqZWN0X2gK
KworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBTY3JpcHRWYWx1ZSB7CisgICAgcHVi
bGljOgorICAgICAgICBTY3JpcHRPYmplY3QoSlNDOjpKU09iamVjdCopOworICAgICAgICBTY3Jp
cHRPYmplY3QoKSB7fQorICAgICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIGFzT2JqZWN0KGpzVmFsdWUoKSk7IH0KKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBT
Y3JpcHRPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmpl
Y3RRdWFyYW50aW5lLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRp
bmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQ0ZTM4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmgK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0T2JqZWN0UXVhcmFudGluZV9oCisjZGVmaW5l
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmVfaAorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJKU0RhdGFiYXNlLmgiCisjaW5jbHVkZSAiSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgi
CisKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2Jq
ZWN0KERhdGFiYXNlKiBkYXRhYmFzZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhYmFzZSk7CisKKyAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZGF0YWJhc2UtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
U0RPTVdpbmRvdyhmcmFtZSktPmdsb2JhbEV4ZWMoKTsKKworICAgICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CisgICAgICAgIHF1YXJhbnRpbmVkT2JqZWN0ID0gU2NyaXB0T2JqZWN0KGFzT2JqZWN0
KEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChleGVjLCB0b0pTKGV4ZWMsIGRhdGFiYXNl
KSkpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK30KKworI2VuZGlmIC8vIFNj
cmlwdE9iamVjdFF1YXJhbnRpbmVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IDM4
ZTI0OTEuLmE0YjZmNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKQEAgLTQyLDYgKzQy
LDcgQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgogICAgIFNj
cmlwdFZhbHVlKEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSA9IEpTQzo6bm9WYWx1ZSgpKSA6IG1fdmFs
dWUodmFsdWUpIHt9CisgICAgdmlydHVhbCB+U2NyaXB0VmFsdWUoKSB7fQogCiAgICAgSlNDOjpK
U1ZhbHVlUHRyIGpzVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAgICAg
Ym9vbCBnZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAwMjdkYTBmLi5hMGVjZWJjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTE4NSw3ICsxMTg1LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogI2lmIEVO
QUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0b3IgZGF0YWJh
c2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKERhdGFiYXNlUmVz
b3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBhZGREYXRhYmFzZVNjcmlwdFJlc291cmNl
KCgqaXQpLmdldCgpKTsKKyAgICAgICAgKCppdCktPmJpbmQodG9KUyhtX3NjcmlwdENvbnRleHQp
LCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKICNlbmRpZgogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21T
dG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwpAQCAtMTE5Niw4MyArMTE5
Niw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkK
ICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwg
InBvcHVsYXRlSW50ZXJmYWNlIik7CiB9CiAKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU09iamVj
dFJlZiBJbnNwZWN0b3JDb250cm9sbGVyOjphZGREYXRhYmFzZVNjcmlwdFJlc291cmNlKEluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIEFTU0VSVF9BUkcocmVzb3Vy
Y2UsIHJlc291cmNlKTsKLQotICAgIGlmIChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KQotICAgICAg
ICByZXR1cm4gcmVzb3VyY2UtPnNjcmlwdE9iamVjdDsKLQotICAgIEFTU0VSVChtX3NjcmlwdENv
bnRleHQpOwotICAgIEFTU0VSVChtX3NjcmlwdE9iamVjdCk7Ci0gICAgaWYgKCFtX3NjcmlwdENv
bnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZyYW1l
KiBmcmFtZSA9IHJlc291cmNlLT5kYXRhYmFzZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKLQotICAgIEpTVmFsdWVSZWYgZGF0YWJhc2VQcm9wZXJ0eSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkobV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwganNTdHJpbmdSZWYoIkRhdGFi
YXNlIikuZ2V0KCksICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2Ny
aXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBKU09iamVj
dFJlZiBkYXRhYmFzZUNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KG1fc2NyaXB0Q29udGV4
dCwgZGF0YWJhc2VQcm9wZXJ0eSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRMRV9FWENFUFRJ
T04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlNET01XaW5kb3coZnJhbWUpLT5nbG9iYWxFeGVjKCk7Ci0K
LSAgICBKU1ZhbHVlUmVmIGRhdGFiYXNlOwotCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBs
b2NrKGZhbHNlKTsKLSAgICAgICAgZGF0YWJhc2UgPSB0b1JlZihKU0luc3BlY3RlZE9iamVjdFdy
YXBwZXI6OndyYXAoZXhlYywgdG9KUyhleGVjLCByZXNvdXJjZS0+ZGF0YWJhc2UuZ2V0KCkpKSk7
Ci0gICAgfQotCi0gICAgSlNWYWx1ZVJlZiBkb21haW5WYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5n
KG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYocmVzb3VyY2UtPmRvbWFpbikuZ2V0KCkpOwot
ICAgIEpTVmFsdWVSZWYgbmFtZVZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250
ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+bmFtZSkuZ2V0KCkpOwotICAgIEpTVmFsdWVSZWYg
dmVyc2lvblZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmlu
Z1JlZihyZXNvdXJjZS0+dmVyc2lvbikuZ2V0KCkpOwotCi0gICAgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSA9IHsgZGF0YWJhc2UsIGRvbWFpblZhbHVlLCBuYW1lVmFsdWUsIHZlcnNpb25WYWx1ZSB9
OwotICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IobV9z
Y3JpcHRDb250ZXh0LCBkYXRhYmFzZUNvbnN0cnVjdG9yLCA0LCBhcmd1bWVudHMsICZleGNlcHRp
b24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0aW9u
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGNhbGxG
dW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAiYWRkRGF0YWJhc2UiLCAx
LCAmcmVzdWx0LCBleGNlcHRpb24pOwotCi0gICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KG1fc2NyaXB0Q29udGV4dCwg
cmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlKiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRDb250ZXh0KTsKLSAgICBBU1NF
UlQobV9zY3JpcHRPYmplY3QpOwotICAgIGlmICghbV9zY3JpcHRDb250ZXh0IHx8ICFtX3Njcmlw
dE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICBB
U1NFUlQocmVzb3VyY2UtPnNjcmlwdE9iamVjdCk7Ci0gICAgaWYgKCFyZXNvdXJjZSB8fCAhcmVz
b3VyY2UtPnNjcmlwdE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmplY3RSZWYg
c2NyaXB0T2JqZWN0ID0gcmVzb3VyY2UtPnNjcmlwdE9iamVjdDsKLSAgICByZXNvdXJjZS0+c2V0
U2NyaXB0T2JqZWN0KDAsIDApOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAg
IGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAicmVtb3ZlRGF0
YWJhc2UiLCAxLCAmc2NyaXB0T2JqZWN0LCBleGNlcHRpb24pOwotfQotI2VuZGlmCi0KICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCiBKU09iamVjdFJlZiBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRE
T01TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiByZXNv
dXJjZSkKIHsKQEAgLTE0MTksMTAgKzEzNDIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJh
c2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJj
ZXMuZW5kKCk7Ci0gICAgZm9yIChEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBt
X2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkgewot
ICAgICAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKiByZXNvdXJjZSA9ICgqaXQpLmdldCgp
OwotICAgICAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KDAsIDApOwotICAgIH0KKyAgICBm
b3IgKERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQorICAgICAgICAoKml0KS0+dW5i
aW5kKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJl
c291cmNlc1NldDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNl
cy5lbmQoKTsKQEAgLTE3NDYsNyArMTY2Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21hCiAg
ICAgbV9kYXRhYmFzZVJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogCiAgICAgaWYgKHdpbmRvd1Zp
c2libGUoKSkKLSAgICAgICAgYWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShyZXNvdXJjZS5nZXQo
KSk7CisgICAgICAgIHJlc291cmNlLT5iaW5kKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0
T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDBmYzNiZGQuLjc5Njg1OTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI4NiwxMCArMjg2LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCosIERvY3VtZW50TG9h
ZGVyKiBsb2FkZXJUb0tlZXAgPSAwKTsKICAgICB2b2lkIHJlbW92ZUFsbFJlc291cmNlcyhSZXNv
dXJjZXNNYXAqIG1hcCkgeyBwcnVuZVJlc291cmNlcyhtYXApOyB9CiAKLSNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgSlNPYmplY3RSZWYgYWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlKik7Ci0gICAgdm9pZCByZW1vdmVEYXRhYmFzZVNjcmlwdFJlc291
cmNlKEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqKTsKLSNlbmRpZgogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKICAgICBKU09iamVjdFJlZiBhZGRET01TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKik7CiAgICAgdm9pZCByZW1vdmVET01TdG9yYWdlU2Ny
aXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCmluZGV4IGM0YTU2ODMuLmNk
NDJkNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuY3BwCkBAIC0zMCwzNCArMzAsNTggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lmIEVO
QUJMRShEQVRBQkFTRSkKLQogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIK
IAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNj
cmlwdE9iamVjdFF1YXJhbnRpbmUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21h
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotICAgICAgICA6
IGRhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIGRvbWFpbihkb21haW4pCi0gICAgICAgICwg
bmFtZShuYW1lKQotICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBzY3JpcHRD
b250ZXh0KDApCi0gICAgICAgICwgc2NyaXB0T2JqZWN0KDApCisgICAgICAgIDogbV9kYXRhYmFz
ZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX2RvbWFpbihkb21haW4pCisgICAgICAgICwgbV9uYW1l
KG5hbWUpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6c2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCisgICAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlOjpiaW5kKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNwZWN0b3IpCiAgICAgewotICAgICAgICBpZiAoc2NyaXB0
Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KHNj
cmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7CisgICAgICAgIGlmICghbV9zY3JpcHRPYmplY3Qu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChzY3Jp
cHRTdGF0ZSk7CisgICAgICAgIEFTU0VSVCghd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSk7Cisg
ICAgICAgIGlmICghc2NyaXB0U3RhdGUgfHwgd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgcmVzb3VyY2VD
b25zdHJ1Y3RvcihzY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yLCAiRGF0YWJhc2UiKTsKKyAgICAg
ICAgU2NyaXB0T2JqZWN0IGRhdGFiYXNlOworICAgICAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2Ny
aXB0T2JqZWN0KG1fZGF0YWJhc2UuZ2V0KCksIGRhdGFiYXNlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICByZXNvdXJjZUNvbnN0cnVjdG9yLmFwcGVuZEFyZ3VtZW50KGRhdGFiYXNl
KTsKKyAgICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX2RvbWFpbik7
CisgICAgICAgIHJlc291cmNlQ29uc3RydWN0b3IuYXBwZW5kQXJndW1lbnQobV9uYW1lKTsKKyAg
ICAgICAgcmVzb3VyY2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX3ZlcnNpb24pOwogCi0g
ICAgICAgIHNjcmlwdE9iamVjdCA9IG5ld1NjcmlwdE9iamVjdDsKLSAgICAgICAgc2NyaXB0Q29u
dGV4dCA9IGNvbnRleHQ7CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CisgICAg
ICAgIG1fc2NyaXB0T2JqZWN0ID0gcmVzb3VyY2VDb25zdHJ1Y3Rvci5jb25zdHJ1Y3QoaGFkRXhj
ZXB0aW9uKTsKKyAgICAgICAgaWYgKGhhZEV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRl
eHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOwotICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3Jp
cHRPYmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRP
YmplY3QpOworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgYWRkRGF0YWJhc2Uoc2NyaXB0U3Rh
dGUsIHdlYkluc3BlY3RvciwgImFkZERhdGFiYXNlIik7CisgICAgICAgIGFkZERhdGFiYXNlLmFw
cGVuZEFyZ3VtZW50KG1fc2NyaXB0T2JqZWN0KTsKKyAgICAgICAgYWRkRGF0YWJhc2UuY2FsbCho
YWRFeGNlcHRpb24pOworICAgIH0KKworICAgIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZTo6dW5iaW5kKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gU2NyaXB0T2JqZWN0
KCk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgKaW5kZXggZTNlMmJlNi4uMWJlMjMzNCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaApAQCAtMzQs
OCArMzQsOSBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIAot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC00OSwxNyArNTAsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKGRhdGFi
YXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
c2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwotCi0gICAgICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2U7Ci0gICAgICAgIFN0cmluZyBkb21haW47Ci0gICAgICAg
IFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgdmVyc2lvbjsKLSAgICAgICAgSlNDb250ZXh0
UmVmIHNjcmlwdENvbnRleHQ7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdDsKKyAg
ICAgICAgdm9pZCBiaW5kKFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0T2JqZWN0JiB3ZWJJbnNw
ZWN0b3IpOworICAgICAgICB2b2lkIHVuYmluZCgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgZG9tYWlu
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgICAgIFNj
cmlwdE9iamVjdCBtX3NjcmlwdE9iamVjdDsKKworICAgICAgICBSZWZQdHI8RGF0YWJhc2U+IG1f
ZGF0YWJhc2U7CisgICAgICAgIFN0cmluZyBtX2RvbWFpbjsKKyAgICAgICAgU3RyaW5nIG1fbmFt
ZTsKKyAgICAgICAgU3RyaW5nIG1fdmVyc2lvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="14065"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>