<?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>108015</bug_id>
          
          <creation_ts>2013-01-26 14:58:55 -0800</creation_ts>
          <short_desc>Refactor XPCService initialization to make it easier to add more services</short_desc>
          <delta_ts>2013-01-26 16:41:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817269</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-26 14:58:55 -0800</bug_when>
    <thetext>Refactor XPCService initialization to make it easier to add more services</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817271</commentid>
    <comment_count>1</comment_count>
      <attachid>184887</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-26 15:02:58 -0800</bug_when>
    <thetext>Created attachment 184887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817281</commentid>
    <comment_count>2</comment_count>
      <attachid>184887</attachid>
    <who name="">mitz</who>
    <bug_when>2013-01-26 16:20:25 -0800</bug_when>
    <thetext>Comment on attachment 184887
Patch

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

r=me if you fix the macro name, but feel free to address other comments.

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:30
&gt; +#error XPC_SERVICE_INITIALIZER must be defined.

The XPC_ prefix for use by XPC. Please prefix this with something WebKit-specific.

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:63
&gt; +                // Setup the posix_spawn attributes.

s/Setup/Set up/. What is this comment for anyway?

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:83
&gt; +                // Set the architecture.
&gt; +                cpu_type_t cpuTypes[] = { (cpu_type_t)xpc_dictionary_get_uint64(event, &quot;architecture&quot;) };
&gt; +                size_t outCount = 0;
&gt; +                posix_spawnattr_setbinpref_np(&amp;attr, 1, cpuTypes, &amp;outCount);

Why is this stuck in the middle of the section that sets the flags?

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:95
&gt; +                // Setup the command line.

s/Setup/Set up/. What is this comment for anyway?

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:100
&gt; +                // Setup the environment.

Ditto.

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:113
&gt; +                    size_t stringLength = strlen(string);
&gt; +
&gt; +                    char* environmentVariable = (char*)malloc(stringLength + 1);
&gt; +                    memcpy(environmentVariable, string, stringLength);
&gt; +                    environmentVariable[stringLength] = &apos;\0&apos;;
&gt; +
&gt; +                    environment[i] = environmentVariable;

Isn’t this equivalent to:
    environment[i] = strdup(environmentVariable)
? Why is this required and a simple environment[i] = environmentVariable won’t do? Are the pointers in the environment parameter required to stay valid after the call to posix_spawn?

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:122
&gt; +                NSLog(@&quot;Unable to re-exec for path: %s\n&quot;, path);

No need for \n in NSLog.

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:129
&gt; +                    NSLog(@&quot;Unable to load WebKit2.framework: %s\n&quot;, dlerror());

Might be useful to log the path here.

&gt; Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:136
&gt; +                    NSLog(@&quot;Unable to find entry point in WebKit2.framework: %s\n&quot;, dlerror());

Might be useful to log the name here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817285</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-26 16:41:37 -0800</bug_when>
    <thetext>Committed r140919: &lt;http://trac.webkit.org/changeset/140919&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184887</attachid>
            <date>2013-01-26 15:02:58 -0800</date>
            <delta_ts>2013-01-26 16:20:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108015-20130126145947.patch</filename>
            <type>text/plain</type>
            <size>44931</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDkxNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTAxLTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVmYWN0b3IgWFBDU2VydmljZSBpbml0
aWFsaXphdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBhZGQgbW9yZSBzZXJ2aWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvRW50cnlQ
b2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlQm9vdHN0cmFwcGVyLkRldmVs
b3BtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2aWNlRXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKiBTaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlQm9vdHN0cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2
aWNlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgTW92ZSBib290c3RyYXBwaW5nIHRvIFNoYXJlZCAo
bGlrZSB3ZSBoYXZlIGZvciB0aGUgbGVnYWN5IHByb2Nlc3MpLiBGb3Igbm93LCB3ZSB1c2UKKyAg
ICAgICAgYSBtYWNybyB0byBkZWZpbmUgdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBwb2ludCBm
dW5jdGlvbiB0byB1c2UsIGluIHRoZSBmdXR1cmUsIHdlCisgICAgICAgIGNvdWxkIGNvbnNpZGVy
IGFsdGVybmF0aXZlcywgc3VjaCBhcyBnZXR0aW5nIHRoZSBmdW5jdGlvbiBuYW1lIGZyb20gdGhl
IGJ1bmRsZS4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgVXBkYXRlIGZpbGVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9FbnRyeVBvaW50
L21hYy9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlLkRldmVsb3BtZW50L1dlYkNvbnRlbnRT
ZXJ2aWNlTWFpbi5EZXZlbG9wbWVudC5tbToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0VudHJ5UG9p
bnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VNYWlu
Lm1tOgorICAgICAgICBTaW1wbGlmeSB0byB1c2UgdGhlIG5ldyBYUENTZXJ2aWNlQm9vdHN0cmFw
cGVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1dl
YkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbS4KKyAgICAgICAg
KGluaXRpYWxpemVXZWJDb250ZW50U2VydmljZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMv
V2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvbWFjL1dlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMubW06IFJlbW92ZWQuCisgICAg
ICAgIE1vdmUgdGhlIGVudHJ5IHBvaW50IHRvIHdoZXJlIGl0IGJlbG9uZ3MgYW5kIGV4dHJhY3Qg
dGhlIGJvb3RzdHJhcHBpbmcgcGFydHMuCisKIDIwMTMtMDEtMjYgIEFkZW5pbHNvbiBDYXZhbGNh
bnRpICA8Y2F2YWxjYW50aWlAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF1RdCBidWlsZCBmaXgK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENT
ZXJ2aWNlL1hQQ1NlcnZpY2VCb290c3RyYXBwZXIuRGV2ZWxvcG1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vydmlj
ZS9YUENTZXJ2aWNlQm9vdHN0cmFwcGVyLkRldmVsb3BtZW50LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlQm9vdHN0cmFwcGVyLkRldmVsb3BtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYUENTZXJ2aWNlQm9vdHN0cmFwcGVyX0Rl
dmVsb3BtZW50X2gKKyNkZWZpbmUgWFBDU2VydmljZUJvb3RzdHJhcHBlcl9EZXZlbG9wbWVudF9o
CisKKyNpZiAhZGVmaW5lZChYUENfU0VSVklDRV9JTklUSUFMSVpFUikKKyNlcnJvciBYUENfU0VS
VklDRV9JTklUSUFMSVpFUiBtdXN0IGJlIGRlZmluZWQuCisjZW5kaWYKKworI2ltcG9ydCA8QXZh
aWxhYmlsaXR5TWFjcm9zLmg+CisjaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgorI2ltcG9ydCA8ZGxm
Y24uaD4KKyNpbXBvcnQgPG1hY2gtby9keWxkLmg+CisjaW1wb3J0IDxzcGF3bi5oPiAKKyNpbXBv
cnQgPHN0ZGlvLmg+CisjaW1wb3J0IDxzdGRsaWIuaD4KKyNpbXBvcnQgPHhwYy94cGMuaD4KKwor
ZXh0ZXJuICJDIiBtYWNoX3BvcnRfdCB4cGNfZGljdGlvbmFyeV9jb3B5X21hY2hfc2VuZCh4cGNf
b2JqZWN0X3QsIGNvbnN0IGNoYXIqKTsKKworI2RlZmluZSBTVFJJTkdJWkUoZXhwKSAjZXhwCisj
ZGVmaW5lIFNUUklOR0laRV9WQUxVRV9PRihleHApIFNUUklOR0laRShleHApCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitzdGF0aWMgdm9pZCBYUENTZXJ2aWNlRXZlbnRIYW5kbGVyKHhwY19jb25u
ZWN0aW9uX3QgcGVlcikKK3sKKyAgICB4cGNfY29ubmVjdGlvbl9zZXRfdGFyZ2V0X3F1ZXVlKHBl
ZXIsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOworICAgIHhwY19jb25uZWN0aW9uX3NldF9l
dmVudF9oYW5kbGVyKHBlZXIsIF4oeHBjX29iamVjdF90IGV2ZW50KSB7CisgICAgICAgIHhwY190
eXBlX3QgdHlwZSA9IHhwY19nZXRfdHlwZShldmVudCk7CisgICAgICAgIGlmICh0eXBlID09IFhQ
Q19UWVBFX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAoZXZlbnQgPT0gWFBDX0VSUk9SX0NPTk5F
Q1RJT05fSU5WQUxJRCB8fCBldmVudCA9PSBYUENfRVJST1JfVEVSTUlOQVRJT05fSU1NSU5FTlQp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZSBtb3JlIGdyYWNl
ZnVsbHkuCisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gWFBDX1RZUEVf
RElDVElPTkFSWSk7CisKKyAgICAgICAgICAgIGlmICghc3RyY21wKHhwY19kaWN0aW9uYXJ5X2dl
dF9zdHJpbmcoZXZlbnQsICJtZXNzYWdlLW5hbWUiKSwgInJlLWV4ZWMiKSkgeworICAgICAgICAg
ICAgICAgIC8vIFNldHVwIHRoZSBwb3NpeF9zcGF3biBhdHRyaWJ1dGVzLgorICAgICAgICAgICAg
ICAgIHBvc2l4X3NwYXduYXR0cl90IGF0dHI7CisgICAgICAgICAgICAgICAgcG9zaXhfc3Bhd25h
dHRyX2luaXQoJmF0dHIpOworCisgICAgICAgICAgICAgICAgc2hvcnQgZmxhZ3MgPSAwOworCisg
ICAgICAgICAgICAgICAgLy8gV2UganVzdCB3YW50IHRvIHNldCB0aGUgcHJvY2VzcyBzdGF0ZSwg
bm90IGFjdHVhbGx5IGxhdW5jaCBhIG5ldyBwcm9jZXNzLAorICAgICAgICAgICAgICAgIC8vIHNv
IHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIGRhcndpbiBleHRlbnNpb24gdG8gcG9zaXhfc3Bhd24g
UE9TSVhfU1BBV05fU0VURVhFQworICAgICAgICAgICAgICAgIC8vIHRvIGFjdCBsaWtlIGEgbW9y
ZSBmdWxsIGZlYXR1cmVkIGV4ZWMuCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gUE9TSVhfU1BB
V05fU0VURVhFQzsKKworICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgb3VyIHByb2Nlc3MgdG8g
cmVjZWl2ZSBhbGwgc2lnbmFscy4KKyAgICAgICAgICAgICAgICBzaWdzZXRfdCBzaWduYWxNYXNr
U2V0OworICAgICAgICAgICAgICAgIHNpZ2VtcHR5c2V0KCZzaWduYWxNYXNrU2V0KTsKKyAgICAg
ICAgICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaygmYXR0ciwgJnNpZ25hbE1hc2tT
ZXQpOworICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBPU0lYX1NQQVdOX1NFVFNJR01BU0s7CisK
KyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAg
ICBjcHVfdHlwZV90IGNwdVR5cGVzW10gPSB7IChjcHVfdHlwZV90KXhwY19kaWN0aW9uYXJ5X2dl
dF91aW50NjQoZXZlbnQsICJhcmNoaXRlY3R1cmUiKSB9OworICAgICAgICAgICAgICAgIHNpemVf
dCBvdXRDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldGJpbnBy
ZWZfbnAoJmF0dHIsIDEsIGNwdVR5cGVzLCAmb3V0Q291bnQpOworCisgICAgICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBhbGxvd0V4ZWN1dGFibGVIZWFwRmxhZyA9IDB4MjAwMDsKKyAgICAg
ICAgICAgICAgICBpZiAoeHBjX2RpY3Rpb25hcnlfZ2V0X2Jvb2woZXZlbnQsICJleGVjdXRhYmxl
LWhlYXAiKSkKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gYWxsb3dFeGVjdXRhYmxlSGVh
cEZsYWc7CisKKyAgICAgICAgICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MoJmF0dHIs
IGZsYWdzKTsKKworICAgICAgICAgICAgICAgIGNoYXIgcGF0aFs0ICogUEFUSF9NQVhdOworICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHBhdGhMZW5ndGggPSBzaXplb2YocGF0aCk7CisgICAgICAg
ICAgICAgICAgX05TR2V0RXhlY3V0YWJsZVBhdGgocGF0aCwgJnBhdGhMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgLy8gU2V0dXAgdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICBj
aGFyKiogYXJndiA9ICpfTlNHZXRBcmd2KCk7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cHJvZ3JhbU5hbWUgPSBhcmd2WzBdOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFyZ3Nb
XSA9IHsgcHJvZ3JhbU5hbWUsIDAgfTsKKworICAgICAgICAgICAgICAgIC8vIFNldHVwIHRoZSBl
bnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICB4cGNfb2JqZWN0X3QgZW52aXJvbm1lbnRBcnJh
eSA9IHhwY19kaWN0aW9uYXJ5X2dldF92YWx1ZShldmVudCwgImVudmlyb25tZW50Iik7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IG51bWJlck9mRW52aXJvbm1lbnRWYXJpYWJsZXMgPSB4cGNfYXJy
YXlfZ2V0X2NvdW50KGVudmlyb25tZW50QXJyYXkpOworCisgICAgICAgICAgICAgICAgY2hhcioq
IGVudmlyb25tZW50ID0gKGNoYXIqKiltYWxsb2MobnVtYmVyT2ZFbnZpcm9ubWVudFZhcmlhYmxl
cyAqIHNpemVvZihjaGFyKikgKyAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mRW52aXJvbm1lbnRWYXJpYWJsZXM7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBzdHJpbmcgPSAgeHBjX2FycmF5X2dldF9zdHJpbmcoZW52aXJv
bm1lbnRBcnJheSwgaSk7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGgg
PSBzdHJsZW4oc3RyaW5nKTsKKworICAgICAgICAgICAgICAgICAgICBjaGFyKiBlbnZpcm9ubWVu
dFZhcmlhYmxlID0gKGNoYXIqKW1hbGxvYyhzdHJpbmdMZW5ndGggKyAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWVtY3B5KGVudmlyb25tZW50VmFyaWFibGUsIHN0cmluZywgc3RyaW5nTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZVtzdHJpbmdMZW5ndGhd
ID0gJ1wwJzsKKworICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudFtpXSA9IGVudmlyb25t
ZW50VmFyaWFibGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVudmlyb25t
ZW50W251bWJlck9mRW52aXJvbm1lbnRWYXJpYWJsZXNdID0gMDsKKworICAgICAgICAgICAgICAg
IHBpZF90IHByb2Nlc3NJZGVudGlmaWVyID0gMDsKKyAgICAgICAgICAgICAgICBwb3NpeF9zcGF3
bigmcHJvY2Vzc0lkZW50aWZpZXIsIHBhdGgsIDAsICZhdHRyLCBjb25zdF9jYXN0PGNoYXIqKj4o
YXJncyksIGVudmlyb25tZW50KTsKKworICAgICAgICAgICAgICAgIHBvc2l4X3NwYXduYXR0cl9k
ZXN0cm95KCZhdHRyKTsKKworICAgICAgICAgICAgICAgIE5TTG9nKEAiVW5hYmxlIHRvIHJlLWV4
ZWMgZm9yIHBhdGg6ICVzXG4iLCBwYXRoKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3RyY21wKHhwY19kaWN0
aW9uYXJ5X2dldF9zdHJpbmcoZXZlbnQsICJtZXNzYWdlLW5hbWUiKSwgImJvb3RzdHJhcCIpKSB7
CisgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQqIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4o
eHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwgImZyYW1ld29yay1leGVjdXRhYmxlLXBh
dGgiKSwgUlRMRF9OT1cpOworICAgICAgICAgICAgICAgIGlmICghZnJhbWV3b3JrTGlicmFyeSkg
eworICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIlVuYWJsZSB0byBsb2FkIFdlYktpdDIuZnJh
bWV3b3JrOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHR5cGVkZWYg
dm9pZCAoKkluaXRpYWxpemVyRnVuY3Rpb24pKGNvbnN0IGNoYXIqIGNsaWVudElkZW50aWZlciwg
eHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0LCBjb25z
dCBjaGFyKiB1aVByb2Nlc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBJbml0aWFsaXplckZ1bmN0
aW9uIGluaXRpYWxpemVyRnVuY3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PEluaXRpYWxpemVy
RnVuY3Rpb24+KGRsc3ltKGZyYW1ld29ya0xpYnJhcnksIFNUUklOR0laRShYUENfU0VSVklDRV9J
TklUSUFMSVpFUikpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxpemVyRnVuY3Rpb25Q
dHIpIHsKKyAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJVbmFibGUgdG8gZmluZCBlbnRyeSBw
b2ludCBpbiBXZWJLaXQyLmZyYW1ld29yazogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICB4cGNfb2JqZWN0X3QgcmVwbHkgPSB4cGNfZGljdGlvbmFyeV9jcmVhdGVfcmVw
bHkoZXZlbnQpOworICAgICAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcocmVw
bHksICJtZXNzYWdlLW5hbWUiLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmciKTsKKyAgICAg
ICAgICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoeHBjX2RpY3Rpb25hcnlfZ2V0
X3JlbW90ZV9jb25uZWN0aW9uKGV2ZW50KSwgcmVwbHkpOworICAgICAgICAgICAgICAgIHhwY19y
ZWxlYXNlKHJlcGx5KTsKKworICAgICAgICAgICAgICAgIGR1cDIoeHBjX2RpY3Rpb25hcnlfZHVw
X2ZkKGV2ZW50LCAic3Rkb3V0IiksIFNURE9VVF9GSUxFTk8pOworICAgICAgICAgICAgICAgIGR1
cDIoeHBjX2RpY3Rpb25hcnlfZHVwX2ZkKGV2ZW50LCAic3RkZXJyIiksIFNUREVSUl9GSUxFTk8p
OworCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJGdW5jdGlvblB0cigKKyAgICAgICAgICAg
ICAgICAgICAgeHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwgImNsaWVudC1pZGVudGlm
aWVyIiksCisgICAgICAgICAgICAgICAgICAgIHBlZXIsCisgICAgICAgICAgICAgICAgICAgIHhw
Y19kaWN0aW9uYXJ5X2NvcHlfbWFjaF9zZW5kKGV2ZW50LCAic2VydmVyLXBvcnQiKSwKKyAgICAg
ICAgICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwgInVpLXByb2Nl
c3MtbmFtZSIpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0pOworCisgICAgeHBjX2Nvbm5lY3Rpb25fcmVzdW1lKHBlZXIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQ7CisKKyNlbmRpZiAvLyBYUENTZXJ2aWNlQm9vdHN0cmFwcGVyX0RldmVs
b3BtZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVz
L21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VCb290c3RyYXBwZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlQm9vdHN0cmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlQm9vdHN0
cmFwcGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFhQQ1NlcnZpY2VCb290c3RyYXBwZXJfaAorI2RlZmluZSBYUENTZXJ2aWNlQm9vdHN0cmFw
cGVyX2gKKworI2lmICFkZWZpbmVkKFhQQ19TRVJWSUNFX0lOSVRJQUxJWkVSKQorI2Vycm9yIFhQ
Q19TRVJWSUNFX0lOSVRJQUxJWkVSIG11c3QgYmUgZGVmaW5lZC4KKyNlbmRpZgorCisjaW1wb3J0
IDx4cGMveHBjLmg+CitleHRlcm4gIkMiIG1hY2hfcG9ydF90IHhwY19kaWN0aW9uYXJ5X2NvcHlf
bWFjaF9zZW5kKHhwY19vYmplY3RfdCwgY29uc3QgY2hhciopOworCisvLyBGb3J3YXJkIGRlY2xh
cmUgdGhlIHNwZWNpZmllZCBpbml0aWFsaXplci4KK2V4dGVybiAiQyIgdm9pZCBYUENfU0VSVklD
RV9JTklUSUFMSVpFUihjb25zdCBjaGFyKiBjbGllbnRJZGVudGlmaWVyLCB4cGNfY29ubmVjdGlv
bl90LCBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0LCBjb25zdCBjaGFyKiB1aVByb2Nlc3NOYW1lKTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkIFhQQ1NlcnZpY2VFdmVudEhhbmRs
ZXIoeHBjX2Nvbm5lY3Rpb25fdCBwZWVyKQoreworICAgIHhwY19jb25uZWN0aW9uX3NldF90YXJn
ZXRfcXVldWUocGVlciwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CisgICAgeHBjX2Nvbm5l
Y3Rpb25fc2V0X2V2ZW50X2hhbmRsZXIocGVlciwgXih4cGNfb2JqZWN0X3QgZXZlbnQpIHsKKyAg
ICAgICAgeHBjX3R5cGVfdCB0eXBlID0geHBjX2dldF90eXBlKGV2ZW50KTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gWFBDX1RZUEVfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChldmVudCA9PSBYUENf
RVJST1JfQ09OTkVDVElPTl9JTlZBTElEIHx8IGV2ZW50ID09IFhQQ19FUlJPUl9URVJNSU5BVElP
Tl9JTU1JTkVOVCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNl
IG1vcmUgZ3JhY2VmdWxseS4KKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQodHlwZSA9
PSBYUENfVFlQRV9ESUNUSU9OQVJZKTsKKworICAgICAgICAgICAgaWYgKCFzdHJjbXAoeHBjX2Rp
Y3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwgIm1lc3NhZ2UtbmFtZSIpLCAiYm9vdHN0cmFwIikp
IHsKKyAgICAgICAgICAgICAgICB4cGNfb2JqZWN0X3QgcmVwbHkgPSB4cGNfZGljdGlvbmFyeV9j
cmVhdGVfcmVwbHkoZXZlbnQpOworICAgICAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9z
dHJpbmcocmVwbHksICJtZXNzYWdlLW5hbWUiLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmci
KTsKKyAgICAgICAgICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoeHBjX2RpY3Rp
b25hcnlfZ2V0X3JlbW90ZV9jb25uZWN0aW9uKGV2ZW50KSwgcmVwbHkpOworICAgICAgICAgICAg
ICAgIHhwY19yZWxlYXNlKHJlcGx5KTsKKworICAgICAgICAgICAgICAgIFhQQ19TRVJWSUNFX0lO
SVRJQUxJWkVSKAorICAgICAgICAgICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5n
KGV2ZW50LCAiY2xpZW50LWlkZW50aWZpZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgcGVlciwK
KyAgICAgICAgICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfY29weV9tYWNoX3NlbmQoZXZlbnQs
ICJzZXJ2ZXItcG9ydCIpLAorICAgICAgICAgICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9nZXRf
c3RyaW5nKGV2ZW50LCAidWktcHJvY2Vzcy1uYW1lIikKKyAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICB4cGNfY29ubmVjdGlvbl9yZXN1
bWUocGVlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gWFBDU2Vy
dmljZUJvb3RzdHJhcHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDA5MTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTc5OSw2ICs3OTksNyBAQAogCQlCQzgyODM4QzE2QjQ1RjA3MDBBMjc4RkUgLyogUGx1Z2luUHJv
Y2Vzc01haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzgyODM4QTE2QjQ1RUYyMDBBMjc4RkUgLyogUGx1Z2luUHJvY2Vzc01haW4ubW0gKi87IH07
CiAJCUJDODI4Mzk0MTZCNDYwODAwMEEyNzhGRSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzTWFpbkJv
b3RzdHJhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzgyODM5MjE2QjQ2MDdCMDBBMjc4RkUgLyogU2hhcmVkV29ya2VyUHJvY2Vzc01haW5C
b290c3RyYXBwZXIuY3BwICovOyB9OwogCQlCQzgyODM5NTE2QjQ2MDgzMDBBMjc4RkUgLyogU2hh
cmVkV29ya2VyUHJvY2Vzc01haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzgyODM5MzE2QjQ2MDdCMDBBMjc4RkUgLyogU2hhcmVkV29ya2VyUHJv
Y2Vzc01haW4ubW0gKi87IH07CisJCUJDODI4Mzk5MTZCNDhEQzAwMEEyNzhGRSAvKiBXZWJDb250
ZW50U2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzgyODM5ODE2QjQ4REMwMDBBMjc4RkUgLyogV2ViQ29udGVudFNlcnZp
Y2VFbnRyeVBvaW50Lm1tICovOyB9OwogCQlCQzgyREYyMjE1QkRGNDIyMDBGQzI4NDEgLyogY29t
LmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJv
Y2Vzcy5zYiAqLzsgfTsKIAkJQkM4NDUyQTcxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODQ1
MkE1MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5jcHAgKi87IH07CiAJCUJDODQ1MkE4
MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4NDUyQTYxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdp
bmdBcmVhLmggKi87IH07CkBAIC05MjgsOCArOTI5LDYgQEAKIAkJQkNENTk4QUMxMTJCN0ZERjAw
RUM4QzIzIC8qIFdlYlByZWZlcmVuY2VzU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDU5OEFBMTEyQjdGREYwMEVDOEMyMyAvKiBXZWJQcmVm
ZXJlbmNlc1N0b3JlLmggKi87IH07CiAJCUJDRDU5OEFEMTEyQjdGREYwMEVDOEMyMyAvKiBXZWJQ
cmVmZXJlbmNlc1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRDU5OEFCMTEyQjdGREYwMEVDOEMyMyAvKiBXZWJQcmVmZXJlbmNlc1N0b3Jl
LmNwcCAqLzsgfTsKIAkJQkNEQjg2QzExMjAwRkI5NzAwNzI1NEJFIC8qIFdlYlVSTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEQjg2QzAxMjAwRkI5
NzAwNzI1NEJFIC8qIFdlYlVSTC5oICovOyB9OwotCQlCQ0RDMzA4QjE1RkQ2Q0QxMDA2QjY2OTUg
LyogV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDREMzMDg5MTVGRDZDRDEwMDZCNjY5NSAvKiBXZWJQ
cm9jZXNzU2VydmljZUVudHJ5UG9pbnRzLm1tICovOyB9OwotCQlCQ0RDMzA4QzE1RkQ2Q0QxMDA2
QjY2OTUgLyogV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEQzMwOEExNUZENkNEMTAwNkI2Njk1IC8q
IFdlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMuaCAqLzsgfTsKIAkJQkNEREIzMTcxMjRFQkQx
MzAwNDhEMTNDIC8qIFdLQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNEREIzMTYxMjRFQkQxMzAwNDhEMTNDIC8qIFdLQmFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJQkNEREIzMkIxMjRFQzJB
QjAwNDhEMTNDIC8qIFdLU2hhcmVkQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEREIzMkExMjRFQzJBQjAwNDhEMTNDIC8qIFdLU2hhcmVk
QVBJQ2FzdC5oICovOyB9OwogCQlCQ0REQjMyRDEyNEVDMkUxMDA0OEQxM0MgLyogV0tBUElDYXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0REQjMy
QzEyNEVDMkUxMDA0OEQxM0MgLyogV0tBUElDYXN0LmggKi87IH07CkBAIC0yMDk4LDYgKzIwOTcs
OSBAQAogCQlCQzgyODM5MTE2QjQ2MDBEMDBBMjc4RkUgLyogSW5mby5wbGlzdCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBw
YXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjgzOTIx
NkI0NjA3QjAwQTI3OEZFIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NNYWluQm9vdHN0cmFwcGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFdvcmtlclByb2Nlc3NNYWluQm9vdHN0cmFwcGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjgzOTMxNkI0NjA3QjAwQTI3
OEZFIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NNYWluLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
U2hhcmVkV29ya2VyUHJvY2Vzc01haW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDODI4Mzk2MTZCNDdFQzQwMEEyNzhGRSAvKiBYUENTZXJ2aWNlQm9vdHN0cmFwcGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFhQQ1NlcnZpY2VCb290c3RyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkM4MjgzOTcxNkI0ODBGNjAwQTI3OEZFIC8qIFhQQ1NlcnZpY2VCb290c3Ry
YXBwZXIuRGV2ZWxvcG1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBDU2VydmljZUJvb3RzdHJhcHBl
ci5EZXZlbG9wbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzgyODM5ODE2
QjQ4REMwMDBBMjc4RkUgLyogV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29udGVudFNlcnZpY2VFbnRyeVBv
aW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzg0NTJBNTExNjJDODA5MDBD
QUI5QjUgLyogRHJhd2luZ0FyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRHJhd2luZ0FyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzg0
NTJBNjExNjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0FyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRHJhd2luZ0FyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkM4NEVCMTcxMkE3MTAwQzAwODNGMkRBIC8qIFdlYlByZWZlcmVuY2VzTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJlZmVyZW5jZXNNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI4LDggKzIyMzAsNiBAQAogCQlCQ0Q1
OThBQTExMkI3RkRGMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5jZXNTdG9yZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlc1N0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDRDU5OEFCMTEyQjdGREYwMEVDOEMyMyAvKiBXZWJQcmVmZXJl
bmNlc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RCODZD
MDEyMDBGQjk3MDA3MjU0QkUgLyogV2ViVVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0RDMzA4OTE1
RkQ2Q0QxMDA2QjY2OTUgLyogV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NTZXJ2aWNlRW50cnlQ
b2ludHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDREMzMDhBMTVGRDZDRDEw
MDZCNjY5NSAvKiBXZWJQcm9jZXNzU2VydmljZUVudHJ5UG9pbnRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEREIzMTYxMjRFQkQxMzAwNDhEMTNDIC8qIFdLQmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEREIzMkExMjRFQzJBQjAwNDhEMTNDIC8qIFdLU2hhcmVk
QVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NoYXJlZEFQSUNh
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEREIzMkMxMjRFQzJFMTAwNDhE
MTNDIC8qIFdLQVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FQ
SUNhc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NjIsOCArMjY2Miw2IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDMzA2NUMzMTI1OTJG
ODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tICovLAotCQkJCUJDREMzMDhBMTVGRDZDRDEw
MDZCNjY5NSAvKiBXZWJQcm9jZXNzU2VydmljZUVudHJ5UG9pbnRzLmggKi8sCi0JCQkJQkNEQzMw
ODkxNUZENkNEMTAwNkI2Njk1IC8qIFdlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMubW0gKi8s
CiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00
MDU0LDYgKzQwNTIsOCBAQAogCQlCQzgyODM2QjE2QjM1ODc5MDBBMjc4RkUgLyogWFBDU2Vydmlj
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkM4Mjgz
OTYxNkI0N0VDNDAwQTI3OEZFIC8qIFhQQ1NlcnZpY2VCb290c3RyYXBwZXIuaCAqLywKKwkJCQlC
QzgyODM5NzE2QjQ4MEY2MDBBMjc4RkUgLyogWFBDU2VydmljZUJvb3RzdHJhcHBlci5EZXZlbG9w
bWVudC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBYUENTZXJ2aWNlOwogCQkJcGF0aCA9IG1hYy9Y
UENTZXJ2aWNlOwpAQCAtNDE4Niw2ICs0MTg2LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJD
QUNDNDNGMTZCMjRDQUEwMEI2RTA5MiAvKiBXZWJDb250ZW50U2VydmljZSAqLywKIAkJCQlCQ0FD
QzQ0MjE2QjI0Q0FBMDBCNkUwOTIgLyogV2ViQ29udGVudFNlcnZpY2UuRGV2ZWxvcG1lbnQgKi8s
CisJCQkJQkM4MjgzOTgxNkI0OERDMDAwQTI3OEZFIC8qIFdlYkNvbnRlbnRTZXJ2aWNlRW50cnlQ
b2ludC5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gWFBDU2VydmljZTsKIAkJCXBhdGggPSBtYWMv
WFBDU2VydmljZTsKQEAgLTQ5NTQsNyArNDk1NSw2IEBACiAJCQkJQkMzMDY2QkYxMjVBNDQyMTAw
RTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJE
RDUxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFRTdBRDExMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQ0RDMzA4QzE1RkQ2Q0QxMDA2QjY2OTUgLyogV2ViUHJvY2Vz
c1NlcnZpY2VFbnRyeVBvaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjhBN0IxMzhCNDYw
OTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
MEU0MjUxNjhCN0EyODAwNTdFNjZBIC8qIFdlYlByb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTJGNTg5RDEyQTg4Mzg4MDA2Mjk1MzAgLyogV2ViUHJvdGVjdGlvblNwYWNl
LmggaW4gSGVhZGVycyAqLywKQEAgLTU5NjIsNyArNTk2Miw2IEBACiAJCQkJQkMxMTFCMTExMTJG
NUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUQxMzA1ODEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNFRTdBRDAxMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0RDMzA4QjE1RkQ2Q0QxMDA2
QjY2OTUgLyogV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxMkY1ODlDMTJBODgzODgwMDYyOTUzMCAvKiBXZWJQcm90ZWN0aW9uU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDMxNTBDMzUwNjAwRTUyQ0U5IC8qIFdlYlJlbmRlckxh
eWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3NjA4ODFFMTUwNDEzRTkwMEZDODJDNyAvKiBX
ZWJSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02MTA3LDYgKzYxMDYsNyBAQAog
CQkJCUJDODI4Mzg0MTZCNDVEQTUwMEEyNzhGRSAvKiBOZXR3b3JrUHJvY2Vzc01haW4ubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzgyODM4QzE2QjQ1RjA3MDBBMjc4RkUgLyogUGx1Z2luUHJvY2Vz
c01haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODM5NTE2QjQ2MDgzMDBBMjc4RkUgLyog
U2hhcmVkV29ya2VyUHJvY2Vzc01haW4ubW0gaW4gU291cmNlcyAqLywKKwkJCQlCQzgyODM5OTE2
QjQ4REMwMDBBMjc4RkUgLyogV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQ
Q1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9XZWJDb250
ZW50U2VydmljZUVudHJ5UG9pbnQubW0JKHJldmlzaW9uIDE0MDkxMykJKGZyb20gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbToxNDA5
MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZp
Y2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzU2VydmljZUVudHJ5UG9pbnRzLmgiCisKKyNpZiBIQVZFKFhQQykKKworI2ltcG9ydCAi
RW52aXJvbm1lbnRVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldlYktpdDJJbml0aWFsaXplLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbXBv
cnQgPHN0ZGlvLmg+CisjaW1wb3J0IDxzdGRsaWIuaD4KKyNpbXBvcnQgPHhwYy94cGMuaD4KKwor
ZXh0ZXJuICJDIiBtYWNoX3BvcnRfdCB4cGNfZGljdGlvbmFyeV9jb3B5X21hY2hfc2VuZCh4cGNf
b2JqZWN0X3QsIGNvbnN0IGNoYXIqKTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2
b2lkIFdlYlByb2Nlc3NTZXJ2aWNlRXZlbnRIYW5kbGVyKHhwY19jb25uZWN0aW9uX3QgcGVlcikK
K3sKKyAgICB4cGNfY29ubmVjdGlvbl9zZXRfdGFyZ2V0X3F1ZXVlKHBlZXIsIGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpOworICAgIHhwY19jb25uZWN0aW9uX3NldF9ldmVudF9oYW5kbGVyKHBl
ZXIsIF4oeHBjX29iamVjdF90IGV2ZW50KSB7CisgICAgICAgIHhwY190eXBlX3QgdHlwZSA9IHhw
Y19nZXRfdHlwZShldmVudCk7CisgICAgICAgIGlmICh0eXBlID09IFhQQ19UWVBFX0VSUk9SKSB7
CisgICAgICAgICAgICBpZiAoZXZlbnQgPT0gWFBDX0VSUk9SX0NPTk5FQ1RJT05fSU5WQUxJRCB8
fCBldmVudCA9PSBYUENfRVJST1JfVEVSTUlOQVRJT05fSU1NSU5FTlQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZSBtb3JlIGdyYWNlZnVsbHkuCisgICAgICAg
ICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gWFBDX1RZUEVfRElDVElPTkFSWSk7CisK
KyAgICAgICAgICAgIGlmICghc3RyY21wKHhwY19kaWN0aW9uYXJ5X2dldF9zdHJpbmcoZXZlbnQs
ICJtZXNzYWdlLW5hbWUiKSwgImJvb3RzdHJhcCIpKSB7CisgICAgICAgICAgICAgICAgeHBjX29i
amVjdF90IHJlcGx5ID0geHBjX2RpY3Rpb25hcnlfY3JlYXRlX3JlcGx5KGV2ZW50KTsKKyAgICAg
ICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKHJlcGx5LCAibWVzc2FnZS1uYW1l
IiwgInByb2Nlc3MtZmluaXNoZWQtbGF1bmNoaW5nIik7CisgICAgICAgICAgICAgICAgeHBjX2Nv
bm5lY3Rpb25fc2VuZF9tZXNzYWdlKHhwY19kaWN0aW9uYXJ5X2dldF9yZW1vdGVfY29ubmVjdGlv
bihldmVudCksIHJlcGx5KTsKKyAgICAgICAgICAgICAgICB4cGNfcmVsZWFzZShyZXBseSk7CisK
KyAgICAgICAgICAgICAgICBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc05hbWUgPSB4cGNf
ZGljdGlvbmFyeV9nZXRfc3RyaW5nKGV2ZW50LCAidWktcHJvY2Vzcy1uYW1lIik7CisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyID0geHBjX2RpY3Rpb25hcnlfZ2V0
X3N0cmluZyhldmVudCwgImNsaWVudC1pZGVudGlmaWVyIik7CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVycy5jb25uZWN0aW9uSWRlbnRpZmllciA9IHhwY19kaWN0aW9uYXJ5X2NvcHlfbWFjaF9z
ZW5kKGV2ZW50LCAic2VydmVyLXBvcnQiKTsKKworICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIHhwY19jb25uZWN0aW9uX3Jlc3VtZShwZWVyKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworaW50IHdlYlByb2Nlc3NTZXJ2aWNlTWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgLy8gUmVtb3ZlIHRoZSBXZWJQcm9jZXNzIHNoaW0gZnJvbSB0aGUg
RFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNz
ZXMgc3Bhd25lZCBieQorICAgIC8vIHRoZSBXZWJQcm9jZXNzIGRvbid0IHRyeSB0byBpbnNlcnQg
dGhlIHNoaW0gYW5kIGNyYXNoLgorICAgIEVudmlyb25tZW50VXRpbGl0aWVzOjpzdHJpcFZhbHVl
c0VuZGluZ1dpdGhTdHJpbmcoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsICIvU2VjSXRlbVNoaW0u
ZHlsaWIiKTsKKworICAgIFJ1bkxvb3A6OnNldFVzZUFwcGxpY2F0aW9uUnVuTG9vcE9uTWFpblJ1
bkxvb3AoKTsKKyAgICBJbml0aWFsaXplV2ViS2l0MigpOworCisgICAgeHBjX21haW4oV2ViUHJv
Y2Vzc1NlcnZpY2VFdmVudEhhbmRsZXIpOworICAgIHJldHVybiAwOworfQorCit2b2lkIGluaXRp
YWxpemVXZWJQcm9jZXNzRm9yV2ViUHJvY2Vzc1NlcnZpY2VGb3JXZWJLaXREZXZlbG9wbWVudChj
b25zdCBjaGFyKiBjbGllbnRJZGVudGlmaWVyLCB4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24s
IG1hY2hfcG9ydF90IHNlcnZlclBvcnQsIGNvbnN0IGNoYXIqIHVpUHJvY2Vzc05hbWUpCit7Cisg
ICAgLy8gUmVtb3ZlIHRoZSBXZWJQcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElC
UkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMgc3Bhd25lZCBieQor
ICAgIC8vIHRoZSBXZWJQcm9jZXNzIGRvbid0IHRyeSB0byBpbnNlcnQgdGhlIHNoaW0gYW5kIGNy
YXNoLgorICAgIEVudmlyb25tZW50VXRpbGl0aWVzOjpzdHJpcFZhbHVlc0VuZGluZ1dpdGhTdHJp
bmcoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsICIvU2VjSXRlbVNoaW0uZHlsaWIiKTsKKworICAg
IFJ1bkxvb3A6OnNldFVzZUFwcGxpY2F0aW9uUnVuTG9vcE9uTWFpblJ1bkxvb3AoKTsKKyAgICBJ
bml0aWFsaXplV2ViS2l0MigpOworCisgICAgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy51aVByb2Nlc3NOYW1lID0gdWlQcm9j
ZXNzTmFtZTsKKyAgICBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIgPSBjbGllbnRJZGVudGlm
aWVyOworICAgIHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSBDb3JlSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyKHNlcnZlclBvcnQsIGNvbm5lY3Rpb24pOworCisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKK30KKworI2VuZGlmIC8vIEhB
VkUoWFBDKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9Y
UENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29u
dGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCShyZXZpc2lvbiAxNDA5MTMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZp
Y2VFbnRyeVBvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwog
CiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2lu
dHMuaCIKIAogI2lmIEhBVkUoWFBDKQogCiAjaW1wb3J0ICJFbnZpcm9ubWVudFV0aWxpdGllcy5o
IgorI2ltcG9ydCAiV0tCYXNlLmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2lt
cG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCA8V2ViQ29yZS9SdW5Mb29wLmg+CkBAIC0zNiw2
MSArMzYsMTIgQEAKICNpbXBvcnQgPHN0ZGxpYi5oPgogI2ltcG9ydCA8eHBjL3hwYy5oPgogCi1l
eHRlcm4gIkMiIG1hY2hfcG9ydF90IHhwY19kaWN0aW9uYXJ5X2NvcHlfbWFjaF9zZW5kKHhwY19v
YmplY3RfdCwgY29uc3QgY2hhciopOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHZv
aWQgV2ViUHJvY2Vzc1NlcnZpY2VFdmVudEhhbmRsZXIoeHBjX2Nvbm5lY3Rpb25fdCBwZWVyKQot
ewotICAgIHhwY19jb25uZWN0aW9uX3NldF90YXJnZXRfcXVldWUocGVlciwgZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSk7Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2V0X2V2ZW50X2hhbmRsZXIocGVl
ciwgXih4cGNfb2JqZWN0X3QgZXZlbnQpIHsKLSAgICAgICAgeHBjX3R5cGVfdCB0eXBlID0geHBj
X2dldF90eXBlKGV2ZW50KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gWFBDX1RZUEVfRVJST1IpIHsK
LSAgICAgICAgICAgIGlmIChldmVudCA9PSBYUENfRVJST1JfQ09OTkVDVElPTl9JTlZBTElEIHx8
IGV2ZW50ID09IFhQQ19FUlJPUl9URVJNSU5BVElPTl9JTU1JTkVOVCkgewotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlIG1vcmUgZ3JhY2VmdWxseS4KLSAgICAgICAg
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBYUENfVFlQRV9ESUNUSU9OQVJZKTsKLQot
ICAgICAgICAgICAgaWYgKCFzdHJjbXAoeHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwg
Im1lc3NhZ2UtbmFtZSIpLCAiYm9vdHN0cmFwIikpIHsKLSAgICAgICAgICAgICAgICB4cGNfb2Jq
ZWN0X3QgcmVwbHkgPSB4cGNfZGljdGlvbmFyeV9jcmVhdGVfcmVwbHkoZXZlbnQpOwotICAgICAg
ICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcocmVwbHksICJtZXNzYWdlLW5hbWUi
LCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmciKTsKLSAgICAgICAgICAgICAgICB4cGNfY29u
bmVjdGlvbl9zZW5kX21lc3NhZ2UoeHBjX2RpY3Rpb25hcnlfZ2V0X3JlbW90ZV9jb25uZWN0aW9u
KGV2ZW50KSwgcmVwbHkpOwotICAgICAgICAgICAgICAgIHhwY19yZWxlYXNlKHJlcGx5KTsKLQot
ICAgICAgICAgICAgICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOwotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzTmFtZSA9IHhwY19k
aWN0aW9uYXJ5X2dldF9zdHJpbmcoZXZlbnQsICJ1aS1wcm9jZXNzLW5hbWUiKTsKLSAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIgPSB4cGNfZGljdGlvbmFyeV9nZXRf
c3RyaW5nKGV2ZW50LCAiY2xpZW50LWlkZW50aWZpZXIiKTsKLSAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyID0geHBjX2RpY3Rpb25hcnlfY29weV9tYWNoX3Nl
bmQoZXZlbnQsICJzZXJ2ZXItcG9ydCIpOwotCi0gICAgICAgICAgICAgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0pOwotCi0gICAgeHBjX2Nvbm5lY3Rpb25fcmVzdW1lKHBlZXIpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCi1pbnQgd2ViUHJvY2Vzc1NlcnZpY2VNYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICAvLyBSZW1vdmUgdGhlIFdlYlByb2Nlc3Mgc2hpbSBmcm9tIHRoZSBE
WUxEX0lOU0VSVF9MSUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gYW55IHByb2Nlc3Nl
cyBzcGF3bmVkIGJ5Ci0gICAgLy8gdGhlIFdlYlByb2Nlc3MgZG9uJ3QgdHJ5IHRvIGluc2VydCB0
aGUgc2hpbSBhbmQgY3Jhc2guCi0gICAgRW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVz
RW5kaW5nV2l0aFN0cmluZygiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgIi9TZWNJdGVtU2hpbS5k
eWxpYiIpOwotCi0gICAgUnVuTG9vcDo6c2V0VXNlQXBwbGljYXRpb25SdW5Mb29wT25NYWluUnVu
TG9vcCgpOwotICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KLSAgICB4cGNfbWFpbihXZWJQcm9j
ZXNzU2VydmljZUV2ZW50SGFuZGxlcik7Ci0gICAgcmV0dXJuIDA7Ci19CitleHRlcm4gIkMiIFdL
X0VYUE9SVCB2b2lkIGluaXRpYWxpemVXZWJDb250ZW50U2VydmljZShjb25zdCBjaGFyKiBjbGll
bnRJZGVudGlmaWVyLCB4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIG1hY2hfcG9ydF90IHNl
cnZlclBvcnQsIGNvbnN0IGNoYXIqIHVpUHJvY2Vzc05hbWUpOwogCi12b2lkIGluaXRpYWxpemVX
ZWJQcm9jZXNzRm9yV2ViUHJvY2Vzc1NlcnZpY2VGb3JXZWJLaXREZXZlbG9wbWVudChjb25zdCBj
aGFyKiBjbGllbnRJZGVudGlmaWVyLCB4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIG1hY2hf
cG9ydF90IHNlcnZlclBvcnQsIGNvbnN0IGNoYXIqIHVpUHJvY2Vzc05hbWUpCit2b2lkIGluaXRp
YWxpemVXZWJDb250ZW50U2VydmljZShjb25zdCBjaGFyKiBjbGllbnRJZGVudGlmaWVyLCB4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIG1hY2hfcG9ydF90IHNlcnZlclBvcnQsIGNvbnN0IGNo
YXIqIHVpUHJvY2Vzc05hbWUpCiB7CiAgICAgLy8gUmVtb3ZlIHRoZSBXZWJQcm9jZXNzIHNoaW0g
ZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFu
eSBwcm9jZXNzZXMgc3Bhd25lZCBieQogICAgIC8vIHRoZSBXZWJQcm9jZXNzIGRvbid0IHRyeSB0
byBpbnNlcnQgdGhlIHNoaW0gYW5kIGNyYXNoLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlLkRldmVsb3Bt
ZW50L1dlYkNvbnRlbnRTZXJ2aWNlTWFpbi5EZXZlbG9wbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29u
dGVudFNlcnZpY2UuRGV2ZWxvcG1lbnQvV2ViQ29udGVudFNlcnZpY2VNYWluLkRldmVsb3BtZW50
Lm1tCShyZXZpc2lvbiAxNDA5MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5
UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2UuRGV2ZWxvcG1lbnQvV2ViQ29u
dGVudFNlcnZpY2VNYWluLkRldmVsb3BtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMjcg
KzIzLDEzIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lt
cG9ydCA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+CisjZGVmaW5lIFhQQ19TRVJWSUNFX0lOSVRJQUxJ
WkVSIGluaXRpYWxpemVXZWJDb250ZW50U2VydmljZQorI2luY2x1ZGUgIlhQQ1NlcnZpY2VCb290
c3RyYXBwZXIuRGV2ZWxvcG1lbnQuaCIKIAotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLSNpbXBv
cnQgPGRsZmNuLmg+Ci0jaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgotI2ltcG9ydCA8c3Bhd24uaD4g
Ci0jaW1wb3J0IDxzdGRpby5oPgotI2ltcG9ydCA8c3RkbGliLmg+Ci0jaW1wb3J0IDx4cGMveHBj
Lmg+Ci0KLWV4dGVybiAiQyIgbWFjaF9wb3J0X3QgeHBjX2RpY3Rpb25hcnlfY29weV9tYWNoX3Nl
bmQoeHBjX29iamVjdF90LCBjb25zdCBjaGFyKik7Ci0KLXN0YXRpYyB2b2lkIFdlYlByb2Nlc3NT
ZXJ2aWNlRm9yV2ViS2l0RGV2ZWxvcG1lbnRFdmVudEhhbmRsZXIoeHBjX2Nvbm5lY3Rpb25fdCBw
ZWVyKQotewotICAgIHhwY19jb25uZWN0aW9uX3NldF90YXJnZXRfcXVldWUocGVlciwgZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSk7Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2V0X2V2ZW50X2hhbmRs
ZXIocGVlciwgXih4cGNfb2JqZWN0X3QgZXZlbnQpIHsKLSAgICAgICAgeHBjX3R5cGVfdCB0eXBl
ID0geHBjX2dldF90eXBlKGV2ZW50KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gWFBDX1RZUEVfRVJS
T1IpIHsKLSAgICAgICAgICAgIGlmIChldmVudCA9PSBYUENfRVJST1JfQ09OTkVDVElPTl9JTlZB
TElEIHx8IGV2ZW50ID09IFhQQ19FUlJPUl9URVJNSU5BVElPTl9JTU1JTkVOVCkgewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlIG1vcmUgZ3JhY2VmdWxseS4KLSAg
ICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQodHlwZSA9PSBYUENfVFlQRV9ESUNUSU9OQVJZ
KTsKLQotICAgICAgICAgICAgaWYgKCFzdHJjbXAoeHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhl
dmVudCwgIm1lc3NhZ2UtbmFtZSIpLCAicmUtZXhlYyIpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
U2V0dXAgdGhlIHBvc2l4X3NwYXduIGF0dHJpYnV0ZXMuCi0gICAgICAgICAgICAgICAgcG9zaXhf
c3Bhd25hdHRyX3QgYXR0cjsKLSAgICAgICAgICAgICAgICBwb3NpeF9zcGF3bmF0dHJfaW5pdCgm
YXR0cik7Ci0KLSAgICAgICAgICAgICAgICBzaG9ydCBmbGFncyA9IDA7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXZSBqdXN0IHdhbnQgdG8gc2V0IHRoZSBwcm9jZXNzIHN0YXRlLCBub3QgYWN0dWFs
bHkgbGF1bmNoIGEgbmV3IHByb2Nlc3MsCi0gICAgICAgICAgICAgICAgLy8gc28gd2UgYXJlIGdv
aW5nIHRvIHVzZSB0aGUgZGFyd2luIGV4dGVuc2lvbiB0byBwb3NpeF9zcGF3biBQT1NJWF9TUEFX
Tl9TRVRFWEVDCi0gICAgICAgICAgICAgICAgLy8gdG8gYWN0IGxpa2UgYSBtb3JlIGZ1bGwgZmVh
dHVyZWQgZXhlYy4KLSAgICAgICAgICAgICAgICBmbGFncyB8PSBQT1NJWF9TUEFXTl9TRVRFWEVD
OwotCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2FudCBvdXIgcHJvY2VzcyB0byByZWNlaXZlIGFs
bCBzaWduYWxzLgotICAgICAgICAgICAgICAgIHNpZ3NldF90IHNpZ25hbE1hc2tTZXQ7Ci0gICAg
ICAgICAgICAgICAgc2lnZW1wdHlzZXQoJnNpZ25hbE1hc2tTZXQpOwotICAgICAgICAgICAgICAg
IHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrKCZhdHRyLCAmc2lnbmFsTWFza1NldCk7Ci0gICAg
ICAgICAgICAgICAgZmxhZ3MgfD0gUE9TSVhfU1BBV05fU0VUU0lHTUFTSzsKLQotICAgICAgICAg
ICAgICAgIC8vIFNldCB0aGUgYXJjaGl0ZWN0dXJlLgotICAgICAgICAgICAgICAgIGNwdV90eXBl
X3QgY3B1VHlwZXNbXSA9IHsgKGNwdV90eXBlX3QpeHBjX2RpY3Rpb25hcnlfZ2V0X3VpbnQ2NChl
dmVudCwgImFyY2hpdGVjdHVyZSIpIH07Ci0gICAgICAgICAgICAgICAgc2l6ZV90IG91dENvdW50
ID0gMDsKLSAgICAgICAgICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZl9ucCgmYXR0
ciwgMSwgY3B1VHlwZXMsICZvdXRDb3VudCk7Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGFsbG93RXhlY3V0YWJsZUhlYXBGbGFnID0gMHgyMDAwOwotICAgICAgICAgICAgICAg
IGlmICh4cGNfZGljdGlvbmFyeV9nZXRfYm9vbChldmVudCwgImV4ZWN1dGFibGUtaGVhcCIpKQot
ICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBhbGxvd0V4ZWN1dGFibGVIZWFwRmxhZzsKLQot
ICAgICAgICAgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncygmYXR0ciwgZmxhZ3MpOwot
Ci0gICAgICAgICAgICAgICAgY2hhciBwYXRoWzQgKiBQQVRIX01BWF07Ci0gICAgICAgICAgICAg
ICAgdWludDMyX3QgcGF0aExlbmd0aCA9IHNpemVvZihwYXRoKTsKLSAgICAgICAgICAgICAgICBf
TlNHZXRFeGVjdXRhYmxlUGF0aChwYXRoLCAmcGF0aExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTZXR1cCB0aGUgY29tbWFuZCBsaW5lLgotICAgICAgICAgICAgICAgIGNoYXIqKiBhcmd2
ID0gKl9OU0dldEFyZ3YoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwcm9ncmFtTmFt
ZSA9IGFyZ3ZbMF07Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogYXJnc1tdID0geyBwcm9n
cmFtTmFtZSwgMCB9OwotCi0gICAgICAgICAgICAgICAgLy8gU2V0dXAgdGhlIGVudmlyb25tZW50
LgotICAgICAgICAgICAgICAgIHhwY19vYmplY3RfdCBlbnZpcm9ubWVudEFycmF5ID0geHBjX2Rp
Y3Rpb25hcnlfZ2V0X3ZhbHVlKGV2ZW50LCAiZW52aXJvbm1lbnQiKTsKLSAgICAgICAgICAgICAg
ICBzaXplX3QgbnVtYmVyT2ZFbnZpcm9ubWVudFZhcmlhYmxlcyA9IHhwY19hcnJheV9nZXRfY291
bnQoZW52aXJvbm1lbnRBcnJheSk7Ci0KLSAgICAgICAgICAgICAgICBjaGFyKiogZW52aXJvbm1l
bnQgPSAoY2hhcioqKW1hbGxvYyhudW1iZXJPZkVudmlyb25tZW50VmFyaWFibGVzICogc2l6ZW9m
KGNoYXIqKSArIDEpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZFbnZpcm9ubWVudFZhcmlhYmxlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHN0cmluZyA9ICB4cGNfYXJyYXlfZ2V0X3N0cmluZyhlbnZpcm9ubWVudEFycmF5
LCBpKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHN0cmxlbihz
dHJpbmcpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGVudmlyb25tZW50VmFyaWFibGUg
PSAoY2hhciopbWFsbG9jKHN0cmluZ0xlbmd0aCArIDEpOwotICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoZW52aXJvbm1lbnRWYXJpYWJsZSwgc3RyaW5nLCBzdHJpbmdMZW5ndGgpOwotICAgICAg
ICAgICAgICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlW3N0cmluZ0xlbmd0aF0gPSAnXDAnOwot
Ci0gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50W2ldID0gZW52aXJvbm1lbnRWYXJpYWJs
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnRbbnVtYmVy
T2ZFbnZpcm9ubWVudFZhcmlhYmxlc10gPSAwOwotCi0gICAgICAgICAgICAgICAgcGlkX3QgcHJv
Y2Vzc0lkZW50aWZpZXIgPSAwOwotICAgICAgICAgICAgICAgIHBvc2l4X3NwYXduKCZwcm9jZXNz
SWRlbnRpZmllciwgcGF0aCwgMCwgJmF0dHIsIGNvbnN0X2Nhc3Q8Y2hhcioqPihhcmdzKSwgZW52
aXJvbm1lbnQpOwotCi0gICAgICAgICAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3koJmF0
dHIpOwotCi0gICAgICAgICAgICAgICAgTlNMb2coQCJVbmFibGUgdG8gcmUtZXhlYyBmb3IgcGF0
aDogJXNcbiIsIHBhdGgpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdHJjbXAoeHBjX2RpY3Rpb25hcnlfZ2V0
X3N0cmluZyhldmVudCwgIm1lc3NhZ2UtbmFtZSIpLCAiYm9vdHN0cmFwIikpIHsKLSAgICAgICAg
ICAgICAgICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrTGlicmFyeSA9IGRsb3Blbih4cGNfZGljdGlv
bmFyeV9nZXRfc3RyaW5nKGV2ZW50LCAiZnJhbWV3b3JrLWV4ZWN1dGFibGUtcGF0aCIpLCBSVExE
X05PVyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcmFtZXdvcmtMaWJyYXJ5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIE5TTG9nKEAiVW5hYmxlIHRvIGxvYWQgV2ViS2l0Mi5mcmFtZXdvcms6ICVz
XG4iLCBkbGVycm9yKCkpOwotICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHlwZWRlZiB2b2lkICgqSW5p
dGlhbGl6ZVdlYlByb2Nlc3NGdW5jdGlvbikoY29uc3QgY2hhciogY2xpZW50SWRlbnRpZmVyLCB4
cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIG1hY2hfcG9ydF90IHNlcnZlclBvcnQsIGNvbnN0
IGNoYXIqIHVpUHJvY2Vzc05hbWUpOwotICAgICAgICAgICAgICAgIEluaXRpYWxpemVXZWJQcm9j
ZXNzRnVuY3Rpb24gaW5pdGlhbGl6ZVdlYlByb2Nlc3NGdW5jdGlvblB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SW5pdGlhbGl6ZVdlYlByb2Nlc3NGdW5jdGlvbj4oZGxzeW0oZnJhbWV3b3JrTGlicmFy
eSwgImluaXRpYWxpemVXZWJQcm9jZXNzRm9yV2ViUHJvY2Vzc1NlcnZpY2VGb3JXZWJLaXREZXZl
bG9wbWVudCIpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxpemVXZWJQcm9jZXNzRnVu
Y3Rpb25QdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJVbmFibGUgdG8gZmluZCBl
bnRyeSBwb2ludCBpbiBXZWJLaXQyLmZyYW1ld29yazogJXNcbiIsIGRsZXJyb3IoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB4cGNfb2JqZWN0X3QgcmVwbHkgPSB4cGNfZGljdGlvbmFyeV9jcmVh
dGVfcmVwbHkoZXZlbnQpOwotICAgICAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJp
bmcocmVwbHksICJtZXNzYWdlLW5hbWUiLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmciKTsK
LSAgICAgICAgICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoeHBjX2RpY3Rpb25h
cnlfZ2V0X3JlbW90ZV9jb25uZWN0aW9uKGV2ZW50KSwgcmVwbHkpOwotICAgICAgICAgICAgICAg
IHhwY19yZWxlYXNlKHJlcGx5KTsKLQotICAgICAgICAgICAgICAgIGR1cDIoeHBjX2RpY3Rpb25h
cnlfZHVwX2ZkKGV2ZW50LCAic3Rkb3V0IiksIFNURE9VVF9GSUxFTk8pOwotICAgICAgICAgICAg
ICAgIGR1cDIoeHBjX2RpY3Rpb25hcnlfZHVwX2ZkKGV2ZW50LCAic3RkZXJyIiksIFNUREVSUl9G
SUxFTk8pOwotCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVdlYlByb2Nlc3NGdW5jdGlvblB0
cih4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5nKGV2ZW50LCAiY2xpZW50LWlkZW50aWZpZXIiKSwg
cGVlciwgeHBjX2RpY3Rpb25hcnlfY29weV9tYWNoX3NlbmQoZXZlbnQsICJzZXJ2ZXItcG9ydCIp
LCB4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5nKGV2ZW50LCAidWktcHJvY2Vzcy1uYW1lIikpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB4cGNfY29ubmVjdGlvbl9y
ZXN1bWUocGVlcik7Ci19Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgeHBjX21haW4oV2ViUHJvY2Vzc1NlcnZpY2VGb3JX
ZWJLaXREZXZlbG9wbWVudEV2ZW50SGFuZGxlcik7Ci0gICAgcmV0dXJuIDA7OworICAgIHhwY19t
YWluKFhQQ1NlcnZpY2VFdmVudEhhbmRsZXIpOworICAgIHJldHVybiAwOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1dlYkNvbnRl
bnRTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlTWFpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNl
cnZpY2UvV2ViQ29udGVudFNlcnZpY2VNYWluLm1tCShyZXZpc2lvbiAxNDA5MTMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVu
dFNlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VNYWluLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5
ICsyMywxMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
bXBvcnQgIldlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMuaCIKKyNkZWZpbmUgWFBDX1NFUlZJ
Q0VfSU5JVElBTElaRVIgaW5pdGlhbGl6ZVdlYkNvbnRlbnRTZXJ2aWNlCisjaW5jbHVkZSAiWFBD
U2VydmljZUJvb3RzdHJhcHBlci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgcmV0dXJuIHdlYlByb2Nlc3NTZXJ2
aWNlTWFpbihhcmdjLCBhcmd2KTsKKyAgICB4cGNfbWFpbihYUENTZXJ2aWNlRXZlbnRIYW5kbGVy
KTsKKyAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFj
L1dlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2VydmljZUVudHJ5UG9pbnRzLmgJKHJldmlz
aW9uIDE0MDkxMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NT
ZXJ2aWNlRW50cnlQb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBXZWJQcm9jZXNzU2VydmljZUVudHJ5UG9pbnRzX2gKLSNkZWZpbmUg
V2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50c19oCi0KLSNpZiBIQVZFKFhQQykKLQotI2luY2x1
ZGUgIldLQmFzZS5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlm
Ci0KLS8vIFRoaXMgZW50cnkgcG9pbnQgaXMgdXNlZCBmb3IgdGhlIGluc3RhbGxlZCBXZWJQcm9j
ZXNzU2VydmljZSwgd2hpY2ggZG9lcyBub3QKLS8vIG5lZWQgdG8gYmUgcmUtZXhlY2VkLCBvciBt
ZXNzIGFyb3VuZCB3aXRoIERZTEQuCi1XS19FWFBPUlQgaW50IHdlYlByb2Nlc3NTZXJ2aWNlTWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpOwotCi0vLyBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQg
Zm9yIHRoZSBXZWJQcm9jZXNzU2VydmljZUZvcldlYktpdERldmVsb3BtZW50Ci0vLyB3aGljaCBu
ZWVkcyB0byBiZSByZS1leGVjLCBhbmQgY2FuJ3QgbGluayBkaXJlY3RseSB0byBXZWJLaXQyIHJl
cXVpcmluZwotLy8gc29tZSBEWUxEIGZpZGRsaW5nLgotV0tfRVhQT1JUIHZvaWQgaW5pdGlhbGl6
ZVdlYlByb2Nlc3NGb3JXZWJQcm9jZXNzU2VydmljZUZvcldlYktpdERldmVsb3BtZW50KGNvbnN0
IGNoYXIqIGNsaWVudElkZW50aWZpZXIsIHhwY19jb25uZWN0aW9uX3QsIG1hY2hfcG9ydF90IHNl
cnZlclBvcnQsIGNvbnN0IGNoYXIqIHVpUHJvY2Vzc05hbWUpOwotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLX07IC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgLy8gSEFWRShYUEMpCi0KLSNl
bmRpZiAvLyBXZWJQcm9jZXNzU2VydmljZUVudHJ5UG9pbnRzX2gKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlcnZpY2VF
bnRyeVBvaW50cy5tbQkocmV2aXNpb24gMTQwOTEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9tYWMvV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiV2ViUHJvY2Vzc1NlcnZpY2VFbnRyeVBvaW50cy5oIgotCi0jaWYgSEFWRShYUEMpCi0KLSNp
bXBvcnQgIkVudmlyb25tZW50VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9SdW5Mb29wLmg+
Ci0jaW1wb3J0IDxzdGRpby5oPgotI2ltcG9ydCA8c3RkbGliLmg+Ci0jaW1wb3J0IDx4cGMveHBj
Lmg+Ci0KLWV4dGVybiAiQyIgbWFjaF9wb3J0X3QgeHBjX2RpY3Rpb25hcnlfY29weV9tYWNoX3Nl
bmQoeHBjX29iamVjdF90LCBjb25zdCBjaGFyKik7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1z
dGF0aWMgdm9pZCBXZWJQcm9jZXNzU2VydmljZUV2ZW50SGFuZGxlcih4cGNfY29ubmVjdGlvbl90
IHBlZXIpCi17Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2V0X3RhcmdldF9xdWV1ZShwZWVyLCBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKLSAgICB4cGNfY29ubmVjdGlvbl9zZXRfZXZlbnRfaGFu
ZGxlcihwZWVyLCBeKHhwY19vYmplY3RfdCBldmVudCkgewotICAgICAgICB4cGNfdHlwZV90IHR5
cGUgPSB4cGNfZ2V0X3R5cGUoZXZlbnQpOwotICAgICAgICBpZiAodHlwZSA9PSBYUENfVFlQRV9F
UlJPUikgewotICAgICAgICAgICAgaWYgKGV2ZW50ID09IFhQQ19FUlJPUl9DT05ORUNUSU9OX0lO
VkFMSUQgfHwgZXZlbnQgPT0gWFBDX0VSUk9SX1RFUk1JTkFUSU9OX0lNTUlORU5UKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UgbW9yZSBncmFjZWZ1bGx5Lgot
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFhQQ19UWVBFX0RJQ1RJT05B
UlkpOwotCi0gICAgICAgICAgICBpZiAoIXN0cmNtcCh4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5n
KGV2ZW50LCAibWVzc2FnZS1uYW1lIiksICJib290c3RyYXAiKSkgewotICAgICAgICAgICAgICAg
IHhwY19vYmplY3RfdCByZXBseSA9IHhwY19kaWN0aW9uYXJ5X2NyZWF0ZV9yZXBseShldmVudCk7
Ci0gICAgICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhyZXBseSwgIm1lc3Nh
Z2UtbmFtZSIsICJwcm9jZXNzLWZpbmlzaGVkLWxhdW5jaGluZyIpOwotICAgICAgICAgICAgICAg
IHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZSh4cGNfZGljdGlvbmFyeV9nZXRfcmVtb3RlX2Nv
bm5lY3Rpb24oZXZlbnQpLCByZXBseSk7Ci0gICAgICAgICAgICAgICAgeHBjX3JlbGVhc2UocmVw
bHkpOwotCi0gICAgICAgICAgICAgICAgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NOYW1l
ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhldmVudCwgInVpLXByb2Nlc3MtbmFtZSIpOwot
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmllciA9IHhwY19kaWN0aW9u
YXJ5X2dldF9zdHJpbmcoZXZlbnQsICJjbGllbnQtaWRlbnRpZmllciIpOwotICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSB4cGNfZGljdGlvbmFyeV9jb3B5
X21hY2hfc2VuZChldmVudCwgInNlcnZlci1wb3J0Iik7Ci0KLSAgICAgICAgICAgICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB4cGNfY29ubmVjdGlvbl9yZXN1bWUocGVlcik7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLWludCB3ZWJQcm9jZXNzU2VydmljZU1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8vIFJlbW92ZSB0aGUgV2ViUHJvY2VzcyBzaGltIGZy
b20gdGhlIERZTERfSU5TRVJUX0xJQlJBUklFUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBhbnkg
cHJvY2Vzc2VzIHNwYXduZWQgYnkKLSAgICAvLyB0aGUgV2ViUHJvY2VzcyBkb24ndCB0cnkgdG8g
aW5zZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KLSAgICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3Ry
aXBWYWx1ZXNFbmRpbmdXaXRoU3RyaW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCAiL1NlY0l0
ZW1TaGltLmR5bGliIik7Ci0KLSAgICBSdW5Mb29wOjpzZXRVc2VBcHBsaWNhdGlvblJ1bkxvb3BP
bk1haW5SdW5Mb29wKCk7Ci0gICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKLQotICAgIHhwY19tYWlu
KFdlYlByb2Nlc3NTZXJ2aWNlRXZlbnRIYW5kbGVyKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBpbml0aWFsaXplV2ViUHJvY2Vzc0ZvcldlYlByb2Nlc3NTZXJ2aWNlRm9yV2ViS2l0RGV2ZWxv
cG1lbnQoY29uc3QgY2hhciogY2xpZW50SWRlbnRpZmllciwgeHBjX2Nvbm5lY3Rpb25fdCBjb25u
ZWN0aW9uLCBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0LCBjb25zdCBjaGFyKiB1aVByb2Nlc3NOYW1l
KQotewotICAgIC8vIFJlbW92ZSB0aGUgV2ViUHJvY2VzcyBzaGltIGZyb20gdGhlIERZTERfSU5T
RVJUX0xJQlJBUklFUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBhbnkgcHJvY2Vzc2VzIHNwYXdu
ZWQgYnkKLSAgICAvLyB0aGUgV2ViUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGlt
IGFuZCBjcmFzaC4KLSAgICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3RyaXBWYWx1ZXNFbmRpbmdX
aXRoU3RyaW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCAiL1NlY0l0ZW1TaGltLmR5bGliIik7
Ci0KLSAgICBSdW5Mb29wOjpzZXRVc2VBcHBsaWNhdGlvblJ1bkxvb3BPbk1haW5SdW5Mb29wKCk7
Ci0gICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKLQotICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzTmFtZSA9
IHVpUHJvY2Vzc05hbWU7Ci0gICAgcGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyID0gY2xpZW50
SWRlbnRpZmllcjsKLSAgICBwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyID0gQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcihzZXJ2ZXJQb3J0LCBjb25uZWN0aW9uKTsKLQotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUocGFyYW1ldGVycyk7Ci19Ci0KLSNlbmRp
ZiAvLyBIQVZFKFhQQykK
</data>
<flag name="review"
          id="203767"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>