<?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>33360</bug_id>
          
          <creation_ts>2010-01-07 20:26:37 -0800</creation_ts>
          <short_desc>Web Inspector: Console-invoked ObjC methods lose their string parameters</short_desc>
          <delta_ts>2016-12-14 11:04:09 -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>WebCore JavaScript</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Jalkut">jalkut</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>bweinstein</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>oliver</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>remy.saissy</cc>
    
    <cc>rik</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>178501</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Jalkut">jalkut</who>
    <bug_when>2010-01-07 20:26:37 -0800</bug_when>
    <thetext>1. Inspect a document whose DOM has a WebScriptObject attached with exposed methods.
2. Arrange that one of those exposed methods takes a string parameter, e.g.:

- (void) debugLog:(NSString*)theLogString
{
	NSLog(@&quot;%@&quot;, theLogString);
}

3. Attempt to call the bridged method from the inspector&apos;s console window, e.g.:

window.myObject.debugLog_(&quot;hello there!&quot;);

RESULT: Although the bridged method is called, the &quot;hello there!&quot; string does not survive the transition, and arrives as a nil parameter.

Expected: The strings generated in the context of the Console/Inspector should survive as well as strings evaluated and passed in the course of a page&apos;s imported scripts.

Note that it&apos;s not just a literal vs. object type of problem. I declared a string object in the console as:

var myString = new String(&quot;hello there!&quot;);

And passing that variable to the bridged method fails as well.

I did a cursory hunt through WebCore before I gave up trying to find the root cause. But my naive assumption is it has something to do with the convertValueToObjcValue: method in objc_utility.mm. It appears that a valid JSValue exists at this point, and even claims to be a string, but the block of code starting with &quot;case ObjcObjectType:&quot; is not able to locate a root object for the JSValue.

Hope this helps,
Daniel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178502</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Jalkut">jalkut</who>
    <bug_when>2010-01-07 20:27:33 -0800</bug_when>
    <thetext>I meant to mention that the buggy behavior is true as of trunk WebKit sources, checked out earlier today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178511</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-01-07 21:12:35 -0800</bug_when>
    <thetext>Daniel, this would be easier to test and investigate if there was a simple test application that could easily be used to demonstrate the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178514</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-01-07 21:13:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/7521765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178636</commentid>
    <comment_count>4</comment_count>
      <attachid>46131</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-01-08 04:30:58 -0800</bug_when>
    <thetext>Created attachment 46131
Patch to MiniBrowser that allows testing of this issue

After applying this patch to MiniBrowser the issue can be reproduced by opening the inspector from the context menu and entering “browser.log_(‘I am not null!’)” at the console.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178679</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Jalkut">jalkut</who>
    <bug_when>2010-01-08 08:06:24 -0800</bug_when>
    <thetext>Mark, sorry I didn&apos;t include an example.  Thanks for running with it and putting together the patch for easily reproducing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495573</commentid>
    <comment_count>6</comment_count>
    <who name="Rémy SAISSY">remy.saissy</who>
    <bug_when>2011-11-03 10:05:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Mark, sorry I didn&apos;t include an example.  Thanks for running with it and putting together the patch for easily reproducing it.

Hi,
I&apos;ve attached a patch for this issue. It applies to WebCore/bridge/objc/objc_utility.mm.

I was also not able to find the root cause but I&apos;ve found that it has something to do with RootObject initialization.
Indeed, the call to findRootObject() in objc_utility.mm returns nil whereas it should return a valid pointer since the conversion code is in _convertValueToObjcValue:.

I&apos;ve also found that - (void)setValue:(id)value forKey:(NSString *)key in bindings/objc/WebScriptObject.mm
uses a rootObject to add the webscript. Maybe an initialization is missing here.

Hope this helps,
Rémy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495577</commentid>
    <comment_count>7</comment_count>
      <attachid>113513</attachid>
    <who name="Rémy SAISSY">remy.saissy</who>
    <bug_when>2011-11-03 10:07:00 -0700</bug_when>
    <thetext>Created attachment 113513
Patch for the issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495616</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-11-03 10:35:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=113513) [details]
&gt; Patch for the issue

Something appears wrong with this patch. It shows an entirely replaced file
instead of what differed within the file. Could you upload a new patch?
Also, it looks like you used tabs for your changes. You should follow
WebKit&apos;s style of 4 spaces no tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495635</commentid>
    <comment_count>9</comment_count>
      <attachid>113521</attachid>
    <who name="Rémy SAISSY">remy.saissy</who>
    <bug_when>2011-11-03 10:56:28 -0700</bug_when>
    <thetext>Created attachment 113521
Patch

Hi Joseph,
a ^M issue, sorry.
I fixed it, here is the new patch.

Regards,
Rémy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259802</commentid>
    <comment_count>10</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-14 10:22:09 -0800</bug_when>
    <thetext>I am unable to reproduce this issue. A test application would a help a lot. Please re-open if this is still relevant to anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259816</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Jalkut">jalkut</who>
    <bug_when>2016-12-14 11:04:09 -0800</bug_when>
    <thetext>Happily, I can confirm that this is not reproducable in the WebKit that ships with macOS 10.12.2.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46131</attachid>
            <date>2010-01-08 04:30:58 -0800</date>
            <delta_ts>2010-06-10 20:11:49 -0700</delta_ts>
            <desc>Patch to MiniBrowser that allows testing of this issue</desc>
            <filename>bug-33360.patch</filename>
            <type>text/plain</type>
            <size>1562</size>
            <attacher name="Mark Rowe (bdash)">mrowe</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0FwcENvbnRyb2xsZXIubSBiL0FwcENvbnRyb2xsZXIubQppbmRleCAzZDNk
MDk1Li4yMTUyOWVjIDEwMDY0NAotLS0gYS9BcHBDb250cm9sbGVyLm0KKysrIGIvQXBwQ29udHJv
bGxlci5tCkBAIC00NCw2ICs0NCw4IEBACiAKIC0gKHZvaWQpYXBwbGljYXRpb25EaWRGaW5pc2hM
YXVuY2hpbmc6KE5TTm90aWZpY2F0aW9uICopYU5vdGlmaWNhdGlvbgogeworICAgIFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktp
dERldmVsb3BlckV4dHJhcyJdOworCiAgICAgLy8gQ3JlYXRlIGEgc2hhcmVkIFdlYkhpc3Rvcnkg
b2JqZWN0CiAgICAgV2ViSGlzdG9yeSAqbXlIaXN0b3J5ID0gW1tXZWJIaXN0b3J5IGFsbG9jXSBp
bml0XTsKICAgICBbV2ViSGlzdG9yeSBzZXRPcHRpb25hbFNoYXJlZEhpc3Rvcnk6bXlIaXN0b3J5
XTsKZGlmZiAtLWdpdCBhL01pbmlCcm93c2VyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9N
aW5pQnJvd3Nlci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDExMjVlZTAuLmFhMGFi
NDAgMTAwNjQ0Ci0tLSBhL01pbmlCcm93c2VyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvTWluaUJyb3dzZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE1LDYgKzIxNSw4
IEBACiAJCTE0OUMyOTdFMDg5MDJDNTIwMDhBOUVGQyAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9
ICIkKE9OTFlfQUNUSVZFX0FSQ0hfUFJFX1hDT0RFXzNfMSkiOworCQkJCU9OTFlfQUNUSVZFX0FS
Q0hfUFJFX1hDT0RFXzNfMSA9ICIkKE5BVElWRV9BUkNIX0FDVFVBTCkiOwogCQkJCU9USEVSX0NG
TEFHUyA9ICgKIAkJCQkJIi1XYWxsIiwKIAkJCQkJIi1XZm9ybWF0LXNlY3VyaXR5IiwKZGlmZiAt
LWdpdCBhL015RG9jdW1lbnQubSBiL015RG9jdW1lbnQubQppbmRleCBiZjViYzlmLi42YzE4N2Y1
IDEwMDY0NAotLS0gYS9NeURvY3VtZW50Lm0KKysrIGIvTXlEb2N1bWVudC5tCkBAIC0yNTYsNiAr
MjU2LDIxIEBACiAgICAgW3NlbGYgdXBkYXRlV2luZG93XTsKIH0KIAorLSAodm9pZCl3ZWJWaWV3
OihXZWJWaWV3ICopd2ViVmlldyBkaWRDbGVhcldpbmRvd09iamVjdDooV2ViU2NyaXB0T2JqZWN0
ICopd2luZG93T2JqZWN0IGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgW3dpbmRv
d09iamVjdCBzZXRWYWx1ZTpzZWxmIGZvcktleTpAImJyb3dzZXIiXTsKK30KKworKyhCT09MKWlz
U2VsZWN0b3JFeGNsdWRlZEZyb21XZWJTY3JpcHQ6KFNFTClzZWxlY3RvcgoreworICAgIHJldHVy
biBOTzsKK30KKworLSh2b2lkKWxvZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBOU0xvZyhA
IiVAIiwgc3RyaW5nKTsKK30KKwogLy8gV2ViVUlEZWxlZ2F0ZSBNZXRob2RzCiAKIC0gKFdlYlZp
ZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDoo
TlNVUkxSZXF1ZXN0ICopcmVxdWVzdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113513</attachid>
            <date>2011-11-03 10:07:00 -0700</date>
            <delta_ts>2011-11-03 10:56:28 -0700</delta_ts>
            <desc>Patch for the issue</desc>
            <filename>objc_utility.mm.diff</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="Rémy SAISSY">remy.saissy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbSBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQppbmRleCAxYTdiOTI5
Li44NDJjYmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0
aWxpdHkubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1t
CkBAIC0xLDM3MyArMSwzNzkgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJvYmpjX3V0aWxpdHkuaCIKLQotI2luY2x1ZGUgIm9iamNfaW5zdGFu
Y2UuaCIKLSNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCi0jaW5jbHVkZSAicnVudGltZV9vYmpl
Y3QuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRPYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgIWRlZmluZWQoX0NfTE5HX0xORykKLSNkZWZpbmUgX0Nf
TE5HX0xORyAncScKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX0NfVUxOR19MTkcpCi0jZGVmaW5l
IF9DX1VMTkdfTE5HICdRJwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfQ19DT05TVCkKLSNkZWZp
bmUgX0NfQ09OU1QgJ3InCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9DX0JZQ09QWSkKLSNkZWZp
bmUgX0NfQllDT1BZICdPJwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfQ19CWVJFRikKLSNkZWZp
bmUgX0NfQllSRUYgJ1InCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9DX09ORVdBWSkKLSNkZWZp
bmUgX0NfT05FV0FZICdWJwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfQ19HQ0lOVklTSUJMRSkK
LSNkZWZpbmUgX0NfR0NJTlZJU0lCTEUgJyEnCi0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci1u
YW1lc3BhY2UgQmluZGluZ3MgewotCi0vKgotICAgIEJ5IGRlZmF1bHQsIGEgSmF2YVNjcmlwdCBt
ZXRob2QgbmFtZSBpcyBwcm9kdWNlZCBieSBjb25jYXRlbmF0aW5nIHRoZSAKLSAgICBjb21wb25l
bnRzIG9mIGFuIE9iamVjdGl2ZUMgbWV0aG9kIG5hbWUsIHJlcGxhY2luZyAnOicgd2l0aCAnXycs
IGFuZCAKLSAgICBlc2NhcGluZyAnXycgYW5kICckJyB3aXRoIGEgbGVhZGluZyAnJCcsIHN1Y2gg
dGhhdCAnXycgYmVjb21lcyAiJF8iIGFuZCAKLSAgICAnJCcgYmVjb21lcyAiJCQiLiBGb3IgZXhh
bXBsZToKLQotICAgIE9iamVjdGl2ZUMgbmFtZSAgICAgICAgIERlZmF1bHQgSmF2YVNjcmlwdCBu
YW1lCi0gICAgICAgIG1vdmVUbzo6ICAgICAgICAgICAgICAgIG1vdmVUb19fCi0gICAgICAgIG1v
dmVUb18gICAgICAgICAgICAgICAgIG1vdmVUbyRfCi0gICAgICAgIG1vdmVUbyRfICAgICAgICAg
ICAgICAgIG1vdmVUbyQkJF8KLQotICAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGludmVy
c2Ugb2YgdGhhdCBvcGVyYXRpb24uCi0gCi0gICAgQHJlc3VsdCBGaWxscyAnYnVmZmVyJyB3aXRo
IHRoZSBPYmplY3RpdmVDIG1ldGhvZCBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gJ0pTTmFtZScu
IAotICAgICAgICAgICAgUmV0dXJucyB0cnVlIGZvciBzdWNjZXNzLCBmYWxzZSBmb3IgZmFpbHVy
ZS4gKEZhaWx1cmUgb2NjdXJzIHdoZW4gJ2J1ZmZlcicgCi0gICAgICAgICAgICBpcyBub3QgYmln
IGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQuKQotKi8KLWJvb2wgY29udmVydEpTTWV0aG9kTmFt
ZVRvT2JqYyhjb25zdCBjaGFyICpKU05hbWUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUpCi17Ci0gICAgQVNTRVJUKEpTTmFtZSAmJiBidWZmZXIpOwotICAgIAotICAgIGNvbnN0IGNo
YXIgKnNwID0gSlNOYW1lOyAvLyBzb3VyY2UgcG9pbnRlcgotICAgIGNoYXIgKmRwID0gYnVmZmVy
OyAvLyBkZXN0aW5hdGlvbiBwb2ludGVyCi0gICAgICAgIAotICAgIGNoYXIgKmVuZCA9IGJ1ZmZl
ciArIGJ1ZmZlclNpemU7Ci0gICAgd2hpbGUgKGRwIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqc3Ag
PT0gJyQnKSB7Ci0gICAgICAgICAgICArK3NwOwotICAgICAgICAgICAgKmRwID0gKnNwOwotICAg
ICAgICB9IGVsc2UgaWYgKCpzcCA9PSAnXycpCi0gICAgICAgICAgICAqZHAgPSAnOic7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICpkcCA9ICpzcDsKLQotICAgICAgICAvLyBJZiBhIGZ1dHVy
ZSBjb2RlciBwdXRzIGZ1bm55ICsrIG9wZXJhdG9ycyBhYm92ZSwgd2UgbWlnaHQgd3JpdGUgb2Zm
IHRoZSBlbmQgCi0gICAgICAgIC8vIG9mIHRoZSBidWZmZXIgaW4gdGhlIG1pZGRsZSBvZiB0aGlz
IGxvb3AuIExldCdzIG1ha2Ugc3VyZSB0byBjaGVjayBmb3IgdGhhdC4KLSAgICAgICAgQVNTRVJU
KGRwIDwgZW5kKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgqc3AgPT0gMCkgeyAvLyBXZSBmaW5p
c2hlZCBjb252ZXJ0aW5nIEpTTmFtZQotICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihKU05hbWUp
IDwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgKytzcDsgCi0gICAgICAgICsrZHA7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOyAvLyBXZSByYW4gb3V0IG9mIGJ1ZmZlciBiZWZvcmUgY29udmVydGluZyBKU05hbWUK
LX0KLQotLyoKLQotICAgIEphdmFTY3JpcHQgdG8gICBPYmpDCi0gICAgTnVtYmVyICAgICAgICAg
IGNvZXJjZWQgdG8gY2hhciwgc2hvcnQsIGludCwgbG9uZywgZmxvYXQsIGRvdWJsZSwgb3IgTlNO
dW1iZXIsIGFzIGFwcHJvcHJpYXRlCi0gICAgU3RyaW5nICAgICAgICAgIE5TU3RyaW5nCi0gICAg
d3JhcHBlciAgICAgICAgIGlkCi0gICAgT2JqZWN0ICAgICAgICAgIFdlYlNjcmlwdE9iamVjdAot
ICAgIG51bGwgICAgICAgICAgICBOU051bGwKLSAgICBbXSwgb3RoZXIgICAgICAgZXhjZXB0aW9u
Ci0KLSovCi1PYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCi17Ci0gICAgT2JqY1ZhbHVlIHJl
c3VsdDsKLSAgICBkb3VibGUgZCA9IDA7Ci0KLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSB8fCB2
YWx1ZS5pc1N0cmluZygpIHx8IHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICBkID0gdmFsdWUu
dG9OdW1iZXIoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBPYmpj
T2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QgKm9yaWdpbkds
b2JhbE9iamVjdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgIFJv
b3RPYmplY3QqIG9yaWdpblJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVjdChvcmlnaW5HbG9iYWxP
YmplY3QpOwotCi0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+aXNH
bG9iYWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7Ci0KLSAgICAgICAgICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCA9IG9yaWdpbkdsb2Jh
bE9iamVjdDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSBmaW5kUm9vdE9iamVjdChnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0
Lm9iamVjdFZhbHVlID0gIHJvb3RPYmplY3QKLSAgICAgICAgICAgICAgICA/IFt3ZWJTY3JpcHRP
YmplY3RDbGFzcygpIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTp2YWx1ZSBvcmlnaW5Sb290T2Jq
ZWN0Om9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDpyb290T2JqZWN0XQotICAgICAgICAgICAg
ICAgIDogbmlsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgT2Jq
Y0NoYXJUeXBlOgotICAgICAgICBjYXNlIE9iamNVbnNpZ25lZENoYXJUeXBlOgotICAgICAgICAg
ICAgcmVzdWx0LmNoYXJWYWx1ZSA9IChjaGFyKWQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBPYmpjU2hvcnRUeXBlOgotICAgICAgICBjYXNlIE9iamNVbnNpZ25lZFNob3J0VHlw
ZToKLSAgICAgICAgICAgIHJlc3VsdC5zaG9ydFZhbHVlID0gKHNob3J0KWQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPYmpjSW50VHlwZToKLSAgICAgICAgY2FzZSBPYmpjVW5z
aWduZWRJbnRUeXBlOgotICAgICAgICAgICAgcmVzdWx0LmludFZhbHVlID0gKGludClkOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT2JqY0xvbmdUeXBlOgotICAgICAgICBjYXNl
IE9iamNVbnNpZ25lZExvbmdUeXBlOgotICAgICAgICAgICAgcmVzdWx0LmxvbmdWYWx1ZSA9IChs
b25nKWQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPYmpjTG9uZ0xvbmdUeXBl
OgotICAgICAgICBjYXNlIE9iamNVbnNpZ25lZExvbmdMb25nVHlwZToKLSAgICAgICAgICAgIHJl
c3VsdC5sb25nTG9uZ1ZhbHVlID0gKGxvbmcgbG9uZylkOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT2JqY0Zsb2F0VHlwZToKLSAgICAgICAgICAgIHJlc3VsdC5mbG9hdFZhbHVl
ID0gKGZsb2F0KWQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPYmpjRG91Ymxl
VHlwZToKLSAgICAgICAgICAgIHJlc3VsdC5kb3VibGVWYWx1ZSA9IChkb3VibGUpZDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9iamNWb2lkVHlwZToKLSAgICAgICAgICAgIGJ6
ZXJvKCZyZXN1bHQsIHNpemVvZihPYmpjVmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgT2JqY0ludmFsaWRUeXBlOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgLy8gRklYTUU6IHRocm93IGFuIGV4Y2VwdGlvbj8KLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCi17Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKLSAgICB1bmljaGFyICpjaGFyczsK
LSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gW25zc3RyaW5nIGxlbmd0aF07Ci0gICAgY2hhcnMg
PSAodW5pY2hhciAqKW1hbGxvYyhzaXplb2YodW5pY2hhcikqbGVuZ3RoKTsKLSAgICBbbnNzdHJp
bmcgZ2V0Q2hhcmFjdGVyczpjaGFyc107Ci0gICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciopY2hh
cnMsIGxlbmd0aCk7Ci0gICAgSlNWYWx1ZSBhVmFsdWUgPSBqc1N0cmluZyhleGVjLCB1KTsKLSAg
ICBmcmVlKCh2b2lkICopY2hhcnMpOwotICAgIHJldHVybiBhVmFsdWU7Ci19Ci0KLS8qCi0gICAg
T2JqQyAgICAgIHRvICAgIEphdmFTY3JpcHQKLSAgICAtLS0tICAgICAgICAgICAgLS0tLS0tLS0t
LQotICAgIGNoYXIgICAgICAgICAgICBudW1iZXIKLSAgICBzaG9ydCAgICAgICAgICAgbnVtYmVy
Ci0gICAgaW50ICAgICAgICAgICAgIG51bWJlcgotICAgIGxvbmcgICAgICAgICAgICBudW1iZXIK
LSAgICBmbG9hdCAgICAgICAgICAgbnVtYmVyCi0gICAgZG91YmxlICAgICAgICAgIG51bWJlcgot
ICAgIE5TTnVtYmVyICAgICAgICBib29sZWFuIG9yIG51bWJlcgotICAgIE5TU3RyaW5nICAgICAg
ICBzdHJpbmcKLSAgICBOU0FycmF5ICAgICAgICAgYXJyYXkKLSAgICBOU051bGwgICAgICAgICAg
bnVsbAotICAgIFdlYlNjcmlwdE9iamVjdCB1bmRlcmx5aW5nIEphdmFTY3JpcHQgb2JqZWN0Ci0g
ICAgV2ViVW5kZWZpbmVkICAgIHVuZGVmaW5lZAotICAgIGlkICAgICAgICAgICAgICBvYmplY3Qg
d3JhcHBlcgotICAgIG90aGVyICAgICAgICAgICBzaG91bGQgbm90IGhhcHBlbgotKi8KLUpTVmFs
dWUgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBidWZmZXIs
IE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKLXsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7Ci0gICAgICAgICAgICBpZCBvYmogPSAq
KGlkKilidWZmZXI7Ci0gICAgICAgICAgICBpZiAoW29iaiBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TlNTdHJpbmdUb1N0cmlu
ZyhleGVjLCAoTlNTdHJpbmcgKilvYmopOwotICAgICAgICAgICAgaWYgKFtvYmogaXNLaW5kT2ZD
bGFzczp3ZWJVbmRlZmluZWRDbGFzcygpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAgICAgICAgIGlmICgoQ0ZCb29sZWFuUmVmKW9iaiA9PSBrQ0ZCb29sZWFu
VHJ1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotICAgICAgICAg
ICAgaWYgKChDRkJvb2xlYW5SZWYpb2JqID09IGtDRkJvb2xlYW5GYWxzZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChbb2JqIGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKFtvYmogZG91YmxlVmFsdWVdKTsKLSAgICAgICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUnVudGltZUFycmF5
OjpjcmVhdGUoZXhlYywgbmV3IE9iamNBcnJheShvYmosIHJvb3RPYmplY3QpKTsKLSAgICAgICAg
ICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6d2ViU2NyaXB0T2JqZWN0Q2xhc3MoKV0pIHsKLSAg
ICAgICAgICAgICAgICBKU09iamVjdCogaW1wID0gW29iaiBfaW1wXTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW1wID8gaW1wIDoganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6W05TTnVsbCBjbGFzc11dKQotICAgICAgICAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIGlmIChvYmogPT0gMCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBPYmpj
SW5zdGFuY2U6OmNyZWF0ZShvYmosIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgT2JqY0NoYXJUeXBlOgotICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKCooY2hhciopYnVmZmVyKTsKLSAgICAgICAgY2FzZSBPYmpjVW5zaWdu
ZWRDaGFyVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKHVuc2lnbmVkIGNoYXIq
KWJ1ZmZlcik7Ci0gICAgICAgIGNhc2UgT2JqY1Nob3J0VHlwZToKLSAgICAgICAgICAgIHJldHVy
biBqc051bWJlcigqKHNob3J0KilidWZmZXIpOwotICAgICAgICBjYXNlIE9iamNVbnNpZ25lZFNo
b3J0VHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKHVuc2lnbmVkIHNob3J0Kili
dWZmZXIpOwotICAgICAgICBjYXNlIE9iamNJbnRUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKCooaW50KilidWZmZXIpOwotICAgICAgICBjYXNlIE9iamNVbnNpZ25lZEludFR5cGU6
Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKih1bnNpZ25lZCBpbnQqKWJ1ZmZlcik7Ci0g
ICAgICAgIGNhc2UgT2JqY0xvbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCoo
bG9uZyopYnVmZmVyKTsKLSAgICAgICAgY2FzZSBPYmpjVW5zaWduZWRMb25nVHlwZToKLSAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcigqKHVuc2lnbmVkIGxvbmcqKWJ1ZmZlcik7Ci0gICAgICAg
IGNhc2UgT2JqY0xvbmdMb25nVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKGxv
bmcgbG9uZyopYnVmZmVyKTsKLSAgICAgICAgY2FzZSBPYmpjVW5zaWduZWRMb25nTG9uZ1R5cGU6
Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKih1bnNpZ25lZCBsb25nIGxvbmcqKWJ1ZmZl
cik7Ci0gICAgICAgIGNhc2UgT2JqY0Zsb2F0VHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051
bWJlcigqKGZsb2F0KilidWZmZXIpOwotICAgICAgICBjYXNlIE9iamNEb3VibGVUeXBlOgotICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCooZG91YmxlKilidWZmZXIpOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLiBBcmd1bWVudCB0eXBl
cyBhcmUgZmlsdGVyZWQuCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlk
IHR5cGUgKCVkKVxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgKGludCl0eXBlKTsKLSAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotfQotCi1PYmpjVmFsdWVUeXBlIG9iamNWYWx1ZVR5cGVGb3JUeXBlKGNvbnN0IGNoYXIgKnR5
cGUpCi17Ci0gICAgaW50IHR5cGVMZW5ndGggPSBzdHJsZW4odHlwZSk7Ci0gICAgT2JqY1ZhbHVl
VHlwZSBvYmpjVmFsdWVUeXBlID0gT2JqY0ludmFsaWRUeXBlOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0eXBlTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2hhciB0eXBlQ2hhciA9IHR5cGVb
aV07Ci0gICAgICAgIHN3aXRjaCAodHlwZUNoYXIpIHsKLSAgICAgICAgICAgIGNhc2UgX0NfQ09O
U1Q6Ci0gICAgICAgICAgICBjYXNlIF9DX0JZQ09QWToKLSAgICAgICAgICAgIGNhc2UgX0NfQllS
RUY6Ci0gICAgICAgICAgICBjYXNlIF9DX09ORVdBWToKLSAgICAgICAgICAgIGNhc2UgX0NfR0NJ
TlZJU0lCTEU6Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCB0aGVzZSB0eXBlIG1vZGlmaWVycwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBfQ19JRDoKLSAgICAgICAg
ICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY09iamVjdFR5cGU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIF9DX0NIUjoKLSAgICAgICAgICAgICAgICBvYmpjVmFs
dWVUeXBlID0gT2JqY0NoYXJUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBfQ19VQ0hSOgotICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVW5z
aWduZWRDaGFyVHlwZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
X0NfU0hUOgotICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjU2hvcnRUeXBlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBfQ19VU0hUOgotICAgICAg
ICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVW5zaWduZWRTaG9ydFR5cGU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIF9DX0lOVDoKLSAgICAgICAgICAgICAg
ICBvYmpjVmFsdWVUeXBlID0gT2JqY0ludFR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIF9DX1VJTlQ6Ci0gICAgICAgICAgICAgICAgb2JqY1ZhbHVlVHlwZSA9
IE9iamNVbnNpZ25lZEludFR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIF9DX0xORzoKLSAgICAgICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY0xvbmdU
eXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBfQ19VTE5HOgot
ICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVW5zaWduZWRMb25nVHlwZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgX0NfTE5HX0xORzoKLSAgICAg
ICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY0xvbmdMb25nVHlwZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgX0NfVUxOR19MTkc6Ci0gICAgICAgICAgICAg
ICAgb2JqY1ZhbHVlVHlwZSA9IE9iamNVbnNpZ25lZExvbmdMb25nVHlwZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgX0NfRkxUOgotICAgICAgICAgICAgICAgIG9i
amNWYWx1ZVR5cGUgPSBPYmpjRmxvYXRUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBfQ19EQkw6Ci0gICAgICAgICAgICAgICAgb2JqY1ZhbHVlVHlwZSA9IE9i
amNEb3VibGVUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBf
Q19WT0lEOgotICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVm9pZFR5cGU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIC8vIFVuaGFuZGxlZCB0eXBlLiBXZSBkb24ndCBoYW5kbGUgQyBzdHJ1Y3RzLCB1bmlvbnMs
IGV0Yy4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhyb3cgYW4gZXhjZXB0aW9uPwotICAg
ICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2Jq
Y1ZhbHVlVHlwZSAhPSBPYmpjSW52YWxpZFR5cGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gb2JqY1ZhbHVlVHlwZTsKLX0KLQotSlNPYmplY3QgKnRocm93RXJyb3Io
RXhlY1N0YXRlICpleGVjLCBOU1N0cmluZyAqbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQobWVzc2Fn
ZSk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IFttZXNzYWdlIGxlbmd0aF07Ci0gICAgdW5pY2hhciAq
YnVmZmVyID0gbmV3IHVuaWNoYXJbbGVuZ3RoXTsKLSAgICBbbWVzc2FnZSBnZXRDaGFyYWN0ZXJz
OmJ1ZmZlcl07Ci0gICAgSlNPYmplY3QgKmVycm9yID0gSlNDOjp0aHJvd0Vycm9yKGV4ZWMsIEpT
Qzo6Y3JlYXRlRXJyb3IoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsKLSAgICBkZWxl
dGUgW10gYnVmZmVyOwotICAgIHJldHVybiBlcnJvcjsKLX0KLQotfQotfQorLyoNCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0K
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZDQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVINCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1INCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwNCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sDQorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SDQorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQ0KKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIA0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcuaCINCisj
aW5jbHVkZSAib2JqY191dGlsaXR5LmgiDQorDQorI2luY2x1ZGUgIm9iamNfaW5zdGFuY2UuaCIN
CisjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIg0KKyNpbmNsdWRlICJydW50aW1lX29iamVjdC5o
Ig0KKyNpbmNsdWRlICJXZWJTY3JpcHRPYmplY3QuaCINCisjaW5jbHVkZSA8cnVudGltZS9KU0ds
b2JhbE9iamVjdC5oPg0KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPg0KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPg0KKw0KKyNpZiAhZGVmaW5lZChfQ19MTkdfTE5HKQ0KKyNkZWZpbmUg
X0NfTE5HX0xORyAncScNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoX0NfVUxOR19MTkcpDQor
I2RlZmluZSBfQ19VTE5HX0xORyAnUScNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoX0NfQ09O
U1QpDQorI2RlZmluZSBfQ19DT05TVCAncicNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoX0Nf
QllDT1BZKQ0KKyNkZWZpbmUgX0NfQllDT1BZICdPJw0KKyNlbmRpZg0KKw0KKyNpZiAhZGVmaW5l
ZChfQ19CWVJFRikNCisjZGVmaW5lIF9DX0JZUkVGICdSJw0KKyNlbmRpZg0KKw0KKyNpZiAhZGVm
aW5lZChfQ19PTkVXQVkpDQorI2RlZmluZSBfQ19PTkVXQVkgJ1YnDQorI2VuZGlmDQorDQorI2lm
ICFkZWZpbmVkKF9DX0dDSU5WSVNJQkxFKQ0KKyNkZWZpbmUgX0NfR0NJTlZJU0lCTEUgJyEnDQor
I2VuZGlmDQorDQorbmFtZXNwYWNlIEpTQyB7DQorbmFtZXNwYWNlIEJpbmRpbmdzIHsNCisNCisv
Kg0KKyAgICBCeSBkZWZhdWx0LCBhIEphdmFTY3JpcHQgbWV0aG9kIG5hbWUgaXMgcHJvZHVjZWQg
YnkgY29uY2F0ZW5hdGluZyB0aGUgDQorICAgIGNvbXBvbmVudHMgb2YgYW4gT2JqZWN0aXZlQyBt
ZXRob2QgbmFtZSwgcmVwbGFjaW5nICc6JyB3aXRoICdfJywgYW5kIA0KKyAgICBlc2NhcGluZyAn
XycgYW5kICckJyB3aXRoIGEgbGVhZGluZyAnJCcsIHN1Y2ggdGhhdCAnXycgYmVjb21lcyAiJF8i
IGFuZCANCisgICAgJyQnIGJlY29tZXMgIiQkIi4gRm9yIGV4YW1wbGU6DQorDQorICAgIE9iamVj
dGl2ZUMgbmFtZSAgICAgICAgIERlZmF1bHQgSmF2YVNjcmlwdCBuYW1lDQorICAgICAgICBtb3Zl
VG86OiAgICAgICAgICAgICAgICBtb3ZlVG9fXw0KKyAgICAgICAgbW92ZVRvXyAgICAgICAgICAg
ICAgICAgbW92ZVRvJF8NCisgICAgICAgIG1vdmVUbyRfICAgICAgICAgICAgICAgIG1vdmVUbyQk
JF8NCisNCisgICAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgaW52ZXJzZSBvZiB0aGF0IG9w
ZXJhdGlvbi4NCisgDQorICAgIEByZXN1bHQgRmlsbHMgJ2J1ZmZlcicgd2l0aCB0aGUgT2JqZWN0
aXZlQyBtZXRob2QgbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRvICdKU05hbWUnLiANCisgICAgICAg
ICAgICBSZXR1cm5zIHRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBmYWlsdXJlLiAoRmFpbHVy
ZSBvY2N1cnMgd2hlbiAnYnVmZmVyJyANCisgICAgICAgICAgICBpcyBub3QgYmlnIGVub3VnaCB0
byBob2xkIHRoZSByZXN1bHQuKQ0KKyovDQorYm9vbCBjb252ZXJ0SlNNZXRob2ROYW1lVG9PYmpj
KGNvbnN0IGNoYXIgKkpTTmFtZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkNCit7
DQorICAgIEFTU0VSVChKU05hbWUgJiYgYnVmZmVyKTsNCisgICAgDQorICAgIGNvbnN0IGNoYXIg
KnNwID0gSlNOYW1lOyAvLyBzb3VyY2UgcG9pbnRlcg0KKyAgICBjaGFyICpkcCA9IGJ1ZmZlcjsg
Ly8gZGVzdGluYXRpb24gcG9pbnRlcg0KKyAgICAgICAgDQorICAgIGNoYXIgKmVuZCA9IGJ1ZmZl
ciArIGJ1ZmZlclNpemU7DQorICAgIHdoaWxlIChkcCA8IGVuZCkgew0KKyAgICAgICAgaWYgKCpz
cCA9PSAnJCcpIHsNCisgICAgICAgICAgICArK3NwOw0KKyAgICAgICAgICAgICpkcCA9ICpzcDsN
CisgICAgICAgIH0gZWxzZSBpZiAoKnNwID09ICdfJykNCisgICAgICAgICAgICAqZHAgPSAnOic7
DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgKmRwID0gKnNwOw0KKw0KKyAgICAgICAgLy8g
SWYgYSBmdXR1cmUgY29kZXIgcHV0cyBmdW5ueSArKyBvcGVyYXRvcnMgYWJvdmUsIHdlIG1pZ2h0
IHdyaXRlIG9mZiB0aGUgZW5kIA0KKyAgICAgICAgLy8gb2YgdGhlIGJ1ZmZlciBpbiB0aGUgbWlk
ZGxlIG9mIHRoaXMgbG9vcC4gTGV0J3MgbWFrZSBzdXJlIHRvIGNoZWNrIGZvciB0aGF0Lg0KKyAg
ICAgICAgQVNTRVJUKGRwIDwgZW5kKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKCpzcCA9PSAw
KSB7IC8vIFdlIGZpbmlzaGVkIGNvbnZlcnRpbmcgSlNOYW1lDQorICAgICAgICAgICAgQVNTRVJU
KHN0cmxlbihKU05hbWUpIDwgYnVmZmVyU2l6ZSk7DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgICsrc3A7IA0KKyAgICAgICAgKytkcDsN
CisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7IC8vIFdlIHJhbiBvdXQgb2YgYnVmZmVyIGJl
Zm9yZSBjb252ZXJ0aW5nIEpTTmFtZQ0KK30NCisNCisvKg0KKw0KKyAgICBKYXZhU2NyaXB0IHRv
ICAgT2JqQw0KKyAgICBOdW1iZXIgICAgICAgICAgY29lcmNlZCB0byBjaGFyLCBzaG9ydCwgaW50
LCBsb25nLCBmbG9hdCwgZG91YmxlLCBvciBOU051bWJlciwgYXMgYXBwcm9wcmlhdGUNCisgICAg
U3RyaW5nICAgICAgICAgIE5TU3RyaW5nDQorICAgIHdyYXBwZXIgICAgICAgICBpZA0KKyAgICBP
YmplY3QgICAgICAgICAgV2ViU2NyaXB0T2JqZWN0DQorICAgIG51bGwgICAgICAgICAgICBOU051
bGwNCisgICAgW10sIG90aGVyICAgICAgIGV4Y2VwdGlvbg0KKw0KKyovDQorT2JqY1ZhbHVlIGNv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgT2Jq
Y1ZhbHVlVHlwZSB0eXBlKQ0KK3sNCisgICAgT2JqY1ZhbHVlIHJlc3VsdDsNCisgICAgZG91Ymxl
IGQgPSAwOw0KKw0KKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSB8fCB2YWx1ZS5pc0Jvb2xlYW4o
KSkNCisgICAgICAgIGQgPSB2YWx1ZS50b051bWJlcihleGVjKTsNCisNCisgICAgc3dpdGNoICh0
eXBlKSB7DQorICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7DQorICAgICAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsNCisgICAgICAgICAgICANCisgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpOw0KKyAgICAgICAgICAgIFJvb3RPYmplY3QqIG9yaWdpblJvb3RPYmplY3Qg
PSBmaW5kUm9vdE9iamVjdChvcmlnaW5HbG9iYWxPYmplY3QpOw0KKw0KKyAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOw0KKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHZhbHVlKS0+aXNHbG9iYWxPYmplY3QoKSkNCisgICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPihhc09i
amVjdCh2YWx1ZSkpOw0KKw0KKyAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0KQ0KKyAgICAg
ICAgICAgICAgICBnbG9iYWxPYmplY3QgPSBvcmlnaW5HbG9iYWxPYmplY3Q7DQorICAgICAgICAg
ICAgICAgIA0KKyAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBmaW5kUm9vdE9i
amVjdChnbG9iYWxPYmplY3QpOw0KKwkJCQ0KKwkJCWlmICh2YWx1ZS5pc1N0cmluZygpICYmICFy
b290T2JqZWN0KSB7DQorCQkJCWNvbnN0IFVTdHJpbmcmIHUgPSBhc1N0cmluZyh2YWx1ZSktPnZh
bHVlKGV4ZWMpOw0KKwkJCQlyZXN1bHQub2JqZWN0VmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aENoYXJhY3RlcnM6dS5jaGFyYWN0ZXJzKCkgbGVuZ3RoOnUubGVuZ3RoKCldOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgDQorCQkJfSBlbHNlIHsNCisJCQkJcmVzdWx0Lm9iamVjdFZhbHVlID0g
IHJvb3RPYmplY3QNCisgICAgICAgICAgICAgICAgPyBbd2ViU2NyaXB0T2JqZWN0Q2xhc3MoKSBf
Y29udmVydFZhbHVlVG9PYmpjVmFsdWU6dmFsdWUgb3JpZ2luUm9vdE9iamVjdDpvcmlnaW5Sb290
T2JqZWN0IHJvb3RPYmplY3Q6cm9vdE9iamVjdF0NCisgICAgICAgICAgICAgICAgOiBuaWw7DQor
CQkJfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIE9iamND
aGFyVHlwZToNCisgICAgICAgIGNhc2UgT2JqY1Vuc2lnbmVkQ2hhclR5cGU6DQorICAgICAgICAg
ICAgcmVzdWx0LmNoYXJWYWx1ZSA9IChjaGFyKWQ7DQorICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICBjYXNlIE9iamNTaG9ydFR5cGU6DQorICAgICAgICBjYXNlIE9iamNVbnNpZ25lZFNob3J0
VHlwZToNCisgICAgICAgICAgICByZXN1bHQuc2hvcnRWYWx1ZSA9IChzaG9ydClkOw0KKyAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSBPYmpjSW50VHlwZToNCisgICAgICAgIGNhc2Ug
T2JqY1Vuc2lnbmVkSW50VHlwZToNCisgICAgICAgICAgICByZXN1bHQuaW50VmFsdWUgPSAoaW50
KWQ7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIE9iamNMb25nVHlwZToNCisg
ICAgICAgIGNhc2UgT2JqY1Vuc2lnbmVkTG9uZ1R5cGU6DQorICAgICAgICAgICAgcmVzdWx0Lmxv
bmdWYWx1ZSA9IChsb25nKWQ7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIE9i
amNMb25nTG9uZ1R5cGU6DQorICAgICAgICBjYXNlIE9iamNVbnNpZ25lZExvbmdMb25nVHlwZToN
CisgICAgICAgICAgICByZXN1bHQubG9uZ0xvbmdWYWx1ZSA9IChsb25nIGxvbmcpZDsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgT2JqY0Zsb2F0VHlwZToNCisgICAgICAgICAg
ICByZXN1bHQuZmxvYXRWYWx1ZSA9IChmbG9hdClkOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgY2FzZSBPYmpjRG91YmxlVHlwZToNCisgICAgICAgICAgICByZXN1bHQuZG91YmxlVmFs
dWUgPSAoZG91YmxlKWQ7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIE9iamNW
b2lkVHlwZToNCisgICAgICAgICAgICBiemVybygmcmVzdWx0LCBzaXplb2YoT2JqY1ZhbHVlKSk7
DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIE9iamNJbnZhbGlkVHlwZToN
CisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgLy8gRklYTUU6IHRocm93IGFuIGV4Y2Vw
dGlvbj8NCisgICAgICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzdWx0
Ow0KK30NCisNCitKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgTlNTdHJpbmcgKm5zc3RyaW5nKQ0KK3sNCisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsNCisgICAgDQorICAgIHVuaWNoYXIgKmNoYXJzOw0KKyAgICB1bnNpZ25lZCBp
bnQgbGVuZ3RoID0gW25zc3RyaW5nIGxlbmd0aF07DQorICAgIGNoYXJzID0gKHVuaWNoYXIgKilt
YWxsb2Moc2l6ZW9mKHVuaWNoYXIpKmxlbmd0aCk7DQorICAgIFtuc3N0cmluZyBnZXRDaGFyYWN0
ZXJzOmNoYXJzXTsNCisgICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciopY2hhcnMsIGxlbmd0aCk7
DQorICAgIEpTVmFsdWUgYVZhbHVlID0ganNTdHJpbmcoZXhlYywgdSk7DQorICAgIGZyZWUoKHZv
aWQgKiljaGFycyk7DQorICAgIHJldHVybiBhVmFsdWU7DQorfQ0KKw0KKy8qDQorICAgIE9iakMg
ICAgICB0byAgICBKYXZhU2NyaXB0DQorICAgIC0tLS0gICAgICAgICAgICAtLS0tLS0tLS0tDQor
ICAgIGNoYXIgICAgICAgICAgICBudW1iZXINCisgICAgc2hvcnQgICAgICAgICAgIG51bWJlcg0K
KyAgICBpbnQgICAgICAgICAgICAgbnVtYmVyDQorICAgIGxvbmcgICAgICAgICAgICBudW1iZXIN
CisgICAgZmxvYXQgICAgICAgICAgIG51bWJlcg0KKyAgICBkb3VibGUgICAgICAgICAgbnVtYmVy
DQorICAgIE5TTnVtYmVyICAgICAgICBib29sZWFuIG9yIG51bWJlcg0KKyAgICBOU1N0cmluZyAg
ICAgICAgc3RyaW5nDQorICAgIE5TQXJyYXkgICAgICAgICBhcnJheQ0KKyAgICBOU051bGwgICAg
ICAgICAgbnVsbA0KKyAgICBXZWJTY3JpcHRPYmplY3QgdW5kZXJseWluZyBKYXZhU2NyaXB0IG9i
amVjdA0KKyAgICBXZWJVbmRlZmluZWQgICAgdW5kZWZpbmVkDQorICAgIGlkICAgICAgICAgICAg
ICBvYmplY3Qgd3JhcHBlcg0KKyAgICBvdGhlciAgICAgICAgICAgc2hvdWxkIG5vdCBoYXBwZW4N
CisqLw0KK0pTVmFsdWUgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB2
b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkN
Cit7DQorICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7DQorICAgIA0KKyAg
ICBzd2l0Y2ggKHR5cGUpIHsNCisgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsNCisgICAg
ICAgICAgICBpZCBvYmogPSAqKGlkKilidWZmZXI7DQorICAgICAgICAgICAgaWYgKFtvYmogaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkNCisgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnROU1N0cmluZ1RvU3RyaW5nKGV4ZWMsIChOU1N0cmluZyAqKW9iaik7DQorICAgICAgICAg
ICAgaWYgKFtvYmogaXNLaW5kT2ZDbGFzczp3ZWJVbmRlZmluZWRDbGFzcygpXSkNCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7DQorICAgICAgICAgICAgaWYgKChDRkJvb2xl
YW5SZWYpb2JqID09IGtDRkJvb2xlYW5UcnVlKQ0KKyAgICAgICAgICAgICAgICByZXR1cm4ganNC
b29sZWFuKHRydWUpOw0KKyAgICAgICAgICAgIGlmICgoQ0ZCb29sZWFuUmVmKW9iaiA9PSBrQ0ZC
b29sZWFuRmFsc2UpDQorICAgICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOw0K
KyAgICAgICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pDQor
ICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihbb2JqIGRvdWJsZVZhbHVlXSk7DQorICAg
ICAgICAgICAgaWYgKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQ0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywgbmV3IE9iamNBcnJh
eShvYmosIHJvb3RPYmplY3QpKTsNCisgICAgICAgICAgICBpZiAoW29iaiBpc0tpbmRPZkNsYXNz
OndlYlNjcmlwdE9iamVjdENsYXNzKCldKSB7DQorICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBp
bXAgPSBbb2JqIF9pbXBdOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gaW1wID8gaW1wIDoganNV
bmRlZmluZWQoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYgKFtvYmogaXNLaW5k
T2ZDbGFzczpbTlNOdWxsIGNsYXNzXV0pDQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwo
KTsNCisgICAgICAgICAgICBpZiAob2JqID09IDApDQorICAgICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOw0KKyAgICAgICAgICAgIHJldHVybiBPYmpjSW5zdGFuY2U6OmNyZWF0ZShv
YmosIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgY2FzZSBPYmpjQ2hhclR5cGU6DQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KCooY2hhciopYnVmZmVyKTsNCisgICAgICAgIGNhc2UgT2JqY1Vuc2lnbmVkQ2hhclR5cGU6DQor
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCoodW5zaWduZWQgY2hhciopYnVmZmVyKTsNCisg
ICAgICAgIGNhc2UgT2JqY1Nob3J0VHlwZToNCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
KihzaG9ydCopYnVmZmVyKTsNCisgICAgICAgIGNhc2UgT2JqY1Vuc2lnbmVkU2hvcnRUeXBlOg0K
KyAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKHVuc2lnbmVkIHNob3J0KilidWZmZXIpOw0K
KyAgICAgICAgY2FzZSBPYmpjSW50VHlwZToNCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
KihpbnQqKWJ1ZmZlcik7DQorICAgICAgICBjYXNlIE9iamNVbnNpZ25lZEludFR5cGU6DQorICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCoodW5zaWduZWQgaW50KilidWZmZXIpOw0KKyAgICAg
ICAgY2FzZSBPYmpjTG9uZ1R5cGU6DQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKCoobG9u
ZyopYnVmZmVyKTsNCisgICAgICAgIGNhc2UgT2JqY1Vuc2lnbmVkTG9uZ1R5cGU6DQorICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKCoodW5zaWduZWQgbG9uZyopYnVmZmVyKTsNCisgICAgICAg
IGNhc2UgT2JqY0xvbmdMb25nVHlwZToNCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKihs
b25nIGxvbmcqKWJ1ZmZlcik7DQorICAgICAgICBjYXNlIE9iamNVbnNpZ25lZExvbmdMb25nVHlw
ZToNCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKih1bnNpZ25lZCBsb25nIGxvbmcqKWJ1
ZmZlcik7DQorICAgICAgICBjYXNlIE9iamNGbG9hdFR5cGU6DQorICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKCooZmxvYXQqKWJ1ZmZlcik7DQorICAgICAgICBjYXNlIE9iamNEb3VibGVUeXBl
Og0KKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcigqKGRvdWJsZSopYnVmZmVyKTsNCisgICAg
ICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGdldCBoZXJlLiBBcmd1
bWVudCB0eXBlcyBhcmUgZmlsdGVyZWQuDQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl
czogaW52YWxpZCB0eXBlICglZClcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIChpbnQpdHlwZSk7
DQorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7DQorfQ0KKw0KK09iamNWYWx1ZVR5cGUgb2JqY1ZhbHVlVHlwZUZvclR5
cGUoY29uc3QgY2hhciAqdHlwZSkNCit7DQorICAgIGludCB0eXBlTGVuZ3RoID0gc3RybGVuKHR5
cGUpOw0KKyAgICBPYmpjVmFsdWVUeXBlIG9iamNWYWx1ZVR5cGUgPSBPYmpjSW52YWxpZFR5cGU7
DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUxlbmd0aDsgKytpKSB7DQorICAgICAg
ICBjaGFyIHR5cGVDaGFyID0gdHlwZVtpXTsNCisgICAgICAgIHN3aXRjaCAodHlwZUNoYXIpIHsN
CisgICAgICAgICAgICBjYXNlIF9DX0NPTlNUOg0KKyAgICAgICAgICAgIGNhc2UgX0NfQllDT1BZ
Og0KKyAgICAgICAgICAgIGNhc2UgX0NfQllSRUY6DQorICAgICAgICAgICAgY2FzZSBfQ19PTkVX
QVk6DQorICAgICAgICAgICAgY2FzZSBfQ19HQ0lOVklTSUJMRToNCisgICAgICAgICAgICAgICAg
Ly8gc2tpcCB0aGVzZSB0eXBlIG1vZGlmaWVycw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICBjYXNlIF9DX0lEOg0KKyAgICAgICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0g
T2JqY09iamVjdFR5cGU7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNh
c2UgX0NfQ0hSOg0KKyAgICAgICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY0NoYXJUeXBl
Ow0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIF9DX1VDSFI6DQor
ICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVW5zaWduZWRDaGFyVHlwZTsNCisg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBfQ19TSFQ6DQorICAgICAg
ICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjU2hvcnRUeXBlOw0KKyAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICBjYXNlIF9DX1VTSFQ6DQorICAgICAgICAgICAgICAgIG9i
amNWYWx1ZVR5cGUgPSBPYmpjVW5zaWduZWRTaG9ydFR5cGU7DQorICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgIGNhc2UgX0NfSU5UOg0KKyAgICAgICAgICAgICAgICBvYmpjVmFs
dWVUeXBlID0gT2JqY0ludFR5cGU7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgIGNhc2UgX0NfVUlOVDoNCisgICAgICAgICAgICAgICAgb2JqY1ZhbHVlVHlwZSA9IE9iamNV
bnNpZ25lZEludFR5cGU7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNh
c2UgX0NfTE5HOg0KKyAgICAgICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY0xvbmdUeXBl
Ow0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIF9DX1VMTkc6DQor
ICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjVW5zaWduZWRMb25nVHlwZTsNCisg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBfQ19MTkdfTE5HOg0KKyAg
ICAgICAgICAgICAgICBvYmpjVmFsdWVUeXBlID0gT2JqY0xvbmdMb25nVHlwZTsNCisgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBfQ19VTE5HX0xORzoNCisgICAgICAg
ICAgICAgICAgb2JqY1ZhbHVlVHlwZSA9IE9iamNVbnNpZ25lZExvbmdMb25nVHlwZTsNCisgICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBfQ19GTFQ6DQorICAgICAgICAg
ICAgICAgIG9iamNWYWx1ZVR5cGUgPSBPYmpjRmxvYXRUeXBlOw0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICBjYXNlIF9DX0RCTDoNCisgICAgICAgICAgICAgICAgb2JqY1Zh
bHVlVHlwZSA9IE9iamNEb3VibGVUeXBlOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICBjYXNlIF9DX1ZPSUQ6DQorICAgICAgICAgICAgICAgIG9iamNWYWx1ZVR5cGUgPSBP
YmpjVm9pZFR5cGU7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGRlZmF1
bHQ6DQorICAgICAgICAgICAgICAgIC8vIFVuaGFuZGxlZCB0eXBlLiBXZSBkb24ndCBoYW5kbGUg
QyBzdHJ1Y3RzLCB1bmlvbnMsIGV0Yy4NCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRocm93
IGFuIGV4Y2VwdGlvbj8NCisgICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIGlmIChvYmpjVmFsdWVUeXBlICE9IE9iamNJbnZhbGlkVHlwZSkNCisg
ICAgICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gb2JqY1ZhbHVlVHlwZTsN
Cit9DQorDQorSlNPYmplY3QgKnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBOU1N0cmluZyAq
bWVzc2FnZSkNCit7DQorICAgIEFTU0VSVChtZXNzYWdlKTsNCisgICAgc2l6ZV90IGxlbmd0aCA9
IFttZXNzYWdlIGxlbmd0aF07DQorICAgIHVuaWNoYXIgKmJ1ZmZlciA9IG5ldyB1bmljaGFyW2xl
bmd0aF07DQorICAgIFttZXNzYWdlIGdldENoYXJhY3RlcnM6YnVmZmVyXTsNCisgICAgSlNPYmpl
Y3QgKmVycm9yID0gSlNDOjp0aHJvd0Vycm9yKGV4ZWMsIEpTQzo6Y3JlYXRlRXJyb3IoZXhlYywg
VVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsNCisgICAgZGVsZXRlIFtdIGJ1ZmZlcjsNCisgICAg
cmV0dXJuIGVycm9yOw0KK30NCisNCit9DQorfQ0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113521</attachid>
            <date>2011-11-03 10:56:28 -0700</date>
            <delta_ts>2011-11-03 10:56:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>objc_utility.mm.diff</filename>
            <type>text/plain</type>
            <size>1353</size>
            <attacher name="Rémy SAISSY">remy.saissy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbSBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQppbmRleCAxYTdiOTI5
Li43ZjI4MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0
aWxpdHkubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1t
CkBAIC0xMzEsNyArMTMxLDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgT2JqY1ZhbHVlVHlwZQogICAgIE9iamNWYWx1
ZSByZXN1bHQ7CiAgICAgZG91YmxlIGQgPSAwOwogCi0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkg
fHwgdmFsdWUuaXNTdHJpbmcoKSB8fCB2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSB8fCB2YWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgZCA9IHZhbHVlLnRvTnVt
YmVyKGV4ZWMpOwogCiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNDksOSArMTQ5LDE1IEBAIE9i
amNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIE9iamNWYWx1ZVR5cGUKICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QgPSBvcmln
aW5HbG9iYWxPYmplY3Q7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBSb290T2JqZWN0
KiByb290T2JqZWN0ID0gZmluZFJvb3RPYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAg
IHJlc3VsdC5vYmplY3RWYWx1ZSA9ICByb290T2JqZWN0CisKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1N0cmluZygpICYmICFyb290T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVVN0
cmluZyYgdSA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAg
cmVzdWx0Lm9iamVjdFZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnUuY2hh
cmFjdGVycygpIGxlbmd0aDp1Lmxlbmd0aCgpXTsgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQub2JqZWN0VmFsdWUg
PSAgcm9vdE9iamVjdAogICAgICAgICAgICAgICAgID8gW3dlYlNjcmlwdE9iamVjdENsYXNzKCkg
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnZhbHVlIG9yaWdpblJvb3RPYmplY3Q6b3JpZ2luUm9v
dE9iamVjdCByb290T2JqZWN0OnJvb3RPYmplY3RdCiAgICAgICAgICAgICAgICAgOiBuaWw7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>