<?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>32157</bug_id>
          
          <creation_ts>2009-12-04 06:56:51 -0800</creation_ts>
          <short_desc>[Android] jni_utility includes two JSC-specific functions</short_desc>
          <delta_ts>2009-12-07 04:37:44 -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 Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>32154</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>android-webkit-unforking</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jens</cc>
    
    <cc>kdecker</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>168755</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-04 06:56:51 -0800</bug_when>
    <thetext>jni_utility mostly provides a number of script-engine-independent helper functions. In addition it provides two JSC-specific functions - convertValueToJValue and dispatchJNICall. This causes problems on Android, where we can build with JSC or V8. See Bug 32154, which this bug blocks.

It seems that jni_utility should provide only the script-engine-independent functions. The two JSC-specific functions it currently provides are only used within bridge/jni, so should be moved to a separate, private header. Perhaps jni_utility_private?

The V8-specific equivalents to these functions, which are required by Android, can then be added to this file with the necessary guards, or the file can be split into two. Perhaps [jsc|v8]/jni_utility_private? Note that code in other files in bridge/jni will also require separation into JSC and V8 variants. Given this, splitting the files into two directories seems the cleanest choice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168768</commentid>
    <comment_count>1</comment_count>
      <attachid>44314</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-04 08:02:09 -0800</bug_when>
    <thetext>Created attachment 44314
Patch 1 for Bug 32157</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168770</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 08:05:32 -0800</bug_when>
    <thetext>Attachment 44314 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bridge/jni/jsc/jni_utility_private.cpp:44:  Declaration has space between type name and * in JNIEnv *env  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:53:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:55:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:59:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:62:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:71:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:81:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:91:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:104:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:114:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:124:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:134:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:144:  Missing space before ( in for(  [whitespace/parens] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:162:  _JNIType is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:169:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:168:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:174:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:178:  Declaration has space between type name and * in JavaInstance *instance  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:182:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:185:  Declaration has space between type name and * in JavaArray *array  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:188:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:196:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:199:  Declaration has space between type name and * in JNIEnv *env  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:201:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:204:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:210:  Declaration has space between type name and * in JNIEnv *env  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:211:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:214:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:215:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/jni_utility_private.cpp:264:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/jni_utility_private.h:35:  Missing space before {  [whitespace/braces] [5]
Total errors found: 31</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168782</commentid>
    <comment_count>3</comment_count>
      <attachid>44317</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-04 08:42:21 -0800</bug_when>
    <thetext>Created attachment 44317
Patch 2 for Bug 32157

Fixed style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168783</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 08:46:40 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44317 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168804</commentid>
    <comment_count>5</comment_count>
      <attachid>44321</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-04 09:40:02 -0800</bug_when>
    <thetext>Created attachment 44321
Patch 3 for Bug 32157</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168806</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 09:43:29 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44321 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168932</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-04 14:45:26 -0800</bug_when>
    <thetext>OMG, the style bot is out of control! :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169001</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-04 17:50:25 -0800</bug_when>
    <thetext>We can truncate the messages sooner, if that would be helpful, but it seems useful to give the full report in this case since Steve addressed all the issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169002</commentid>
    <comment_count>9</comment_count>
      <attachid>44321</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-04 17:52:34 -0800</bug_when>
    <thetext>Comment on attachment 44321
Patch 3 for Bug 32157

I don&apos;t know much about JNI, but this patch appears formally correct (and has beautiful style).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169003</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-04 17:54:58 -0800</bug_when>
    <thetext>The out of control comment was more about how it motivated steve to change a huge section of the file when a small change (with imperfect style) would have probably been easier to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169251</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-07 04:37:44 -0800</bug_when>
    <thetext>Landed manually as http://trac.webkit.org/changeset/51756</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44314</attachid>
            <date>2009-12-04 08:02:09 -0800</date>
            <delta_ts>2009-12-04 08:42:21 -0800</delta_ts>
            <desc>Patch 1 for Bug 32157</desc>
            <filename>jni_utility.txt</filename>
            <type>text/plain</type>
            <size>27161</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMTItMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIE1vdmVzIEpTQy1zcGVjaWZpYyBmdW5jdGlvbnMgZnJvbSBqbmlfdXRpbGl0eSBhbmQg
bW92ZXMgdGhlbSB0byBuZXcganNjL2puaV91dGlsaXR5X3ByaXZhdGUgZmlsZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE1NworCisgICAgICAg
IEJ1aWxkIGZpeCBvbmx5LCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pu
aV9pbnN0YW5jZS5jcHA6IE1vZGlmaWVkLiBJbmNsdWRlIGpzYy9qbmlfdXRpbGl0eS5oLgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06IE1vZGlmaWVkLiBJbmNsdWRlIGpzYy9qbmlf
dXRpbGl0eS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwOiBNb2RpZmll
ZC4gSW5jbHVkZSBqc2Mvam5pX3V0aWxpdHkuaC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91
dGlsaXR5LmNwcDogTW9kaWZpZWQuIFJlbW92ZWQgY29udmVydFZhbHVlVG9KVmFsdWUgYW5kIGNv
bnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlf
dXRpbGl0eS5oOiBNb2RpZmllZC4gUmVtb3ZlZCBjb252ZXJ0VmFsdWVUb0pWYWx1ZSBhbmQgZGlz
cGF0Y2hKTklDYWxsLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjOiBBZGRlZC4KKyAgICAgICAg
KiBicmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmg6IEFkZGVkLiBIZWFkZXIgZm9yIGNvbnZl
cnRWYWx1ZVRvSlZhbHVlIGFuZCBkaXNwYXRjaEpOSUNhbGwuCisgICAgICAgICogcGxhdGZvcm0v
YW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBNb2RpZmllZC4gSW5jbHVkZSBqc2Mvam5p
X3V0aWxpdHkuaC4KKwogMjAwOS0xMi0wNCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZl
c3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkocmV2aXNpb24gNTE2OTQpCisrKyBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KIAorI2lmIFVTRShKU0MpCisjaW5jbHVkZSAianNjL2puaV91dGlsaXR5X3By
aXZhdGUuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQU5EUk9JRCkKICNpbmNsdWRlIDxhc3Nl
cnQuaD4KICNlbmRpZgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gNTE2OTQp
CisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDEwIEBACiAjaW1wb3J0ICJvYmpjX3V0aWxpdHkuaCIKICNpbmNsdWRlIDxydW50aW1l
L0pTTG9jay5oPgogCisjaWYgVVNFKEpTQykKKyNpbXBvcnQgImpzYy9qbmlfdXRpbGl0eV9wcml2
YXRlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7CiAKIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYlNjcmlwdGluZ1ByaXZhdGUpCkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfcnVudGltZS5jcHAJKHJldmlzaW9uIDUxNjk0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE3IEBACiAKICNpZiBF
TkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSA8am5pX3V0aWxpdHkuaD4KLQorI2lu
Y2x1ZGUgImpuaV91dGlsaXR5LmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKKyNpZiBV
U0UoSlNDKQorI2luY2x1ZGUgImpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgiCisjZW5kaWYKKwog
I2lmZGVmIE5ERUJVRwogI2RlZmluZSBKU19MT0coZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTAp
CiAjZWxzZQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCShyZXZpc2lvbiA1MTY5
NCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDExICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5j
bHVkZSAiam5pX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCi0jaW5jbHVk
ZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPGRsZmNuLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtMzQ3LDIzNiArMzQyLDYgQEAganZhbHVlIGdldEpOSUZpZWxkKCBqb2JqZWN0IG9i
aiwgSk5JVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBqb2JqZWN0IGNvbnZl
cnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBqc0Fy
cmF5LCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQotewotICAgIEpOSUVudiAqZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgLy8gQXMgSlMgQXJyYXlzIGNhbiBjb250YWluIGEgbWl4dHVyZSBvZiBv
YmplY3RzLCBhc3N1bWUgd2UgY2FuIGNvbnZlcnQgdG8KLSAgICAvLyB0aGUgcmVxdWVzdGVkIEph
dmEgQXJyYXkgdHlwZSByZXF1ZXN0ZWQsIHVubGVzcyB0aGUgYXJyYXkgdHlwZSBpcyBzb21lIG9i
amVjdCBhcnJheQotICAgIC8vIG90aGVyIHRoYW4gYSBzdHJpbmcuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0ganNBcnJheS0+bGVuZ3RoKCk7Ci0gICAgam9iamVjdEFycmF5IGphcnJheSA9IDA7Ci0g
ICAgCi0gICAgLy8gQnVpbGQgdGhlIGNvcnJlY3QgYXJyYXkgdHlwZQotICAgIHN3aXRjaCAoSk5J
VHlwZUZyb21QcmltaXRpdmVUeXBlKGphdmFDbGFzc05hbWVbMV0pKSB7IAotICAgICAgICBjYXNl
IG9iamVjdF90eXBlOiB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9ydCBzdHJpbmcgb2JqZWN0IHR5
cGVzCi0gICAgICAgIGlmICgwID09IHN0cmNtcCgiW0xqYXZhLmxhbmcuU3RyaW5nOyIsIGphdmFD
bGFzc05hbWUpKSB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3
T2JqZWN0QXJyYXkobGVuZ3RoLAotICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZh
L2xhbmcvU3RyaW5nIiksCi0gICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsK
LSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSxpLAotICAgICAg
ICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFy
ICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAgIGphcnJheSA9
IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCb29sZWFuQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAg
IGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpi
b29sZWFuIHZhbHVlID0gKGpib29sZWFuKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oKGpib29sZWFuQXJyYXkpamFycmF5LCAo
anNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAg
ICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCeXRlQXJyYXkobGVuZ3Ro
KTsKLSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgIGpieXRlIHZhbHVlID0gKGpieXRlKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oKGpieXRlQXJyYXkpamFycmF5
LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAg
ICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3Q2hhckFycmF5KGxlbmd0aCk7Ci0g
ICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKLSAgICAg
ICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZ1Zh
bHVlLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKChjb25zdCBqY2hh
ciopc3RyaW5nVmFsdWUuZGF0YSgpKVswXTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldENoYXJB
cnJheVJlZ2lvbigoamNoYXJBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3U2hvcnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAganNob3J0IHZhbHVlID0gKGpz
aG9ydClpdGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0U2hvcnRB
cnJheVJlZ2lvbigoanNob3J0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgaW50X3R5cGU6IHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdJbnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50KWl0
ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJlZ2lv
bigoamludEFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIGxv
bmdfdHlwZTogewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0xv
bmdBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQo
ZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamxvbmcgdmFsdWUgPSAoamxvbmcpaXRlbS50b051
bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbigoamxv
bmdBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBmbG9hdF90
eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRB
cnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7Ci0gICAgICAgICAgICAgICAgamZsb2F0IHZhbHVlID0gKGpmbG9hdClpdGVtLnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZs
b2F0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIAotICAgICAgICBjYXNlIGRv
dWJsZV90eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3
RG91YmxlQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+
Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpkb3VibGUgdmFsdWUgPSAoamRvdWJsZSlp
dGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0RG91YmxlQXJyYXlS
ZWdpb24oKGpkb3VibGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBjYXNlIGFycmF5X3R5cGU6IC8vIGRvbid0IGhhbmRsZSBlbWJlZGRlZCBhcnJheXMK
LSAgICAgICAgY2FzZSB2b2lkX3R5cGU6IC8vIERvbid0IGV4cGVjdCBhcnJheXMgb2Ygdm9pZCBv
YmplY3RzCi0gICAgICAgIGNhc2UgaW52YWxpZF90eXBlOiAvLyBBcnJheSBvZiB1bmtub3duIG9i
amVjdHMKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICAvLyBpZiBpdCB3YXMg
bm90IG9uZSBvZiB0aGUgY2FzZXMgaGFuZGxlZCwgdGhlbiBudWxsIGlzIHJldHVybmVkCi0gICAg
cmV0dXJuIGphcnJheTsKLX0KLQotCi1qdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKTklUeXBlIF9KTklUeXBlLCBjb25zdCBjaGFyKiBq
YXZhQ2xhc3NOYW1lKQotewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgCi0gICAganZhbHVlIHJlc3VsdDsKLSAgIAotICAgIHN3aXRjaCAoX0pOSVR5cGUpewot
ICAgICAgICBjYXNlIGFycmF5X3R5cGU6Ci0gICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKLSAg
ICAgICAgICAgIHJlc3VsdC5sID0gKGpvYmplY3QpMDsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBKYXZhIGluc3RhbmNlLgotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzT2JqZWN0KCkpewotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3RJ
bXAgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xh
c3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OnNfaW5mbykgewotICAgICAgICAgICAgICAg
ICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1w
Kj4ob2JqZWN0SW1wKTsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlICppbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmwgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0g
JlJ1bnRpbWVBcnJheTo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBK
YXZhU2NyaXB0IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBB
cnJheQotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIGltcCA9IHN0YXRpY19jYXN0
PFJ1bnRpbWVBcnJheSo+KG9iamVjdEltcCk7Ci0gICAgICAgICAgICAgICAgICAgIEphdmFBcnJh
eSAqYXJyYXkgPSBzdGF0aWNfY2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNyZXRlQXJyYXko
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gYXJyYXktPmphdmFBcnJheSgpOwot
ICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0SW1wLT5j
bGFzc0luZm8oKSA9PSAmSlNBcnJheTo6aW5mbykgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
bnB1dCBpcyBhIEphdmFzY3JpcHQgQXJyYXkuIFdlIG5lZWQgdG8gY3JlYXRlIGl0IHRvIGEgSmF2
YSBBcnJheS4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBjb252ZXJ0QXJyYXlJbnN0
YW5jZVRvSmF2YUFycmF5KGV4ZWMsIGFzQXJyYXkodmFsdWUpLCBqYXZhQ2xhc3NOYW1lKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIE5vdyBjb252ZXJ0IHZhbHVlIHRvIGEgc3RyaW5nIGlmIHRoZSB0YXJnZXQgdHlwZSBpcyBh
IGphdmEubGFuZy5zdHJpbmcsIGFuZCB3ZSdyZSBub3QKLSAgICAgICAgICAgIC8vIGNvbnZlcnRp
bmcgZnJvbSBhIE51bGwuCi0gICAgICAgICAgICBpZiAocmVzdWx0LmwgPT0gMCAmJiBzdHJjbXAo
amF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJpbmciKSA9PSAwKSB7Ci0jaWZkZWYgQ09OVkVS
VF9OVUxMX1RPX0VNUFRZX1NUUklORwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNOdWxs
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAg
ICAgICAgICAgICAgICAgICAgamNoYXIgYnVmWzJdOwotICAgICAgICAgICAgICAgICAgICBqb2Jq
ZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nIChlbnYsIGJ1ZiwgMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkKLSNlbmRpZgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgICAgICAgICAg
ICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nIChl
bnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZhU3RyaW5nOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmwgPT0gMCkgCi0gICAgICAg
ICAgICAgICAgYnplcm8gKCZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsgLy8gSGFuZGxlIGl0IHRo
ZSBzYW1lIGFzIGEgdm9pZCBjYXNlCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAotICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LnogPSAo
amJvb2xlYW4pdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAgICAgICAgICAgIHJl
c3VsdC5iID0gKGpieXRlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKLSAgICAgICAgICAg
IHJlc3VsdC5jID0gKGpjaGFyKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewotICAgICAgICAgICAgcmVz
dWx0LnMgPSAoanNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgaW50X3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5p
ID0gKGppbnQpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBsb25nX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5qID0gKGps
b25nKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgZmxvYXRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0
KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUp
dmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhc2Ugdm9pZF90eXBlOiB7Ci0gICAgICAgICAgICBiemVy
byAoJnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB9ICAvLyBlbmQgb2YgbmFtZXNwYWNlIEJp
bmRpbmdzCiAKIH0gLy8gZW5kIG9mIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
dXRpbGl0eS5oCShyZXZpc2lvbiA1MTY5NCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRp
bGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8
SmF2YVZNL2puaS5oPgogCiAvLyBUaGUgb3JkZXIgb2YgdGhlc2UgaXRlbXMgY2FuIG5vdCBiZSBt
b2RpZmllZCBhcyB0aGV5IGFyZSB0aWdodGx5CkBAIC01Myw5ICs1Miw2IEBAIHR5cGVkZWYgZW51
bSB7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU09iamVj
dDsgICAgCi0KIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIGNsYXNzIEphdmFQYXJhbWV0ZXI7CkBA
IC03Miw4ICs2OCw2IEBAIEpOSVR5cGUgSk5JVHlwZUZyb21DbGFzc05hbWUoY29uc3QgY2hhciAK
IEpOSVR5cGUgSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKGNoYXIgdHlwZSk7CiBjb25zdCBjaGFy
ICpzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShKTklUeXBlIHR5cGUpOwogCi1qdmFsdWUgY29u
dmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSk5JVHlwZSwgY29uc3QgY2hh
ciogamF2YUNsYXNzTmFtZSk7Ci0KIGp2YWx1ZSBnZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSk5J
VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUpOwogCiBq
bWV0aG9kSUQgZ2V0TWV0aG9kSUQoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZyk7CkBAIC0yNzksOCArMjczLDYgQEAgVCBjYWxsSk5JU3RhdGljTWV0aG9kKGpj
bGFzcyBjbHMsIGNvbnN0IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1ib29sIGRpc3Bh
dGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2Jq
ZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlJiByZXN1bHQsIGNvbnN0IGNoYXIqIGNhbGxpbmdV
UkwsIEpTVmFsdWUmIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLQogfSAvLyBuYW1lc3BhY2UgQmlu
ZGluZ3MKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L2puaV91dGlsaXR5X3ByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
ImpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgiCisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQorCisjaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX2FycmF5Lmgi
CisjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXku
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFt
ZXNwYWNlIEJpbmRpbmdzIHsKKworc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VU
b0phdmFBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGpzQXJyYXksIGNvbnN0IGNoYXIq
IGphdmFDbGFzc05hbWUpCit7CisgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICAv
LyBBcyBKUyBBcnJheXMgY2FuIGNvbnRhaW4gYSBtaXh0dXJlIG9mIG9iamVjdHMsIGFzc3VtZSB3
ZSBjYW4gY29udmVydCB0bworICAgIC8vIHRoZSByZXF1ZXN0ZWQgSmF2YSBBcnJheSB0eXBlIHJl
cXVlc3RlZCwgdW5sZXNzIHRoZSBhcnJheSB0eXBlIGlzIHNvbWUgb2JqZWN0IGFycmF5CisgICAg
Ly8gb3RoZXIgdGhhbiBhIHN0cmluZy4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBqc0FycmF5LT5s
ZW5ndGgoKTsKKyAgICBqb2JqZWN0QXJyYXkgamFycmF5ID0gMDsKKworICAgIC8vIEJ1aWxkIHRo
ZSBjb3JyZWN0IGFycmF5IHR5cGUKKyAgICBzd2l0Y2ggKEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlw
ZShqYXZhQ2xhc3NOYW1lWzFdKSkgeworICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7CisgICAg
ICAgIC8vIE9ubHkgc3VwcG9ydCBzdHJpbmcgb2JqZWN0IHR5cGVzCisgICAgICAgIGlmICgwID09
IHN0cmNtcCgiW0xqYXZhLmxhbmcuU3RyaW5nOyIsIGphdmFDbGFzc05hbWUpKSB7CisgICAgICAg
ICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3T2JqZWN0QXJyYXkobGVuZ3RoLAor
ICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcvU3RyaW5nIiksCisgICAg
ICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsKKyAgICAgICAgICAgIGZvcih1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3Ry
aW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0
T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSxpLAorICAgICAgICAgICAgICAgICAgICBlbnYtPmZ1
bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUuZGF0YSgp
LCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgYm9vbGVhbl90
eXBlOiB7CisgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3Qm9vbGVh
bkFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChl
eGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqYm9vbGVhbiB2YWx1ZSA9IChqYm9vbGVhbilpdGVt
LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0Qm9vbGVhbkFycmF5UmVn
aW9uKChqYm9vbGVhbkFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIGJ5dGVfdHlwZTogeworICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYt
Pk5ld0J5dGVBcnJheShsZW5ndGgpOworICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5
LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamJ5dGUgdmFsdWUgPSAoamJ5dGUpaXRl
bS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lv
bigoamJ5dGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBj
aGFyX3R5cGU6IHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdD
aGFyQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0
KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIGpjaGFyIHZhbHVlID0gMDsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RyaW5nVmFsdWUuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSAoKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5kYXRhKCkpWzBdOworICAgICAgICAg
ICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKChqY2hhckFycmF5KWphcnJheSwgKGpzaXpl
KWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsKKyAgICAgICAgICAgIGph
cnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdTaG9ydEFycmF5KGxlbmd0aCk7CisgICAgICAg
ICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAg
ICBqc2hvcnQgdmFsdWUgPSAoanNob3J0KWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICAgICAgZW52LT5TZXRTaG9ydEFycmF5UmVnaW9uKChqc2hvcnRBcnJheSlqYXJyYXksIChqc2l6
ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBpbnRfdHlwZTogeworICAgICAgICAgICAgamFy
cmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0ludEFycmF5KGxlbmd0aCk7CisgICAgICAgICAg
ICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBq
aW50IHZhbHVlID0gKGppbnQpaXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBl
bnYtPlNldEludEFycmF5UmVnaW9uKChqaW50QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXpl
KTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgbG9uZ190eXBlOiB7CisgICAgICAgICAgICBqYXJyYXkgPSAoam9i
amVjdEFycmF5KWVudi0+TmV3TG9uZ0FycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqbG9uZyB2YWx1
ZSA9IChqbG9uZylpdGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0
TG9uZ0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAm
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0
QXJyYXkpZW52LT5OZXdGbG9hdEFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRl
bSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqZmxvYXQgdmFsdWUg
PSAoamZsb2F0KWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52LT5TZXRG
bG9hdEFycmF5UmVnaW9uKChqZmxvYXRBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwg
JnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogeworICAgICAgICAgICAgamFycmF5ID0gKGpvYmpl
Y3RBcnJheSllbnYtPk5ld0RvdWJsZUFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqZG91YmxlIHZh
bHVlID0gKGpkb3VibGUpaXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBlbnYt
PlNldERvdWJsZUFycmF5UmVnaW9uKChqZG91YmxlQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpz
aXplKTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgYXJyYXlfdHlwZTogLy8gZG9uJ3QgaGFuZGxlIGVtYmVkZGVk
IGFycmF5cworICAgICAgICBjYXNlIHZvaWRfdHlwZTogLy8gRG9uJ3QgZXhwZWN0IGFycmF5cyBv
ZiB2b2lkIG9iamVjdHMKKyAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6IC8vIEFycmF5IG9mIHVu
a25vd24gb2JqZWN0cworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gaWYgaXQg
d2FzIG5vdCBvbmUgb2YgdGhlIGNhc2VzIGhhbmRsZWQsIHRoZW4gbnVsbCBpcyByZXR1cm5lZAor
ICAgIHJldHVybiBqYXJyYXk7Cit9CisKK2p2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpOSVR5cGUgX0pOSVR5cGUsIGNvbnN0IGNoYXIq
IGphdmFDbGFzc05hbWUpCit7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKworICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKF9KTklUeXBlKXsKKyAgICAg
ICAgY2FzZSBhcnJheV90eXBlOgorICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7CisgICAgICAg
ICAgICByZXN1bHQubCA9IChqb2JqZWN0KTA7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IHNlZSBp
ZiB3ZSBoYXZlIGEgSmF2YSBpbnN0YW5jZS4KKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc09iamVj
dCgpKXsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0SW1wID0gYXNPYmplY3QodmFs
dWUpOworICAgICAgICAgICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZSdW50
aW1lT2JqZWN0SW1wOjpzX2luZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZU9iamVj
dEltcCogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KG9iamVjdEltcCk7Cisg
ICAgICAgICAgICAgICAgICAgIEphdmFJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxK
YXZhSW5zdGFuY2UqPihpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0g
aW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZSdW50aW1lQXJyYXk6OnNf
aW5mbykgeworICAgICAgICAgICAgICAgIC8vIElucHV0IGlzIGEgSmF2YVNjcmlwdCBBcnJheSB0
aGF0IHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQgZnJvbSBhIEphdmEgQXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgUnVudGltZUFycmF5KiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihv
YmplY3RJbXApOworICAgICAgICAgICAgICAgICAgICBKYXZhQXJyYXkgKmFycmF5ID0gc3RhdGlj
X2Nhc3Q8SmF2YUFycmF5Kj4oaW1wLT5nZXRDb25jcmV0ZUFycmF5KCkpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubCA9IGFycmF5LT5qYXZhQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6aW5mbykgeworICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dCBpcyBhIEphdmFzY3Jp
cHQgQXJyYXkuIFdlIG5lZWQgdG8gY3JlYXRlIGl0IHRvIGEgSmF2YSBBcnJheS4KKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmwgPSBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KGV4
ZWMsIGFzQXJyYXkodmFsdWUpLCBqYXZhQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBjb252ZXJ0IHZhbHVlIHRvIGEgc3Ry
aW5nIGlmIHRoZSB0YXJnZXQgdHlwZSBpcyBhIGphdmEubGFuZy5zdHJpbmcsIGFuZCB3ZSdyZSBu
b3QKKyAgICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIE51bGwuCisgICAgICAgICAgICBp
ZiAocmVzdWx0LmwgPT0gMCAmJiBzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJp
bmciKSA9PSAwKSB7CisjaWZkZWYgQ09OVkVSVF9OVUxMX1RPX0VNUFRZX1NUUklORworICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgSk5J
RW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICAgICAgICAgICAgICAgICAgamNoYXIgYnVmWzJd
OworICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9u
cy0+TmV3U3RyaW5nIChlbnYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5s
ID0gamF2YVN0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
I2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorI2VuZGlmCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0g
dmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIEpOSUVudiAqZW52ID0g
Z2V0Sk5JRW52KCk7CisgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVu
di0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcgKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUu
ZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bCA9IGphdmFTdHJpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHQubCA9PSAwKQorICAgICAgICAgICAgICAgIGJ6ZXJvICgmcmVzdWx0LCBzaXplb2Yo
anZhbHVlKSk7IC8vIEhhbmRsZSBpdCB0aGUgc2FtZSBhcyBhIHZvaWQgY2FzZQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7CisgICAgICAg
ICAgICByZXN1bHQueiA9IChqYm9vbGVhbil2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGJ5dGVfdHlwZTogeworICAgICAgICAg
ICAgcmVzdWx0LmIgPSAoamJ5dGUpdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKKyAgICAgICAgICAgIHJl
c3VsdC5jID0gKGpjaGFyKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogeworICAgICAgICAgICAgcmVzdWx0
LnMgPSAoanNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgaW50X3R5cGU6IHsKKyAgICAgICAgICAgIHJlc3VsdC5pID0g
KGppbnQpdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBsb25nX3R5cGU6IHsKKyAgICAgICAgICAgIHJlc3VsdC5qID0gKGpsb25n
KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgZmxvYXRfdHlwZTogeworICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0KXZh
bHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgZG91YmxlX3R5cGU6IHsKKyAgICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUpdmFs
dWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGNhc2Ugdm9pZF90eXBlOiB7CisgICAgICAgICAgICBiemVybyAoJnJlc3VsdCwgc2l6
ZW9mKGp2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit9ICAvLyBlbmQgb2YgbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8g
ZW5kIG9mIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0Up
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IF9KTklfVVRJTElUWV9QUklWQVRFX0hfCisjZGVmaW5lIF9KTklfVVRJTElUWV9QUklWQVRFX0hf
CisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiam5pX3V0aWxpdHku
aCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKworbmFtZXNwYWNlIEpTQ3sKKworY2xh
c3MgRXhlY1N0YXRlOworY2xhc3MgSlNPYmplY3Q7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisK
K2p2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKTklUeXBl
LCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKTsKK2Jvb2wgZGlzcGF0Y2hKTklDYWxsKEV4ZWNT
dGF0ZSosIGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlz
U3RhdGljLCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBh
cmdzLCBqdmFsdWUmIHJlc3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZSYgZXhj
ZXB0aW9uRGVzY3JpcHRpb24pOworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNlbmRp
ZiAvLyBfSk5JX1VUSUxJVFlfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9p
ZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA1MTY5NCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJj
ZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBACiAj
aW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1
Z1NlcnZlci5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiam5p
X3V0aWxpdHkuaCIKKyNpbmNsdWRlICJqc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oIgogI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44317</attachid>
            <date>2009-12-04 08:42:21 -0800</date>
            <delta_ts>2009-12-04 09:40:02 -0800</delta_ts>
            <desc>Patch 2 for Bug 32157</desc>
            <filename>jni_utility2.txt</filename>
            <type>text/plain</type>
            <size>27212</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMTItMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIE1vdmVzIEpTQy1zcGVjaWZpYyBmdW5jdGlvbnMgZnJvbSBqbmlfdXRpbGl0eSBhbmQg
bW92ZXMgdGhlbSB0byBuZXcganNjL2puaV91dGlsaXR5X3ByaXZhdGUgZmlsZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE1NworCisgICAgICAg
IEJ1aWxkIGZpeCBvbmx5LCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pu
aV9pbnN0YW5jZS5jcHA6IE1vZGlmaWVkLiBJbmNsdWRlIGpzYy9qbmlfdXRpbGl0eS5oLgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06IE1vZGlmaWVkLiBJbmNsdWRlIGpzYy9qbmlf
dXRpbGl0eS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwOiBNb2RpZmll
ZC4gSW5jbHVkZSBqc2Mvam5pX3V0aWxpdHkuaC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91
dGlsaXR5LmNwcDogTW9kaWZpZWQuIFJlbW92ZWQgY29udmVydFZhbHVlVG9KVmFsdWUgYW5kIGNv
bnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlf
dXRpbGl0eS5oOiBNb2RpZmllZC4gUmVtb3ZlZCBjb252ZXJ0VmFsdWVUb0pWYWx1ZSBhbmQgZGlz
cGF0Y2hKTklDYWxsLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjOiBBZGRlZC4KKyAgICAgICAg
KiBicmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmg6IEFkZGVkLiBIZWFkZXIgZm9yIGNvbnZl
cnRWYWx1ZVRvSlZhbHVlIGFuZCBkaXNwYXRjaEpOSUNhbGwuCisgICAgICAgICogcGxhdGZvcm0v
YW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBNb2RpZmllZC4gSW5jbHVkZSBqc2Mvam5p
X3V0aWxpdHkuaC4KKwogMjAwOS0xMi0wNCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZl
c3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkocmV2aXNpb24gNTE2OTQpCisrKyBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KIAorI2lmIFVTRShKU0MpCisjaW5jbHVkZSAianNjL2puaV91dGlsaXR5X3By
aXZhdGUuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQU5EUk9JRCkKICNpbmNsdWRlIDxhc3Nl
cnQuaD4KICNlbmRpZgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gNTE2OTQp
CisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDEwIEBACiAjaW1wb3J0ICJvYmpjX3V0aWxpdHkuaCIKICNpbmNsdWRlIDxydW50aW1l
L0pTTG9jay5oPgogCisjaWYgVVNFKEpTQykKKyNpbXBvcnQgImpzYy9qbmlfdXRpbGl0eV9wcml2
YXRlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7CiAKIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYlNjcmlwdGluZ1ByaXZhdGUpCkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfcnVudGltZS5jcHAJKHJldmlzaW9uIDUxNjk0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE3IEBACiAKICNpZiBF
TkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSA8am5pX3V0aWxpdHkuaD4KLQorI2lu
Y2x1ZGUgImpuaV91dGlsaXR5LmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKKyNpZiBV
U0UoSlNDKQorI2luY2x1ZGUgImpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgiCisjZW5kaWYKKwog
I2lmZGVmIE5ERUJVRwogI2RlZmluZSBKU19MT0coZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTAp
CiAjZWxzZQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCShyZXZpc2lvbiA1MTY5
NCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDExICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5j
bHVkZSAiam5pX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCi0jaW5jbHVk
ZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPGRsZmNuLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtMzQ3LDIzNiArMzQyLDYgQEAganZhbHVlIGdldEpOSUZpZWxkKCBqb2JqZWN0IG9i
aiwgSk5JVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBqb2JqZWN0IGNvbnZl
cnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBqc0Fy
cmF5LCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQotewotICAgIEpOSUVudiAqZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgLy8gQXMgSlMgQXJyYXlzIGNhbiBjb250YWluIGEgbWl4dHVyZSBvZiBv
YmplY3RzLCBhc3N1bWUgd2UgY2FuIGNvbnZlcnQgdG8KLSAgICAvLyB0aGUgcmVxdWVzdGVkIEph
dmEgQXJyYXkgdHlwZSByZXF1ZXN0ZWQsIHVubGVzcyB0aGUgYXJyYXkgdHlwZSBpcyBzb21lIG9i
amVjdCBhcnJheQotICAgIC8vIG90aGVyIHRoYW4gYSBzdHJpbmcuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0ganNBcnJheS0+bGVuZ3RoKCk7Ci0gICAgam9iamVjdEFycmF5IGphcnJheSA9IDA7Ci0g
ICAgCi0gICAgLy8gQnVpbGQgdGhlIGNvcnJlY3QgYXJyYXkgdHlwZQotICAgIHN3aXRjaCAoSk5J
VHlwZUZyb21QcmltaXRpdmVUeXBlKGphdmFDbGFzc05hbWVbMV0pKSB7IAotICAgICAgICBjYXNl
IG9iamVjdF90eXBlOiB7Ci0gICAgICAgIC8vIE9ubHkgc3VwcG9ydCBzdHJpbmcgb2JqZWN0IHR5
cGVzCi0gICAgICAgIGlmICgwID09IHN0cmNtcCgiW0xqYXZhLmxhbmcuU3RyaW5nOyIsIGphdmFD
bGFzc05hbWUpKSB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3
T2JqZWN0QXJyYXkobGVuZ3RoLAotICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZh
L2xhbmcvU3RyaW5nIiksCi0gICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsK
LSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSxpLAotICAgICAg
ICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFy
ICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAgIGphcnJheSA9
IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCb29sZWFuQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAg
IGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpi
b29sZWFuIHZhbHVlID0gKGpib29sZWFuKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oKGpib29sZWFuQXJyYXkpamFycmF5LCAo
anNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAg
ICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCeXRlQXJyYXkobGVuZ3Ro
KTsKLSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgIGpieXRlIHZhbHVlID0gKGpieXRlKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oKGpieXRlQXJyYXkpamFycmF5
LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAg
ICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3Q2hhckFycmF5KGxlbmd0aCk7Ci0g
ICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKLSAgICAg
ICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZ1Zh
bHVlLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKChjb25zdCBqY2hh
ciopc3RyaW5nVmFsdWUuZGF0YSgpKVswXTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldENoYXJB
cnJheVJlZ2lvbigoamNoYXJBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3U2hvcnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAganNob3J0IHZhbHVlID0gKGpz
aG9ydClpdGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0U2hvcnRB
cnJheVJlZ2lvbigoanNob3J0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgaW50X3R5cGU6IHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdJbnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50KWl0
ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJlZ2lv
bigoamludEFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIGxv
bmdfdHlwZTogewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0xv
bmdBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQo
ZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamxvbmcgdmFsdWUgPSAoamxvbmcpaXRlbS50b051
bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbigoamxv
bmdBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBmbG9hdF90
eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRB
cnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7Ci0gICAgICAgICAgICAgICAgamZsb2F0IHZhbHVlID0gKGpmbG9hdClpdGVtLnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZs
b2F0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIAotICAgICAgICBjYXNlIGRv
dWJsZV90eXBlOiB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3
RG91YmxlQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+
Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpkb3VibGUgdmFsdWUgPSAoamRvdWJsZSlp
dGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0RG91YmxlQXJyYXlS
ZWdpb24oKGpkb3VibGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBjYXNlIGFycmF5X3R5cGU6IC8vIGRvbid0IGhhbmRsZSBlbWJlZGRlZCBhcnJheXMK
LSAgICAgICAgY2FzZSB2b2lkX3R5cGU6IC8vIERvbid0IGV4cGVjdCBhcnJheXMgb2Ygdm9pZCBv
YmplY3RzCi0gICAgICAgIGNhc2UgaW52YWxpZF90eXBlOiAvLyBBcnJheSBvZiB1bmtub3duIG9i
amVjdHMKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICAvLyBpZiBpdCB3YXMg
bm90IG9uZSBvZiB0aGUgY2FzZXMgaGFuZGxlZCwgdGhlbiBudWxsIGlzIHJldHVybmVkCi0gICAg
cmV0dXJuIGphcnJheTsKLX0KLQotCi1qdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKTklUeXBlIF9KTklUeXBlLCBjb25zdCBjaGFyKiBq
YXZhQ2xhc3NOYW1lKQotewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgCi0gICAganZhbHVlIHJlc3VsdDsKLSAgIAotICAgIHN3aXRjaCAoX0pOSVR5cGUpewot
ICAgICAgICBjYXNlIGFycmF5X3R5cGU6Ci0gICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKLSAg
ICAgICAgICAgIHJlc3VsdC5sID0gKGpvYmplY3QpMDsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBKYXZhIGluc3RhbmNlLgotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzT2JqZWN0KCkpewotICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3RJ
bXAgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xh
c3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OnNfaW5mbykgewotICAgICAgICAgICAgICAg
ICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1w
Kj4ob2JqZWN0SW1wKTsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlICppbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmwgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0g
JlJ1bnRpbWVBcnJheTo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBK
YXZhU2NyaXB0IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBB
cnJheQotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIGltcCA9IHN0YXRpY19jYXN0
PFJ1bnRpbWVBcnJheSo+KG9iamVjdEltcCk7Ci0gICAgICAgICAgICAgICAgICAgIEphdmFBcnJh
eSAqYXJyYXkgPSBzdGF0aWNfY2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNyZXRlQXJyYXko
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gYXJyYXktPmphdmFBcnJheSgpOwot
ICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0SW1wLT5j
bGFzc0luZm8oKSA9PSAmSlNBcnJheTo6aW5mbykgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
bnB1dCBpcyBhIEphdmFzY3JpcHQgQXJyYXkuIFdlIG5lZWQgdG8gY3JlYXRlIGl0IHRvIGEgSmF2
YSBBcnJheS4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBjb252ZXJ0QXJyYXlJbnN0
YW5jZVRvSmF2YUFycmF5KGV4ZWMsIGFzQXJyYXkodmFsdWUpLCBqYXZhQ2xhc3NOYW1lKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIE5vdyBjb252ZXJ0IHZhbHVlIHRvIGEgc3RyaW5nIGlmIHRoZSB0YXJnZXQgdHlwZSBpcyBh
IGphdmEubGFuZy5zdHJpbmcsIGFuZCB3ZSdyZSBub3QKLSAgICAgICAgICAgIC8vIGNvbnZlcnRp
bmcgZnJvbSBhIE51bGwuCi0gICAgICAgICAgICBpZiAocmVzdWx0LmwgPT0gMCAmJiBzdHJjbXAo
amF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJpbmciKSA9PSAwKSB7Ci0jaWZkZWYgQ09OVkVS
VF9OVUxMX1RPX0VNUFRZX1NUUklORwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNOdWxs
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAg
ICAgICAgICAgICAgICAgICAgamNoYXIgYnVmWzJdOwotICAgICAgICAgICAgICAgICAgICBqb2Jq
ZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nIChlbnYsIGJ1ZiwgMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bGwoKSkKLSNlbmRpZgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgICAgICAgICAg
ICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nIChl
bnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZhU3RyaW5nOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmwgPT0gMCkgCi0gICAgICAg
ICAgICAgICAgYnplcm8gKCZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsgLy8gSGFuZGxlIGl0IHRo
ZSBzYW1lIGFzIGEgdm9pZCBjYXNlCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAotICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LnogPSAo
amJvb2xlYW4pdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAgICAgICAgICAgIHJl
c3VsdC5iID0gKGpieXRlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKLSAgICAgICAgICAg
IHJlc3VsdC5jID0gKGpjaGFyKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewotICAgICAgICAgICAgcmVz
dWx0LnMgPSAoanNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgaW50X3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5p
ID0gKGppbnQpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBsb25nX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5qID0gKGps
b25nKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgZmxvYXRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0
KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUp
dmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhc2Ugdm9pZF90eXBlOiB7Ci0gICAgICAgICAgICBiemVy
byAoJnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB9ICAvLyBlbmQgb2YgbmFtZXNwYWNlIEJp
bmRpbmdzCiAKIH0gLy8gZW5kIG9mIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
dXRpbGl0eS5oCShyZXZpc2lvbiA1MTY5NCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRp
bGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8
SmF2YVZNL2puaS5oPgogCiAvLyBUaGUgb3JkZXIgb2YgdGhlc2UgaXRlbXMgY2FuIG5vdCBiZSBt
b2RpZmllZCBhcyB0aGV5IGFyZSB0aWdodGx5CkBAIC01Myw5ICs1Miw2IEBAIHR5cGVkZWYgZW51
bSB7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU09iamVj
dDsgICAgCi0KIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIGNsYXNzIEphdmFQYXJhbWV0ZXI7CkBA
IC03Miw4ICs2OCw2IEBAIEpOSVR5cGUgSk5JVHlwZUZyb21DbGFzc05hbWUoY29uc3QgY2hhciAK
IEpOSVR5cGUgSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKGNoYXIgdHlwZSk7CiBjb25zdCBjaGFy
ICpzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShKTklUeXBlIHR5cGUpOwogCi1qdmFsdWUgY29u
dmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSk5JVHlwZSwgY29uc3QgY2hh
ciogamF2YUNsYXNzTmFtZSk7Ci0KIGp2YWx1ZSBnZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSk5J
VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUpOwogCiBq
bWV0aG9kSUQgZ2V0TWV0aG9kSUQoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZyk7CkBAIC0yNzksOCArMjczLDYgQEAgVCBjYWxsSk5JU3RhdGljTWV0aG9kKGpj
bGFzcyBjbHMsIGNvbnN0IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1ib29sIGRpc3Bh
dGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2Jq
ZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlJiByZXN1bHQsIGNvbnN0IGNoYXIqIGNhbGxpbmdV
UkwsIEpTVmFsdWUmIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLQogfSAvLyBuYW1lc3BhY2UgQmlu
ZGluZ3MKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L2puaV91dGlsaXR5X3ByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
ImpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgiCisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQorCisjaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX2FycmF5Lmgi
CisjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXku
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFt
ZXNwYWNlIEJpbmRpbmdzIHsKKworc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VU
b0phdmFBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGpzQXJyYXksIGNvbnN0IGNoYXIq
IGphdmFDbGFzc05hbWUpCit7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAgICAv
LyBBcyBKUyBBcnJheXMgY2FuIGNvbnRhaW4gYSBtaXh0dXJlIG9mIG9iamVjdHMsIGFzc3VtZSB3
ZSBjYW4gY29udmVydCB0bworICAgIC8vIHRoZSByZXF1ZXN0ZWQgSmF2YSBBcnJheSB0eXBlIHJl
cXVlc3RlZCwgdW5sZXNzIHRoZSBhcnJheSB0eXBlIGlzIHNvbWUgb2JqZWN0IGFycmF5CisgICAg
Ly8gb3RoZXIgdGhhbiBhIHN0cmluZy4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBqc0FycmF5LT5s
ZW5ndGgoKTsKKyAgICBqb2JqZWN0QXJyYXkgamFycmF5ID0gMDsKKworICAgIC8vIEJ1aWxkIHRo
ZSBjb3JyZWN0IGFycmF5IHR5cGUKKyAgICBzd2l0Y2ggKEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlw
ZShqYXZhQ2xhc3NOYW1lWzFdKSkgeworICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAvLyBPbmx5IHN1cHBvcnQgc3RyaW5nIG9iamVjdCB0eXBlcworICAg
ICAgICAgICAgaWYgKCFzdHJjbXAoIltMamF2YS5sYW5nLlN0cmluZzsiLCBqYXZhQ2xhc3NOYW1l
KSkgeworICAgICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdPYmpl
Y3RBcnJheShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZh
L2xhbmcvU3RyaW5nIiksCisgICAgICAgICAgICAgICAgICAgIGVudi0+TmV3U3RyaW5nVVRGKCIi
KSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVj
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0udG9T
dHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVt
ZW50KGphcnJheSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+ZnVuY3Rpb25zLT5O
ZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIgKilzdHJpbmdWYWx1ZS5kYXRhKCksIHN0cmluZ1Zh
bHVlLnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAg
eworICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0Jvb2xlYW5BcnJh
eShsZW5ndGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMs
IGkpOworICAgICAgICAgICAgICAgIGpib29sZWFuIHZhbHVlID0gKGpib29sZWFuKWl0ZW0udG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24o
KGpib29sZWFuQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBieXRl
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52
LT5OZXdCeXRlQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJy
YXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqYnl0ZSB2YWx1ZSA9IChqYnl0ZSlp
dGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVn
aW9uKChqYnl0ZUFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgY2hh
cl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVu
di0+TmV3Q2hhckFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9
IGl0ZW0udG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgamNoYXIgdmFsdWUgPSAwOwor
ICAgICAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZS5zaXplKCkgPiAwKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICgoY29uc3QgamNoYXIqKXN0cmluZ1ZhbHVlLmRhdGEoKSlbMF07Cisg
ICAgICAgICAgICAgICAgZW52LT5TZXRDaGFyQXJyYXlSZWdpb24oKGpjaGFyQXJyYXkpamFycmF5
LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICB7Cisg
ICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3U2hvcnRBcnJheShsZW5n
dGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIGpzaG9ydCB2YWx1ZSA9IChqc2hvcnQpaXRlbS50b051bWJlcihleGVj
KTsKKyAgICAgICAgICAgICAgICBlbnYtPlNldFNob3J0QXJyYXlSZWdpb24oKGpzaG9ydEFycmF5
KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgaW50X3R5cGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdJbnRBcnJheShs
ZW5ndGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OworICAgICAgICAgICAgICAgIGppbnQgdmFsdWUgPSAoamludClpdGVtLnRvTnVtYmVyKGV4ZWMp
OworICAgICAgICAgICAgICAgIGVudi0+U2V0SW50QXJyYXlSZWdpb24oKGppbnRBcnJheSlqYXJy
YXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGxvbmdfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0xvbmdBcnJheShsZW5n
dGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIGpsb25nIHZhbHVlID0gKGpsb25nKWl0ZW0udG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24oKGpsb25nQXJyYXkpamFy
cmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAgICB7
CisgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRBcnJheShs
ZW5ndGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OworICAgICAgICAgICAgICAgIGpmbG9hdCB2YWx1ZSA9IChqZmxvYXQpaXRlbS50b051bWJlcihl
eGVjKTsKKyAgICAgICAgICAgICAgICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oKGpmbG9hdEFy
cmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgZG91YmxlX3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdEb3Vi
bGVBcnJheShsZW5ndGgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0
KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIGpkb3VibGUgdmFsdWUgPSAoamRvdWJsZSlpdGVt
LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0RG91YmxlQXJyYXlSZWdp
b24oKGpkb3VibGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGFy
cmF5X3R5cGU6IC8vIGRvbid0IGhhbmRsZSBlbWJlZGRlZCBhcnJheXMKKyAgICBjYXNlIHZvaWRf
dHlwZTogLy8gRG9uJ3QgZXhwZWN0IGFycmF5cyBvZiB2b2lkIG9iamVjdHMKKyAgICBjYXNlIGlu
dmFsaWRfdHlwZTogLy8gQXJyYXkgb2YgdW5rbm93biBvYmplY3RzCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIC8vIGlmIGl0IHdhcyBub3Qgb25lIG9mIHRoZSBjYXNlcyBoYW5kbGVkLCB0
aGVuIG51bGwgaXMgcmV0dXJuZWQKKyAgICByZXR1cm4gamFycmF5OworfQorCitqdmFsdWUgY29u
dmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKTklUeXBl
IGpuaVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCit7CisgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAgICBzd2l0
Y2ggKGpuaVR5cGUpIHsKKyAgICBjYXNlIGFycmF5X3R5cGU6CisgICAgY2FzZSBvYmplY3RfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LmwgPSAoam9iamVjdCkwOworCisgICAg
ICAgICAgICAvLyBGaXJzdCBzZWUgaWYgd2UgaGF2ZSBhIEphdmEgaW5zdGFuY2UuCisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBv
YmplY3RJbXAgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKG9iamVjdElt
cC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OnNfaW5mbykgeworICAgICAgICAg
ICAgICAgICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2Jq
ZWN0SW1wKj4ob2JqZWN0SW1wKTsKKyAgICAgICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlKiBp
bnN0YW5jZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0
YW5jZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmwgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZSdW50aW1lQXJy
YXk6OnNfaW5mbykgeworICAgICAgICAgICAgICAgIC8vIElucHV0IGlzIGEgSmF2YVNjcmlwdCBB
cnJheSB0aGF0IHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQgZnJvbSBhIEphdmEgQXJyYXkKKyAgICAg
ICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJy
YXkqPihvYmplY3RJbXApOworICAgICAgICAgICAgICAgICAgICBKYXZhQXJyYXkqIGFycmF5ID0g
c3RhdGljX2Nhc3Q8SmF2YUFycmF5Kj4oaW1wLT5nZXRDb25jcmV0ZUFycmF5KCkpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubCA9IGFycmF5LT5qYXZhQXJyYXkoKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OmluZm8p
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhc2NyaXB0IEFycmF5LiBX
ZSBuZWVkIHRvIGNyZWF0ZSBpdCB0byBhIEphdmEgQXJyYXkuCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5sID0gY29udmVydEFycmF5SW5zdGFuY2VUb0phdmFBcnJheShleGVjLCBhc0FycmF5
KHZhbHVlKSwgamF2YUNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBOb3cgY29udmVydCB2YWx1ZSB0byBhIHN0cmluZyBpZiB0aGUg
dGFyZ2V0IHR5cGUgaXMgYSBqYXZhLmxhbmcuc3RyaW5nLCBhbmQgd2UncmUgbm90CisgICAgICAg
ICAgICAvLyBjb252ZXJ0aW5nIGZyb20gYSBOdWxsLgorICAgICAgICAgICAgaWYgKCFyZXN1bHQu
bCAmJiAhc3RyY21wKGphdmFDbGFzc05hbWUsICJqYXZhLmxhbmcuU3RyaW5nIikpIHsKKyNpZmRl
ZiBDT05WRVJUX05VTExfVE9fRU1QVFlfU1RSSU5HCisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LT5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVu
digpOworICAgICAgICAgICAgICAgICAgICBqY2hhciBidWZbMl07CisgICAgICAgICAgICAgICAg
ICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcoZW52LCBi
dWYsIDApOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisjZWxzZQorICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNO
dWxsKCkpCisjZW5kaWYKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVT
dHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAg
ICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAgICAgICAgICAgICAgICAgICAgam9i
amVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBq
Y2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZhU3RyaW5nOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5sKQorICAgICAgICAgICAgICAgIGJ6ZXJvKCZy
ZXN1bHQsIHNpemVvZihqdmFsdWUpKTsgLy8gSGFuZGxlIGl0IHRoZSBzYW1lIGFzIGEgdm9pZCBj
YXNlCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LnogPSAoamJvb2xlYW4pdmFsdWUudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGJ5dGVfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LmIgPSAoamJ5dGUpdmFsdWUudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGNoYXJfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LmMgPSAoamNoYXIpdmFsdWUudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNob3J0X3R5
cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdC5zID0gKGpzaG9ydCl2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgaW50X3R5
cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdC5pID0gKGppbnQpdmFsdWUudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGxvbmdfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LmogPSAoamxvbmcpdmFsdWUudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGZsb2F0X3R5
cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdC5mID0gKGpmbG9hdCl2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgZG91Ymxl
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUpdmFsdWUu
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIGludmFsaWRfdHlwZToKKyAgICBkZWZhdWx0OgorICAgIGNhc2Ugdm9p
ZF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBiemVybygmcmVzdWx0LCBzaXplb2YoanZh
bHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK30gIC8vIGVuZCBvZiBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBlbmQgb2Yg
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAw
OSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0pOSV9V
VElMSVRZX1BSSVZBVEVfSF8KKyNkZWZpbmUgX0pOSV9VVElMSVRZX1BSSVZBVEVfSF8KKworI2lm
IEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJqbmlfdXRpbGl0eS5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXhl
Y1N0YXRlOworY2xhc3MgSlNPYmplY3Q7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2p2YWx1
ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKTklUeXBlLCBjb25z
dCBjaGFyKiBqYXZhQ2xhc3NOYW1lKTsKK2Jvb2wgZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSos
IGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGlj
LCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBq
dmFsdWUmIHJlc3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZSYgZXhjZXB0aW9u
RGVzY3JpcHRpb24pOworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBf
Sk5JX1VUSUxJVFlfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA1MTY5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0CisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NSw3ICs4NSw3IEBACiAjaW5jbHVk
ZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZl
ci5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiam5pX3V0aWxp
dHkuaCIKKyNpbmNsdWRlICJqc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oIgogI2VuZGlmCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44321</attachid>
            <date>2009-12-04 09:40:02 -0800</date>
            <delta_ts>2009-12-07 04:35:26 -0800</delta_ts>
            <desc>Patch 3 for Bug 32157</desc>
            <filename>jni_utility3.txt</filename>
            <type>text/plain</type>
            <size>32715</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTY5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMTItMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIE1vdmVzIEpTQy1zcGVjaWZpYyBmdW5jdGlvbnMgZnJvbSBqbmlfdXRpbGl0eSBhbmQg
bW92ZXMgdGhlbSB0byBuZXcganNjL2puaV91dGlsaXR5X3ByaXZhdGUgZmlsZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE1NworCisgICAgICAg
IEJ1aWxkIGZpeCBvbmx5LCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IE1vZGlmaWVkLiBBZGQgam5pX3V0aWxpdHlfcHJpdmF0ZS5b
Y3BwfGhdLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcDogTW9kaWZpZWQu
IEluY2x1ZGUgam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGZvciBKU0MuCisgICAgICAgICogYnJpZGdl
L2puaS9qbmlfanNvYmplY3QubW06IE1vZGlmaWVkLiBJbmNsdWRlIGpuaV91dGlsaXR5X3ByaXZh
dGUuaCBmb3IgSlNDLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06IE1vZGlmaWVk
LiBJbmNsdWRlIGpuaV91dGlsaXR5X3ByaXZhdGUuaCBmb3IgSlNDLgorICAgICAgICAqIGJyaWRn
ZS9qbmkvam5pX3J1bnRpbWUuY3BwOiBNb2RpZmllZC4gSW5jbHVkZSBqbmlfdXRpbGl0eV9wcml2
YXRlLmggZm9yIEpTQy4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcDogTW9k
aWZpZWQuIFJlbW92ZWQgY29udmVydFZhbHVlVG9KVmFsdWUgYW5kIGNvbnZlcnRBcnJheUluc3Rh
bmNlVG9KYXZhQXJyYXkuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oOiBNb2Rp
ZmllZC4gUmVtb3ZlZCBjb252ZXJ0VmFsdWVUb0pWYWx1ZSBhbmQgZGlzcGF0Y2hKTklDYWxsLgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjOiBBZGRlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pz
Yy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkJpbmRpbmdz
Ojpjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9qbmlf
dXRpbGl0eV9wcml2YXRlLmg6IEFkZGVkLiBIZWFkZXIgZm9yIGNvbnZlcnRWYWx1ZVRvSlZhbHVl
IGFuZCBkaXNwYXRjaEpOSUNhbGwuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwOiBNb2RpZmllZC4gSW5jbHVkZSBqbmlfdXRpbGl0eV9wcml2YXRlLmgg
Zm9yIEpTQy4KKwogMjAwOS0xMi0wNCAgQWRhbSBUcmVhdCAgPGF0cmVhdEByaW0uY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTE2OTQpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEwMiw2
ICsxMTAyLDggQEAKIAkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxp
YnhtbDIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnhtbDIuY3BwICovOyB9
OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU5
OUQxRTMyMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUQxRTMwMTBDOTdENkUw
MEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCAqLzsgfTsKKwkJNTk5RDFFMzMxMEM5
N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUQxRTMxMTBDOTdENkUwMEUwRUYxMiAvKiBq
bmlfdXRpbGl0eV9wcml2YXRlLmggKi87IH07CiAJCTU5Qzc3RjJBMTA1NDVCM0IwMDUwNjEwNCAv
KiBHZW9sb2NhdGlvblNlcnZpY2VNb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5Qzc3RjI4MTA1NDVCM0IwMDUwNjEwNCAvKiBHZW9sb2NhdGlv
blNlcnZpY2VNb2NrLmNwcCAqLzsgfTsKIAkJNTlDNzdGMkIxMDU0NUIzQjAwNTA2MTA0IC8qIEdl
b2xvY2F0aW9uU2VydmljZU1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU5Qzc3RjI5MTA1NDVCM0IwMDUwNjEwNCAvKiBHZW9sb2NhdGlvblNlcnZp
Y2VNb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNUQxNUUzQUIwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTFRva2VuaXplclNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEMTVFM0E5MEY5RTZB
QzEwMDlFMEUzRiAvKiBYTUxUb2tlbml6ZXJTY29wZS5jcHAgKi87IH07CkBAIC02NDI2LDYgKzY0
MjgsOCBAQAogCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyogWE1MVG9rZW5pemVyTGlieG1s
Mi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAz
OTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJD
ODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk1OTlEMUUz
MDEwQzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcDsgcGF0aCA9
IGpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTk5RDFFMzExMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gam5pX3V0aWxpdHlfcHJpdmF0ZS5oOyBwYXRo
ID0ganNjL2puaV91dGlsaXR5X3ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTlDNzdGMjgxMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25TZXJ2aWNl
TW9jay5jcHA7IHBhdGggPSBtb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1OUM3N0YyOTEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9j
YXRpb25TZXJ2aWNlTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9s
b2NhdGlvblNlcnZpY2VNb2NrLmg7IHBhdGggPSBtb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNG
IC8qIFhNTFRva2VuaXplclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhNTFRva2VuaXplclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwMjk0LDYgKzEwMjk4LDcgQEAKIAkJMUE1NjlDQ0UwRDdFMkI4MjAwN0MzOTgzIC8qIGpu
aSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTk5RDFF
MkYxMEM5N0Q0QzAwRTBFRjEyIC8qIGpzYyAqLywKIAkJCQkxQTU2OUNDRjBEN0UyQjgyMDA3QzM5
ODMgLyogam5pX2NsYXNzLmNwcCAqLywKIAkJCQkxQTU2OUNEMDBEN0UyQjgyMDA3QzM5ODMgLyog
am5pX2NsYXNzLmggKi8sCiAJCQkJMUE1NjlDRDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0
YW5jZS5jcHAgKi8sCkBAIC0xMDk5Myw2ICsxMDk5OCwxNSBAQAogCQkJcGF0aCA9IHdlYnNvY2tl
dHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1OTlEMUUyRjEwQzk3RDRD
MDBFMEVGMTIgLyoganNjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk1OTlEMUUzMDEwQzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5j
cHAgKi8sCisJCQkJNTk5RDFFMzExMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZh
dGUuaCAqLywKKwkJCSk7CisJCQluYW1lID0ganNjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJNTlDNzdGMTAxMDU0NTkxQzAwNTA2MTA0IC8qIG1vY2sgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTgyNDMsNiArMTgyNTcsNyBAQAog
CQkJCTdBMEU3NzBGMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBMEU3NzFGMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEw
MEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1OTlEMUUzMzEw
Qzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yMDM5OSw2ICsyMDQxNCw3IEBACiAJCQkJN0EwRTc3MEUxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTBFNzcxRTEwQzAw
REIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjRFQUY0QUUxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTU5OUQxRTMyMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0
eV9wcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0
YW5jZS5jcHAJKHJldmlzaW9uIDUxNjk0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKKyNpZiBVU0UoSlND
KQorI2luY2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oQU5EUk9JRCkKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNlbmRpZgpJbmRleDogV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiA1MTY5NCkKKysrIFdlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCisj
aWYgVVNFKEpTQykKKyNpbmNsdWRlICJqbmlfdXRpbGl0eV9wcml2YXRlLmgiCisjZW5kaWYKKwog
dXNpbmcgV2ViQ29yZTo6RnJhbWU7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwpJ
bmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gNTE2OTQpCisrKyBXZWJDb3JlL2Jy
aWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEwIEBACiAj
aW1wb3J0ICJvYmpjX3V0aWxpdHkuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCisj
aWYgVVNFKEpTQykKKyNpbmNsdWRlICJqbmlfdXRpbGl0eV9wcml2YXRlLmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdl
YlNjcmlwdGluZ1ByaXZhdGUpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHJl
dmlzaW9uIDUxNjk0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE3IEBACiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJ
REdFKQogCi0jaW5jbHVkZSA8am5pX3V0aWxpdHkuaD4KLQorI2luY2x1ZGUgImpuaV91dGlsaXR5
LmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0
LmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUg
ImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKKyNlbmRpZgorCiAjaWZkZWYgTkRFQlVHCiAjZGVmaW5l
IEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNlbHNlCkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDUxNjk0KQorKysgV2ViQ29yZS9icmlkZ2Uv
am5pL2puaV91dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDYgQEAKIAog
I2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNpbmNsdWRlICJqbmlfcnVudGltZS5oIgot
I2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CiAjaW5jbHVkZSA8ZGxmY24uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNDcsMjM2ICszNDIs
NiBAQCBqdmFsdWUgZ2V0Sk5JRmllbGQoIGpvYmplY3Qgb2JqLCBKTklUeXBlCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdmFB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGpzQXJyYXksIGNvbnN0IGNoYXIqIGphdmFD
bGFzc05hbWUpCi17Ci0gICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICAvLyBBcyBK
UyBBcnJheXMgY2FuIGNvbnRhaW4gYSBtaXh0dXJlIG9mIG9iamVjdHMsIGFzc3VtZSB3ZSBjYW4g
Y29udmVydCB0bwotICAgIC8vIHRoZSByZXF1ZXN0ZWQgSmF2YSBBcnJheSB0eXBlIHJlcXVlc3Rl
ZCwgdW5sZXNzIHRoZSBhcnJheSB0eXBlIGlzIHNvbWUgb2JqZWN0IGFycmF5Ci0gICAgLy8gb3Ro
ZXIgdGhhbiBhIHN0cmluZy4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBqc0FycmF5LT5sZW5ndGgo
KTsKLSAgICBqb2JqZWN0QXJyYXkgamFycmF5ID0gMDsKLSAgICAKLSAgICAvLyBCdWlsZCB0aGUg
Y29ycmVjdCBhcnJheSB0eXBlCi0gICAgc3dpdGNoIChKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUo
amF2YUNsYXNzTmFtZVsxXSkpIHsgCi0gICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKLSAgICAg
ICAgLy8gT25seSBzdXBwb3J0IHN0cmluZyBvYmplY3QgdHlwZXMKLSAgICAgICAgaWYgKDAgPT0g
c3RyY21wKCJbTGphdmEubGFuZy5TdHJpbmc7IiwgamF2YUNsYXNzTmFtZSkpIHsKLSAgICAgICAg
ICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdPYmplY3RBcnJheShsZW5ndGgsCi0g
ICAgICAgICAgICAgICAgZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9TdHJpbmciKSwKLSAgICAg
ICAgICAgICAgICBlbnYtPk5ld1N0cmluZ1VURigiIikpOwotICAgICAgICAgICAgZm9yKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0
ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBzdHJp
bmdWYWx1ZSA9IGl0ZW0udG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRP
YmplY3RBcnJheUVsZW1lbnQoamFycmF5LGksCi0gICAgICAgICAgICAgICAgICAgIGVudi0+ZnVu
Y3Rpb25zLT5OZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIgKilzdHJpbmdWYWx1ZS5kYXRhKCks
IHN0cmluZ1ZhbHVlLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIGJv
b2xlYW5fdHlwZTogewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5l
d0Jvb2xlYW5BcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5
LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsdWUgPSAoamJvb2xl
YW4paXRlbS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5B
cnJheVJlZ2lvbigoamJvb2xlYW5BcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZh
bHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgamFycmF5ID0gKGpv
YmplY3RBcnJheSllbnYtPk5ld0J5dGVBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamJ5dGUgdmFs
dWUgPSAoamJ5dGUpaXRlbS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNl
dEJ5dGVBcnJheVJlZ2lvbigoamJ5dGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwg
JnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0
QXJyYXkpZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvcih1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVt
ID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5n
VmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIGpjaGFyIHZhbHVl
ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUuc2l6ZSgpID4gMCkKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSAoKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5kYXRhKCkp
WzBdOwotICAgICAgICAgICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKChqY2hhckFycmF5
KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsK
LSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdTaG9ydEFycmF5KGxl
bmd0aCk7Ci0gICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsK
LSAgICAgICAgICAgICAgICBqc2hvcnQgdmFsdWUgPSAoanNob3J0KWl0ZW0udG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRTaG9ydEFycmF5UmVnaW9uKChqc2hvcnRBcnJh
eSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewot
ICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0ludEFycmF5KGxlbmd0
aCk7Ci0gICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAg
ICAgICAgICAgICAgICBqaW50IHZhbHVlID0gKGppbnQpaXRlbS50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgICAgICBlbnYtPlNldEludEFycmF5UmVnaW9uKChqaW50QXJyYXkpamFycmF5LCAo
anNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAg
ICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3TG9uZ0FycmF5KGxlbmd0aCk7Ci0gICAg
ICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
ICAgICBqbG9uZyB2YWx1ZSA9IChqbG9uZylpdGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAg
ICAgICAgIGVudi0+U2V0TG9uZ0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphcnJheSwgKGpzaXpl
KWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsKLSAgICAgICAgICAgIGph
cnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdGbG9hdEFycmF5KGxlbmd0aCk7Ci0gICAgICAg
ICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAg
ICBqZmxvYXQgdmFsdWUgPSAoamZsb2F0KWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgZW52LT5TZXRGbG9hdEFycmF5UmVnaW9uKChqZmxvYXRBcnJheSlqYXJyYXksIChqc2l6
ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKLSAgICAgICAg
ICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdEb3VibGVBcnJheShsZW5ndGgpOwot
ICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAg
ICAgICAgICAgamRvdWJsZSB2YWx1ZSA9IChqZG91YmxlKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWph
cnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgYXJyYXlfdHlw
ZTogLy8gZG9uJ3QgaGFuZGxlIGVtYmVkZGVkIGFycmF5cwotICAgICAgICBjYXNlIHZvaWRfdHlw
ZTogLy8gRG9uJ3QgZXhwZWN0IGFycmF5cyBvZiB2b2lkIG9iamVjdHMKLSAgICAgICAgY2FzZSBp
bnZhbGlkX3R5cGU6IC8vIEFycmF5IG9mIHVua25vd24gb2JqZWN0cwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIC8vIGlmIGl0IHdhcyBub3Qgb25lIG9mIHRoZSBjYXNlcyBo
YW5kbGVkLCB0aGVuIG51bGwgaXMgcmV0dXJuZWQKLSAgICByZXR1cm4gamFycmF5OwotfQotCi0K
LWp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIEpOSVR5cGUgX0pOSVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCi17Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKLSAgICBqdmFsdWUgcmVz
dWx0OwotICAgCi0gICAgc3dpdGNoIChfSk5JVHlwZSl7Ci0gICAgICAgIGNhc2UgYXJyYXlfdHlw
ZToKLSAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmwgPSAo
am9iamVjdCkwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGaXJzdCBzZWUgaWYgd2Ug
aGF2ZSBhIEphdmEgaW5zdGFuY2UuCi0gICAgICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSl7
Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdEltcCA9IGFzT2JqZWN0KHZhbHVlKTsK
LSAgICAgICAgICAgICAgICBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZU9i
amVjdEltcDo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAq
IGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihvYmplY3RJbXApOwotICAgICAg
ICAgICAgICAgICAgICBKYXZhSW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8SmF2YUlu
c3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGluc3Rh
bmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZUFycmF5OjpzX2luZm8p
IHsKLSAgICAgICAgICAgICAgICAvLyBJbnB1dCBpcyBhIEphdmFTY3JpcHQgQXJyYXkgdGhhdCB3
YXMgb3JpZ2luYWxseSBjcmVhdGVkIGZyb20gYSBKYXZhIEFycmF5Ci0gICAgICAgICAgICAgICAg
ICAgIFJ1bnRpbWVBcnJheSogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0
SW1wKTsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUFycmF5ICphcnJheSA9IHN0YXRpY19jYXN0
PEphdmFBcnJheSo+KGltcC0+Z2V0Q29uY3JldGVBcnJheSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmwgPSBhcnJheS0+amF2YUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgfSAKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZKU0FycmF5
OjppbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElucHV0IGlzIGEgSmF2YXNjcmlwdCBB
cnJheS4gV2UgbmVlZCB0byBjcmVhdGUgaXQgdG8gYSBKYXZhIEFycmF5LgotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubCA9IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkoZXhlYywg
YXNBcnJheSh2YWx1ZSksIGphdmFDbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm93IGNvbnZlcnQgdmFsdWUg
dG8gYSBzdHJpbmcgaWYgdGhlIHRhcmdldCB0eXBlIGlzIGEgamF2YS5sYW5nLnN0cmluZywgYW5k
IHdlJ3JlIG5vdAotICAgICAgICAgICAgLy8gY29udmVydGluZyBmcm9tIGEgTnVsbC4KLSAgICAg
ICAgICAgIGlmIChyZXN1bHQubCA9PSAwICYmIHN0cmNtcChqYXZhQ2xhc3NOYW1lLCAiamF2YS5s
YW5nLlN0cmluZyIpID09IDApIHsKLSNpZmRlZiBDT05WRVJUX05VTExfVE9fRU1QVFlfU1RSSU5H
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
ICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgICAgICAgICAgICAgICAgICBqY2hh
ciBidWZbMl07Ci0gICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVudi0+
ZnVuY3Rpb25zLT5OZXdTdHJpbmcgKGVudiwgYnVmLCAwKTsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmwgPSBqYXZhU3RyaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIAotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmlu
Z1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIEpOSUVu
diAqZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2YVN0
cmluZyA9IGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcgKGVudiwgKGNvbnN0IGpjaGFyICopc3Ry
aW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubCA9IGphdmFTdHJpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHQubCA9PSAwKSAKLSAgICAgICAgICAgICAgICBiemVybyAoJnJlc3Vs
dCwgc2l6ZW9mKGp2YWx1ZSkpOyAvLyBIYW5kbGUgaXQgdGhlIHNhbWUgYXMgYSB2b2lkIGNhc2UK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgYm9vbGVh
bl90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHQueiA9IChqYm9vbGVhbil2YWx1ZS50b051bWJl
cihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmIgPSAoamJ5dGUpdmFsdWUu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAg
ICAgICBjYXNlIGNoYXJfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmMgPSAoamNoYXIpdmFs
dWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHQucyA9IChqc2hvcnQpdmFsdWUu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBpbnRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmkgPSAoamludCl2YWx1ZS50b051bWJl
cihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGxvbmdf
dHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmogPSAoamxvbmcpdmFsdWUudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBmbG9hdF90eXBl
OiB7Ci0gICAgICAgICAgICByZXN1bHQuZiA9IChqZmxvYXQpdmFsdWUudG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTog
ewotICAgICAgICAgICAgcmVzdWx0LmQgPSAoamRvdWJsZSl2YWx1ZS50b051bWJlcihleGVjKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIGludmFsaWRfdHlwZToKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
Y2FzZSB2b2lkX3R5cGU6IHsKLSAgICAgICAgICAgIGJ6ZXJvICgmcmVzdWx0LCBzaXplb2YoanZh
bHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIH0gIC8vIGVuZCBvZiBuYW1lc3BhY2UgQmluZGluZ3MKIAogfSAvLyBlbmQgb2Yg
bmFtZXNwYWNlIEpTQwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgJKHJldmlzaW9uIDUx
Njk0KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNpbmNs
dWRlIDxydW50aW1lL0pTVmFsdWUuaD4KICNpbmNsdWRlIDxKYXZhVk0vam5pLmg+CiAKIC8vIFRo
ZSBvcmRlciBvZiB0aGVzZSBpdGVtcyBjYW4gbm90IGJlIG1vZGlmaWVkIGFzIHRoZXkgYXJlIHRp
Z2h0bHkKQEAgLTUzLDkgKzUyLDYgQEAgdHlwZWRlZiBlbnVtIHsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTT2JqZWN0OyAgICAKLQogbmFtZXNwYWNlIEJp
bmRpbmdzIHsKIAogY2xhc3MgSmF2YVBhcmFtZXRlcjsKQEAgLTcyLDggKzY4LDYgQEAgSk5JVHlw
ZSBKTklUeXBlRnJvbUNsYXNzTmFtZShjb25zdCBjaGFyIAogSk5JVHlwZSBKTklUeXBlRnJvbVBy
aW1pdGl2ZVR5cGUoY2hhciB0eXBlKTsKIGNvbnN0IGNoYXIgKnNpZ25hdHVyZUZyb21QcmltaXRp
dmVUeXBlKEpOSVR5cGUgdHlwZSk7CiAKLWp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBKTklUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKTsKLQog
anZhbHVlIGdldEpOSUZpZWxkKGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSk7CiAKIGptZXRob2RJRCBnZXRNZXRob2RJRChq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKTsKQEAgLTI3OSw4
ICsyNzMsNiBAQCBUIGNhbGxKTklTdGF0aWNNZXRob2QoamNsYXNzIGNscywgY29uc3QgCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLWJvb2wgZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSos
IGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGlj
LCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBq
dmFsdWUmIHJlc3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZSYgZXhjZXB0aW9u
RGVzY3JpcHRpb24pOwotCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxp
dHlfcHJpdmF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiam5pX3V0aWxpdHlfcHJpdmF0ZS5o
IgorCisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKworI2luY2x1ZGUgImpuaV9ydW50aW1l
LmgiCisjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xv
Y2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK3N0YXRp
YyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBqc0FycmF5LCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQoreworICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgLy8gQXMgSlMgQXJyYXlzIGNhbiBjb250YWlu
IGEgbWl4dHVyZSBvZiBvYmplY3RzLCBhc3N1bWUgd2UgY2FuIGNvbnZlcnQgdG8KKyAgICAvLyB0
aGUgcmVxdWVzdGVkIEphdmEgQXJyYXkgdHlwZSByZXF1ZXN0ZWQsIHVubGVzcyB0aGUgYXJyYXkg
dHlwZSBpcyBzb21lIG9iamVjdCBhcnJheQorICAgIC8vIG90aGVyIHRoYW4gYSBzdHJpbmcuCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0ganNBcnJheS0+bGVuZ3RoKCk7CisgICAgam9iamVjdEFycmF5
IGphcnJheSA9IDA7CisKKyAgICAvLyBCdWlsZCB0aGUgY29ycmVjdCBhcnJheSB0eXBlCisgICAg
c3dpdGNoIChKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoamF2YUNsYXNzTmFtZVsxXSkpIHsKKyAg
ICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gT25seSBz
dXBwb3J0IHN0cmluZyBvYmplY3QgdHlwZXMKKyAgICAgICAgICAgIGlmICghc3RyY21wKCJbTGph
dmEubGFuZy5TdHJpbmc7IiwgamF2YUNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBqYXJy
YXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3T2JqZWN0QXJyYXkobGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICBlbnYtPkZpbmRDbGFzcygiamF2YS9sYW5nL1N0cmluZyIpLAorICAgICAgICAg
ICAgICAgICAgICBlbnYtPk5ld1N0cmluZ1VURigiIikpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgICAg
IFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAg
ICAgICAgICBlbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChqYXJyYXksIGksCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFy
ICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChq
b2JqZWN0QXJyYXkpZW52LT5OZXdCb29sZWFuQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqYm9v
bGVhbiB2YWx1ZSA9IChqYm9vbGVhbilpdGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ICAgIGVudi0+U2V0Qm9vbGVhbkFycmF5UmVnaW9uKChqYm9vbGVhbkFycmF5KWphcnJheSwgKGpz
aXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3Qnl0ZUFycmF5KGxlbmd0aCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAg
ICAgICAgICAgamJ5dGUgdmFsdWUgPSAoamJ5dGUpaXRlbS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbigoamJ5dGVBcnJheSlqYXJyYXksIChq
c2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGNoYXJfdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShsZW5ndGgpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAg
ICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpOworICAg
ICAgICAgICAgICAgIGpjaGFyIHZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaW5n
VmFsdWUuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKGNvbnN0IGpj
aGFyKilzdHJpbmdWYWx1ZS5kYXRhKCkpWzBdOworICAgICAgICAgICAgICAgIGVudi0+U2V0Q2hh
ckFycmF5UmVnaW9uKChqY2hhckFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
IGNhc2Ugc2hvcnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamFycmF5ID0gKGpvYmpl
Y3RBcnJheSllbnYtPk5ld1Nob3J0QXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqc2hvcnQgdmFs
dWUgPSAoanNob3J0KWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52LT5T
ZXRTaG9ydEFycmF5UmVnaW9uKChqc2hvcnRBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUp
MSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYXJyYXkgPSAo
am9iamVjdEFycmF5KWVudi0+TmV3SW50QXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqaW50IHZh
bHVlID0gKGppbnQpaXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBlbnYtPlNl
dEludEFycmF5UmVnaW9uKChqaW50QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2Jq
ZWN0QXJyYXkpZW52LT5OZXdMb25nQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqbG9uZyB2YWx1
ZSA9IChqbG9uZylpdGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0
TG9uZ0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAm
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamFycmF5ID0gKGpv
YmplY3RBcnJheSllbnYtPk5ld0Zsb2F0QXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBqZmxvYXQg
dmFsdWUgPSAoamZsb2F0KWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52
LT5TZXRGbG9hdEFycmF5UmVnaW9uKChqZmxvYXRBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNp
emUpMSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYXJy
YXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RG91YmxlQXJyYXkobGVuZ3RoKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAg
ICBqZG91YmxlIHZhbHVlID0gKGpkb3VibGUpaXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgICAgICBlbnYtPlNldERvdWJsZUFycmF5UmVnaW9uKChqZG91YmxlQXJyYXkpamFycmF5LCAo
anNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBhcnJheV90eXBlOiAvLyBkb24ndCBoYW5kbGUg
ZW1iZWRkZWQgYXJyYXlzCisgICAgY2FzZSB2b2lkX3R5cGU6IC8vIERvbid0IGV4cGVjdCBhcnJh
eXMgb2Ygdm9pZCBvYmplY3RzCisgICAgY2FzZSBpbnZhbGlkX3R5cGU6IC8vIEFycmF5IG9mIHVu
a25vd24gb2JqZWN0cworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBpZiBpdCB3YXMg
bm90IG9uZSBvZiB0aGUgY2FzZXMgaGFuZGxlZCwgdGhlbiBudWxsIGlzIHJldHVybmVkCisgICAg
cmV0dXJuIGphcnJheTsKK30KKworanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSk5JVHlwZSBqbmlUeXBlLCBjb25zdCBjaGFyKiBqYXZh
Q2xhc3NOYW1lKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisK
KyAgICBqdmFsdWUgcmVzdWx0OworCisgICAgc3dpdGNoIChqbmlUeXBlKSB7CisgICAgY2FzZSBh
cnJheV90eXBlOgorICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc3VsdC5sID0gKGpvYmplY3QpMDsKKworICAgICAgICAgICAgLy8gRmlyc3Qgc2VlIGlmIHdl
IGhhdmUgYSBKYXZhIGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0SW1wID0gYXNPYmplY3QodmFsdWUp
OworICAgICAgICAgICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZSdW50aW1l
T2JqZWN0SW1wOjpzX2luZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZU9iamVjdElt
cCogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KG9iamVjdEltcCk7CisgICAg
ICAgICAgICAgICAgICAgIEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxKYXZh
SW5zdGFuY2UqPihpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gaW5z
dGFuY2UtPmphdmFJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0
SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZUFycmF5OjpzX2luZm8pIHsKKyAgICAgICAgICAg
ICAgICAvLyBJbnB1dCBpcyBhIEphdmFTY3JpcHQgQXJyYXkgdGhhdCB3YXMgb3JpZ2luYWxseSBj
cmVhdGVkIGZyb20gYSBKYXZhIEFycmF5CisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJh
eSogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0SW1wKTsKKyAgICAgICAg
ICAgICAgICAgICAgSmF2YUFycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEphdmFBcnJheSo+KGlt
cC0+Z2V0Q29uY3JldGVBcnJheSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBh
cnJheS0+amF2YUFycmF5KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RJbXAt
PmNsYXNzSW5mbygpID09ICZKU0FycmF5OjppbmZvKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IElucHV0IGlzIGEgSmF2YXNjcmlwdCBBcnJheS4gV2UgbmVlZCB0byBjcmVhdGUgaXQgdG8gYSBK
YXZhIEFycmF5LgorICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXZhQXJyYXkoZXhlYywgYXNBcnJheSh2YWx1ZSksIGphdmFDbGFzc05hbWUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGNv
bnZlcnQgdmFsdWUgdG8gYSBzdHJpbmcgaWYgdGhlIHRhcmdldCB0eXBlIGlzIGEgamF2YS5sYW5n
LnN0cmluZywgYW5kIHdlJ3JlIG5vdAorICAgICAgICAgICAgLy8gY29udmVydGluZyBmcm9tIGEg
TnVsbC4KKyAgICAgICAgICAgIGlmICghcmVzdWx0LmwgJiYgIXN0cmNtcChqYXZhQ2xhc3NOYW1l
LCAiamF2YS5sYW5nLlN0cmluZyIpKSB7CisjaWZkZWYgQ09OVkVSVF9OVUxMX1RPX0VNUFRZX1NU
UklORworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNOdWxsKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAgICAgICAgICAgICAgICAgICAg
amNoYXIgYnVmWzJdOworICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBl
bnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmwgPSBqYXZhU3RyaW5nOworICAgICAgICAgICAgICAgIH0gZWxzZQorI2Vsc2UK
KyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorI2VuZGlmCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5J
RW52KCk7CisgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVudi0+ZnVu
Y3Rpb25zLT5OZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIgKilzdHJpbmdWYWx1ZS5kYXRhKCks
IHN0cmluZ1ZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2
YVN0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXN1
bHQubCkKKyAgICAgICAgICAgICAgICBiemVybygmcmVzdWx0LCBzaXplb2YoanZhbHVlKSk7IC8v
IEhhbmRsZSBpdCB0aGUgc2FtZSBhcyBhIHZvaWQgY2FzZQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdC56ID0gKGpib29sZWFuKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc3VsdC5iID0gKGpieXRlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBjaGFyX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc3VsdC5jID0gKGpjaGFyKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICByZXN1bHQucyA9IChqc2hvcnQpdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICByZXN1bHQuaSA9IChqaW50KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc3VsdC5qID0gKGpsb25nKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICByZXN1bHQuZiA9IChqZmxvYXQpdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICByZXN1bHQuZCA9IChqZG91YmxlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBpbnZhbGlkX3R5
cGU6CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIHZvaWRfdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgYnplcm8oJnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9ICAvLyBlbmQgb2YgbmFt
ZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gZW5kIG9mIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShNQUNfSkFWQV9CUklER0UpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2pu
aV91dGlsaXR5X3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L2puaV91dGlsaXR5X3ByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYnJpZGdlL2pu
aS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNl
IFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9KTklfVVRJTElUWV9QUklWQVRFX0hfCisjZGVmaW5l
IF9KTklfVVRJTElUWV9QUklWQVRFX0hfCisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQor
CisjaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTT2JqZWN0Owor
CituYW1lc3BhY2UgQmluZGluZ3MgeworCitqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgSk5JVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSk7Citi
b29sIGRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRW
aWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0
aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlJiByZXN1bHQsIGNvbnN0IGNoYXIq
IGNhbGxpbmdVUkwsIEpTVmFsdWUmIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKKworfSAvLyBuYW1l
c3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQorCisjZW5kaWYgLy8gX0pOSV9VVElMSVRZX0hfCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNp
b24gNTE2OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAw
NywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IDIwMDksIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODUsNyArODUsNyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0
UHJvZmlsZS5oIgotI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCisjaW5jbHVkZSAianNjL2puaV91
dGlsaXR5X3ByaXZhdGUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
</data>
<flag name="review"
          id="26145"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="26232"
          type_id="3"
          status="-"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>