<?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>55383</bug_id>
          
          <creation_ts>2011-02-28 08:51:58 -0800</creation_ts>
          <short_desc>JavaInstance should be a pure interface</short_desc>
          <delta_ts>2011-04-05 10:19:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55212</dependson>
    
    <dependson>55219</dependson>
    
    <dependson>55384</dependson>
    
    <dependson>55765</dependson>
    
    <dependson>55766</dependson>
    
    <dependson>55772</dependson>
    
    <dependson>55967</dependson>
    
    <dependson>56009</dependson>
    
    <dependson>56197</dependson>
    
    <dependson>57019</dependson>
    
    <dependson>57533</dependson>
          <blocked>57230</blocked>
    
    <blocked>57859</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>andreip</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jorlow</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>359089</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-02-28 08:51:58 -0800</bug_when>
    <thetext>The Java bridge code in WebCore/bridge/jni uses JavaInstance to represent a Java object which can be injected into JavaScript. The binding to JavaScript is done via NPAPI so objects of type JavaInstance are manipulated via JavaNPObject.

The implementation of JavaInstance is a simple wrapper around a JNI jobject. To allow implementations flexibility in how the binding to a Java object is achieved, JavaInstance should be an interface. The current JavaInstance implementation would be moved to a new JavaInstanceJobject class which implements this interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378726</commentid>
    <comment_count>1</comment_count>
      <attachid>88047</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-04 04:12:21 -0700</bug_when>
    <thetext>Created attachment 88047
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379596</commentid>
    <comment_count>2</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-05 08:47:40 -0700</bug_when>
    <thetext>&gt; Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp:45
&gt; +    m_class = 0;

Can we use an initialization list instead?

&gt; Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp:51
&gt; +    delete m_class;

Use an OwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379619</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-05 09:15:53 -0700</bug_when>
    <thetext>&gt; Can we use an initialization list instead?
Done

&gt; Use an OwnPtr?
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379620</commentid>
    <comment_count>4</comment_count>
      <attachid>88249</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-05 09:16:16 -0700</bug_when>
    <thetext>Created attachment 88249
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379629</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-05 09:23:55 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379661</commentid>
    <comment_count>6</comment_count>
      <attachid>88249</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-05 09:44:53 -0700</bug_when>
    <thetext>Comment on attachment 88249
Patch 2

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379699</commentid>
    <comment_count>7</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-05 10:12:16 -0700</bug_when>
    <thetext>Committed r82950: &lt;http://trac.webkit.org/changeset/82950&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88047</attachid>
            <date>2011-04-04 04:12:21 -0700</date>
            <delta_ts>2011-04-05 09:16:16 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>javaInstanceInterface.txt</filename>
            <type>text/plain</type>
            <size>16130</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tayBiL1NvdXJj
ZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawppbmRleCBmZGJmYzhmLi45ZTQzOGU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsKKysrIGIvU291
cmNlL1dlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCkBAIC0xODAsNiArMTgwLDYgQEAgTE9D
QUxfU1JDX0ZJTEVTICs9IFwKIAlicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcCBc
CiAJYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguY3BwIFwKIAlicmlkZ2Uvam5pL3Y4
L0phdmFGaWVsZEpvYmplY3RWOC5jcHAgXAotCWJyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjgu
Y3BwIFwKKwlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAgXAogCWJyaWRn
ZS9qbmkvdjgvSmF2YU5QT2JqZWN0LmNwcCBcCiAJYnJpZGdlL2puaS92OC9Kb2JqZWN0V3JhcHBl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA2ZTlmM2NhLi5jODkzYTYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzkgQEAKKzIwMTEtMDQtMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEphdmFJ
bnN0YW5jZSBzaG91bGQgYmUgYSBwdXJlIGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUzODMKKworICAgICAgICBUaGlzIHBhdGNoIGZp
eGVzIEphdmFJbnN0YW5jZSBmb3IgVjggb25seS4KKworICAgICAgICBJdCBmYWN0b3JzIG91dCBh
IEphdmFJbnN0YW5jZSBpbnRlcmZhY2Ugd2hpY2ggZG9lcyBub3QgdXNlIEpOSQorICAgICAgICB0
eXBlcy4gVGhpcyB3aWxsIGFsbG93IHRoZSBKYXZhIGJyaWRnZSB0byBiZSB1c2VkIHdpdGggb2Jq
ZWN0cworICAgICAgICB0aGF0IGRvbid0IHVzZSBKTkkgZGlyZWN0bHkuIFRoZSBleGlzdGluZyBq
b2JqZWN0LWJhY2tlZAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBpcyBtb3ZlZCB0byBhIG5ldyBK
YXZhSW5zdGFuY2VKb2JqZWN0IGNsYXNzIHdoaWNoCisgICAgICAgIGltcGxlbWVudHMgdGhlIGlu
dGVyZmFjZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAg
ICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvSm9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKiBicmlkZ2Uv
am5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Omp2
YWx1ZVRvSmF2YVZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmphdmFWYWx1ZVRvSnZh
bHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHA6
CisgICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjpKYXZhSW5zdGFuY2VKb2JqZWN0KToKKyAg
ICAgICAgKEphdmFJbnN0YW5jZUpvYmplY3Q6On5KYXZhSW5zdGFuY2VKb2JqZWN0KToKKyAgICAg
ICAgKEphdmFJbnN0YW5jZUpvYmplY3Q6OmJlZ2luKToKKyAgICAgICAgKEphdmFJbnN0YW5jZUpv
YmplY3Q6OmVuZCk6CisgICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjpnZXRDbGFzcyk6Cisg
ICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjppbnZva2VNZXRob2QpOgorICAgICAgICAoSmF2
YUluc3RhbmNlSm9iamVjdDo6Z2V0RmllbGQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2
YUluc3RhbmNlSm9iamVjdFY4Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlVjguaC4KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0
YW5jZUpvYmplY3Q6OmphdmFJbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZh
SW5zdGFuY2VWOC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjp+SmF2
YUluc3RhbmNlKToKKwogMjAxMS0wNC0wNCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA2ZmQyNTFmLi5lYmU5Y2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTk4
LDcgKzIxOTgsOCBAQAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkSm9iamVj
dFY4LmNwcCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0Vjgu
aCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRWOC5oJywKLSAgICAgICAg
ICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4LmNwcCcsCisgICAgICAgICAgICAnYnJp
ZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0VjguY3BwJywKKyAgICAgICAgICAgICdicmlk
Z2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5oJywKICAgICAgICAgICAgICdicmlkZ2Uv
am5pL3Y4L0phdmFJbnN0YW5jZVY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2
YU5QT2JqZWN0VjguY3BwJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVj
dFY4LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9Kb2JqZWN0V3Jh
cHBlci5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5oCmluZGV4
IDYzZmJmZmMuLjljYzRiMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
Sm9iamVjdFdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RX
cmFwcGVyLmgKQEAgLTQwLDYgKzQwLDcgQEAgZnJpZW5kIGNsYXNzIEphdmFBcnJheTsKIGZyaWVu
ZCBjbGFzcyBKYXZhRmllbGQ7CiBmcmllbmQgY2xhc3MgSmF2YUZpZWxkSm9iamVjdDsKIGZyaWVu
ZCBjbGFzcyBKYXZhSW5zdGFuY2U7CitmcmllbmQgY2xhc3MgSmF2YUluc3RhbmNlSm9iamVjdDsK
IAogcHVibGljOgogICAgIGpvYmplY3QgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3Rh
bmNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0pOSVV0aWxp
dHlQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSk5JVXRpbGl0eVBy
aXZhdGUuY3BwCmluZGV4IDg4OTAyYTUuLmM5NzE5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoSkFWQV9CUklER0UpCiAKLSNpbmNsdWRlICJKYXZhSW5zdGFuY2VWOC5o
IgorI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpvYmplY3RWOC5oIgogI2luY2x1ZGUgIkphdmFOUE9i
amVjdFY4LmgiCiAjaW5jbHVkZSAiSmF2YVZhbHVlVjguaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CkBAIC0yNDIsNyArMjQyLDcgQEAgSmF2YVZhbHVlIGp2YWx1ZVRvSmF2YVZhbHVl
KGNvbnN0IGp2YWx1ZSYgdmFsdWUsIGNvbnN0IEphdmFUeXBlJiB0eXBlKQogICAgIGNhc2UgSmF2
YVR5cGVWb2lkOgogICAgICAgICBicmVhazsKICAgICBjYXNlIEphdmFUeXBlT2JqZWN0OgotICAg
ICAgICByZXN1bHQubV9vYmplY3RWYWx1ZSA9IG5ldyBKYXZhSW5zdGFuY2UodmFsdWUubCk7Cisg
ICAgICAgIHJlc3VsdC5tX29iamVjdFZhbHVlID0gbmV3IEphdmFJbnN0YW5jZUpvYmplY3QodmFs
dWUubCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSmF2YVR5cGVTdHJpbmc6CiAgICAgICAg
IHsKQEAgLTI5MSw4ICsyOTEsMTEgQEAganZhbHVlIGphdmFWYWx1ZVRvSnZhbHVlKGNvbnN0IEph
dmFWYWx1ZSYgdmFsdWUpCiAgICAgY2FzZSBKYXZhVHlwZVZvaWQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0gICAgICAgIGlmICh2YWx1ZS5tX29iamVjdFZhbHVl
KQotICAgICAgICAgICAgcmVzdWx0LmwgPSB2YWx1ZS5tX29iamVjdFZhbHVlLT5qYXZhSW5zdGFu
Y2UoKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fb2JqZWN0VmFsdWUpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBieSBKYXZhSW5zdGFuY2VKb2JqZWN0LCBzbyB3ZSBr
bm93IHRoZQorICAgICAgICAgICAgLy8gZGVyaXZlZCB0eXBlIG9mIHRoZSBvYmplY3QuCisgICAg
ICAgICAgICByZXN1bHQubCA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZUpvYmplY3QqPih2YWx1
ZS5tX29iamVjdFZhbHVlLmdldCgpKS0+amF2YUluc3RhbmNlKCk7CisgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBKYXZhVHlwZVN0cmluZzoKICAgICAgICAgLy8gVGhpcyBjcmVh
dGVzIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGEgbmV3IFN0cmluZyBvYmplY3QsIHdoaWNoIHdpbGwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9i
amVjdFY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9i
amVjdFY4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM3ZDVkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFu
Y2VKb2JqZWN0VjguY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSmF2YUluc3RhbmNlSm9iamVjdFY4LmgiCisKKyNpZiBF
TkFCTEUoSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkphdmFDbGFzc0pvYmplY3RWOC5oIgorI2luY2x1ZGUgIkphdmFGaWVsZFY4LmgiCisj
aW5jbHVkZSAiSmF2YU1ldGhvZC5oIgorCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5k
aW5nczsKKworSmF2YUluc3RhbmNlSm9iamVjdDo6SmF2YUluc3RhbmNlSm9iamVjdChqb2JqZWN0
IGluc3RhbmNlKQoreworICAgIG1faW5zdGFuY2UgPSBuZXcgSm9iamVjdFdyYXBwZXIoaW5zdGFu
Y2UpOworICAgIG1fY2xhc3MgPSAwOworfQorCitKYXZhSW5zdGFuY2VKb2JqZWN0Ojp+SmF2YUlu
c3RhbmNlSm9iamVjdCgpCit7CisgICAgbV9pbnN0YW5jZSA9IDA7CisgICAgZGVsZXRlIG1fY2xh
c3M7Cit9CisKKyNkZWZpbmUgTlVNX0xPQ0FMX1JFRlMgNjQKKwordm9pZCBKYXZhSW5zdGFuY2VK
b2JqZWN0OjpiZWdpbigpCit7CisgICAgZ2V0Sk5JRW52KCktPlB1c2hMb2NhbEZyYW1lKE5VTV9M
T0NBTF9SRUZTKTsKK30KKwordm9pZCBKYXZhSW5zdGFuY2VKb2JqZWN0OjplbmQoKQoreworICAg
IGdldEpOSUVudigpLT5Qb3BMb2NhbEZyYW1lKDApOworfQorCitKYXZhQ2xhc3MqIEphdmFJbnN0
YW5jZUpvYmplY3Q6OmdldENsYXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2xhc3MpCisgICAg
ICAgIG1fY2xhc3MgPSBuZXcgSmF2YUNsYXNzSm9iamVjdChqYXZhSW5zdGFuY2UoKSk7CisgICAg
cmV0dXJuIG1fY2xhc3M7Cit9CisKK0phdmFWYWx1ZSBKYXZhSW5zdGFuY2VKb2JqZWN0OjppbnZv
a2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCogbWV0aG9kLCBKYXZhVmFsdWUqIGFyZ3MpCit7Cisg
ICAgQVNTRVJUKGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChtZXRob2QtPm5hbWUoKS51dGY4KCku
ZGF0YSgpKS5maW5kKG1ldGhvZCkgIT0gbm90Rm91bmQpOworICAgIHVuc2lnbmVkIGludCBudW1Q
YXJhbXMgPSBtZXRob2QtPm51bVBhcmFtZXRlcnMoKTsKKyAgICBPd25BcnJheVB0cjxqdmFsdWU+
IGp2YWx1ZUFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyBqdmFsdWVbbnVtUGFyYW1zXSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAganZh
bHVlQXJnc1tpXSA9IGphdmFWYWx1ZVRvSnZhbHVlKGFyZ3NbaV0pOworICAgIGp2YWx1ZSByZXN1
bHQgPSBjYWxsSk5JTWV0aG9kKGphdmFJbnN0YW5jZSgpLCBtZXRob2QtPnJldHVyblR5cGUoKSwg
bWV0aG9kLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbWV0aG9kLT5zaWduYXR1cmUoKSwganZhbHVl
QXJncy5nZXQoKSk7CisgICAgcmV0dXJuIGp2YWx1ZVRvSmF2YVZhbHVlKHJlc3VsdCwgbWV0aG9k
LT5yZXR1cm5UeXBlKCkpOworfQorCitKYXZhVmFsdWUgSmF2YUluc3RhbmNlSm9iamVjdDo6Z2V0
RmllbGQoY29uc3QgSmF2YUZpZWxkKiBmaWVsZCkKK3sKKyAgICBBU1NFUlQoZ2V0Q2xhc3MoKS0+
ZmllbGROYW1lZChmaWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpID09IGZpZWxkKTsKKyAgICBy
ZXR1cm4ganZhbHVlVG9KYXZhVmFsdWUoZ2V0Sk5JRmllbGQoamF2YUluc3RhbmNlKCksIGZpZWxk
LT50eXBlKCksIGZpZWxkLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZmllbGQtPnR5cGVDbGFzc05h
bWUoKSksIGZpZWxkLT50eXBlKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VK
b2JqZWN0VjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9i
amVjdFY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2ODdkZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNl
Sm9iamVjdFY4LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
MjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSmF2
YUluc3RhbmNlSm9iamVjdFY4X2gKKyNkZWZpbmUgSmF2YUluc3RhbmNlSm9iamVjdFY4X2gKKwor
I2lmIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKKyNpbmNs
dWRlICJKYXZhSW5zdGFuY2VWOC5oIgorI2luY2x1ZGUgIkpvYmplY3RXcmFwcGVyLmgiCisKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFj
ZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBKYXZhSW5zdGFuY2VKb2Jq
ZWN0IDogcHVibGljIEphdmFJbnN0YW5jZSB7CitwdWJsaWM6CisgICAgSmF2YUluc3RhbmNlSm9i
amVjdChqb2JqZWN0IGluc3RhbmNlKTsKKyAgICB2aXJ0dWFsIH5KYXZhSW5zdGFuY2VKb2JqZWN0
KCk7CisKKyAgICAvLyBKYXZhSW5zdGFuY2UgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIEph
dmFDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VN
ZXRob2QoY29uc3QgSmF2YU1ldGhvZCosIEphdmFWYWx1ZSogYXJncyk7CisgICAgdmlydHVhbCBK
YXZhVmFsdWUgZ2V0RmllbGQoY29uc3QgSmF2YUZpZWxkKik7CisgICAgdmlydHVhbCB2b2lkIGJl
Z2luKCk7CisgICAgdmlydHVhbCB2b2lkIGVuZCgpOworCisgICAgam9iamVjdCBqYXZhSW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLT5tX2luc3RhbmNlOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1faW5zdGFuY2U7CisgICAgbXV0YWJsZSBK
YXZhQ2xhc3MqIG1fY2xhc3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2VuZGlm
IC8vIEphdmFJbnN0YW5jZUpvYmplY3RWOF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlVjguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
ZGYyYmYzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUlu
c3RhbmNlVjguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhSW5zdGFuY2VWOC5oIgotCi0j
aWYgRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIK
LSNpbmNsdWRlICJKYXZhQ2xhc3NKb2JqZWN0VjguaCIKLSNpbmNsdWRlICJKYXZhRmllbGRWOC5o
IgotI2luY2x1ZGUgIkphdmFNZXRob2QuaCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6
QmluZGluZ3M7Ci0KLUphdmFJbnN0YW5jZTo6SmF2YUluc3RhbmNlKGpvYmplY3QgaW5zdGFuY2Up
Ci17Ci0gICAgbV9pbnN0YW5jZSA9IG5ldyBKb2JqZWN0V3JhcHBlcihpbnN0YW5jZSk7Ci0gICAg
bV9jbGFzcyA9IDA7Ci19Ci0KLUphdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSgpCi17Ci0gICAg
bV9pbnN0YW5jZSA9IDA7Ci0gICAgZGVsZXRlIG1fY2xhc3M7Ci19Ci0KLSNkZWZpbmUgTlVNX0xP
Q0FMX1JFRlMgNjQKLQotdm9pZCBKYXZhSW5zdGFuY2U6OnZpcnR1YWxCZWdpbigpCi17Ci0gICAg
Z2V0Sk5JRW52KCktPlB1c2hMb2NhbEZyYW1lKE5VTV9MT0NBTF9SRUZTKTsKLX0KLQotdm9pZCBK
YXZhSW5zdGFuY2U6OnZpcnR1YWxFbmQoKQotewotICAgIGdldEpOSUVudigpLT5Qb3BMb2NhbEZy
YW1lKDApOwotfQotCi1KYXZhQ2xhc3MqIEphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAot
ewotICAgIGlmICghbV9jbGFzcykKLSAgICAgICAgbV9jbGFzcyA9IG5ldyBKYXZhQ2xhc3NKb2Jq
ZWN0KGphdmFJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gbV9jbGFzczsKLX0KLQotSmF2YVZhbHVl
IEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKGNvbnN0IEphdmFNZXRob2QqIG1ldGhvZCwgSmF2
YVZhbHVlKiBhcmdzKQotewotICAgIEFTU0VSVChnZXRDbGFzcygpLT5tZXRob2RzTmFtZWQobWV0
aG9kLT5uYW1lKCkudXRmOCgpLmRhdGEoKSkuZmluZChtZXRob2QpICE9IG5vdEZvdW5kKTsKLSAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gbWV0aG9kLT5udW1QYXJhbWV0ZXJzKCk7Ci0gICAg
T3duQXJyYXlQdHI8anZhbHVlPiBqdmFsdWVBcmdzID0gYWRvcHRBcnJheVB0cihuZXcganZhbHVl
W251bVBhcmFtc10pOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1z
OyArK2kpCi0gICAgICAgIGp2YWx1ZUFyZ3NbaV0gPSBqYXZhVmFsdWVUb0p2YWx1ZShhcmdzW2ld
KTsKLSAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZChqYXZhSW5zdGFuY2UoKSwgbWV0
aG9kLT5yZXR1cm5UeXBlKCksIG1ldGhvZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1ldGhvZC0+
c2lnbmF0dXJlKCksIGp2YWx1ZUFyZ3MuZ2V0KCkpOwotICAgIHJldHVybiBqdmFsdWVUb0phdmFW
YWx1ZShyZXN1bHQsIG1ldGhvZC0+cmV0dXJuVHlwZSgpKTsKLX0KLQotSmF2YVZhbHVlIEphdmFJ
bnN0YW5jZTo6Z2V0RmllbGQoY29uc3QgSmF2YUZpZWxkKiBmaWVsZCkKLXsKLSAgICBBU1NFUlQo
Z2V0Q2xhc3MoKS0+ZmllbGROYW1lZChmaWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpID09IGZp
ZWxkKTsKLSAgICByZXR1cm4ganZhbHVlVG9KYXZhVmFsdWUoZ2V0Sk5JRmllbGQoamF2YUluc3Rh
bmNlKCksIGZpZWxkLT50eXBlKCksIGZpZWxkLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZmllbGQt
PnR5cGVDbGFzc05hbWUoKSksIGZpZWxkLT50eXBlKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9K
YXZhSW5zdGFuY2VWOC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFu
Y2VWOC5oCmluZGV4IGIxMTUwZjguLjc0MzZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4LmgKQEAgLTI5LDEzICsyOSw4IEBACiAKICNpZiBFTkFC
TEUoSkFWQV9CUklER0UpCiAKLSNpbmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVkZSAiSmF2
YVZhbHVlVjguaCIKLSNpbmNsdWRlICJKb2JqZWN0V3JhcHBlci5oIgotI2luY2x1ZGUgIm5wcnVu
dGltZS5oIgotCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTQ5LDI4ICs0NCwxOSBAQCBjbGFz
cyBKYXZhTWV0aG9kOwogCiBjbGFzcyBKYXZhSW5zdGFuY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxK
YXZhSW5zdGFuY2U+IHsKIHB1YmxpYzoKLSAgICBKYXZhSW5zdGFuY2Uoam9iamVjdCBpbnN0YW5j
ZSk7Ci0gICAgdmlydHVhbCB+SmF2YUluc3RhbmNlKCk7CisgICAgdmlydHVhbCB+SmF2YUluc3Rh
bmNlKCkge30KIAotICAgIEphdmFDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEphdmFDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdCA9IDA7CiAgICAgLy8gYXJncyBtdXN0IGJlIGFu
IGFycmF5IG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZgog
ICAgIC8vIGFyZ3VtZW50cyBleHBlY3RlZCBieSB0aGUgbWV0aG9kLgotICAgIEphdmFWYWx1ZSBp
bnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCosIEphdmFWYWx1ZSogYXJncyk7Ci0gICAgSmF2
YVZhbHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCopOwotICAgIGpvYmplY3QgamF2YUluc3Rh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsgfQorICAgIHZpcnR1
YWwgSmF2YVZhbHVlIGludm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kKiwgSmF2YVZhbHVlKiBh
cmdzKSA9IDA7CisgICAgdmlydHVhbCBKYXZhVmFsdWUgZ2V0RmllbGQoY29uc3QgSmF2YUZpZWxk
KikgPSAwOwogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYmVmb3JlIGFuZCBh
ZnRlciB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaW50bwogICAgIC8vIHRoZSBuYXRpdmUgaW1wbGVt
ZW50YXRpb25zLiAgVGhleSBjYW4gYmUgdXNlZCB0byBlc3RhYmxpc2ggYW5kIGNsZWFudXAKICAg
ICAvLyBhbnkgbmVlZGVkIHN0YXRlLgotICAgIHZvaWQgYmVnaW4oKSB7IHZpcnR1YWxCZWdpbigp
OyB9Ci0gICAgdm9pZCBlbmQoKSB7IHZpcnR1YWxFbmQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPEpvYmplY3RXcmFwcGVyPiBtX2luc3RhbmNlOwotICAgIG11dGFibGUgSmF2YUNsYXNz
KiBtX2NsYXNzOwotCi0gICAgdmlydHVhbCB2b2lkIHZpcnR1YWxCZWdpbigpOwotICAgIHZpcnR1
YWwgdm9pZCB2aXJ0dWFsRW5kKCk7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBlbmQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88249</attachid>
            <date>2011-04-05 09:16:16 -0700</date>
            <delta_ts>2011-04-05 09:44:52 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>javaInstanceInterface.txt</filename>
            <type>text/plain</type>
            <size>16056</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tayBiL1NvdXJj
ZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawppbmRleCBmZGJmYzhmLi45ZTQzOGU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsKKysrIGIvU291
cmNlL1dlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCkBAIC0xODAsNiArMTgwLDYgQEAgTE9D
QUxfU1JDX0ZJTEVTICs9IFwKIAlicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcCBc
CiAJYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguY3BwIFwKIAlicmlkZ2Uvam5pL3Y4
L0phdmFGaWVsZEpvYmplY3RWOC5jcHAgXAotCWJyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjgu
Y3BwIFwKKwlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAgXAogCWJyaWRn
ZS9qbmkvdjgvSmF2YU5QT2JqZWN0LmNwcCBcCiAJYnJpZGdlL2puaS92OC9Kb2JqZWN0V3JhcHBl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBlNGViMGU2Li5mYzYxZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzkgQEAKKzIwMTEtMDQtMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEphdmFJ
bnN0YW5jZSBzaG91bGQgYmUgYSBwdXJlIGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUzODMKKworICAgICAgICBUaGlzIHBhdGNoIGZp
eGVzIEphdmFJbnN0YW5jZSBmb3IgVjggb25seS4KKworICAgICAgICBJdCBmYWN0b3JzIG91dCBh
IEphdmFJbnN0YW5jZSBpbnRlcmZhY2Ugd2hpY2ggZG9lcyBub3QgdXNlIEpOSQorICAgICAgICB0
eXBlcy4gVGhpcyB3aWxsIGFsbG93IHRoZSBKYXZhIGJyaWRnZSB0byBiZSB1c2VkIHdpdGggb2Jq
ZWN0cworICAgICAgICB0aGF0IGRvbid0IHVzZSBKTkkgZGlyZWN0bHkuIFRoZSBleGlzdGluZyBq
b2JqZWN0LWJhY2tlZAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBpcyBtb3ZlZCB0byBhIG5ldyBK
YXZhSW5zdGFuY2VKb2JqZWN0IGNsYXNzIHdoaWNoCisgICAgICAgIGltcGxlbWVudHMgdGhlIGlu
dGVyZmFjZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAg
ICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvSm9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKiBicmlkZ2Uv
am5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Omp2
YWx1ZVRvSmF2YVZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmphdmFWYWx1ZVRvSnZh
bHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHA6
CisgICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjpKYXZhSW5zdGFuY2VKb2JqZWN0KToKKyAg
ICAgICAgKEphdmFJbnN0YW5jZUpvYmplY3Q6On5KYXZhSW5zdGFuY2VKb2JqZWN0KToKKyAgICAg
ICAgKEphdmFJbnN0YW5jZUpvYmplY3Q6OmJlZ2luKToKKyAgICAgICAgKEphdmFJbnN0YW5jZUpv
YmplY3Q6OmVuZCk6CisgICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjpnZXRDbGFzcyk6Cisg
ICAgICAgIChKYXZhSW5zdGFuY2VKb2JqZWN0OjppbnZva2VNZXRob2QpOgorICAgICAgICAoSmF2
YUluc3RhbmNlSm9iamVjdDo6Z2V0RmllbGQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2
YUluc3RhbmNlSm9iamVjdFY4Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlVjguaC4KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0
YW5jZUpvYmplY3Q6OmphdmFJbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZh
SW5zdGFuY2VWOC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjp+SmF2
YUluc3RhbmNlKToKKwogMjAxMS0wNC0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IGI1MTU2OTIuLjY1N2Q1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxOTks
NyArMjE5OSw4IEBACiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0
VjguY3BwJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5o
JywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFY4LmgnLAotICAgICAgICAg
ICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguY3BwJywKKyAgICAgICAgICAgICdicmlk
Z2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAnLAorICAgICAgICAgICAgJ2JyaWRn
ZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlVjguaCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZh
TlBPYmplY3RWOC5jcHAnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0
VjguaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFw
cGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmgKaW5kZXgg
NjNmYmZmYy4uOWNjNGIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9K
b2JqZWN0V3JhcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSm9iamVjdFdy
YXBwZXIuaApAQCAtNDAsNiArNDAsNyBAQCBmcmllbmQgY2xhc3MgSmF2YUFycmF5OwogZnJpZW5k
IGNsYXNzIEphdmFGaWVsZDsKIGZyaWVuZCBjbGFzcyBKYXZhRmllbGRKb2JqZWN0OwogZnJpZW5k
IGNsYXNzIEphdmFJbnN0YW5jZTsKK2ZyaWVuZCBjbGFzcyBKYXZhSW5zdGFuY2VKb2JqZWN0Owog
CiBwdWJsaWM6CiAgICAgam9iamVjdCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFu
Y2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSk5JVXRpbGl0
eVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAKaW5kZXggODg5MDJhNS4uYzk3MTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKIAotI2luY2x1ZGUgIkphdmFJbnN0YW5jZVY4Lmgi
CisjaW5jbHVkZSAiSmF2YUluc3RhbmNlSm9iamVjdFY4LmgiCiAjaW5jbHVkZSAiSmF2YU5QT2Jq
ZWN0VjguaCIKICNpbmNsdWRlICJKYXZhVmFsdWVWOC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTI0Miw3ICsyNDIsNyBAQCBKYXZhVmFsdWUganZhbHVlVG9KYXZhVmFsdWUo
Y29uc3QganZhbHVlJiB2YWx1ZSwgY29uc3QgSmF2YVR5cGUmIHR5cGUpCiAgICAgY2FzZSBKYXZh
VHlwZVZvaWQ6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0gICAg
ICAgIHJlc3VsdC5tX29iamVjdFZhbHVlID0gbmV3IEphdmFJbnN0YW5jZSh2YWx1ZS5sKTsKKyAg
ICAgICAgcmVzdWx0Lm1fb2JqZWN0VmFsdWUgPSBuZXcgSmF2YUluc3RhbmNlSm9iamVjdCh2YWx1
ZS5sKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKYXZhVHlwZVN0cmluZzoKICAgICAgICAg
ewpAQCAtMjkxLDggKzI5MSwxMSBAQCBqdmFsdWUgamF2YVZhbHVlVG9KdmFsdWUoY29uc3QgSmF2
YVZhbHVlJiB2YWx1ZSkKICAgICBjYXNlIEphdmFUeXBlVm9pZDoKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAgaWYgKHZhbHVlLm1fb2JqZWN0VmFsdWUp
Ci0gICAgICAgICAgICByZXN1bHQubCA9IHZhbHVlLm1fb2JqZWN0VmFsdWUtPmphdmFJbnN0YW5j
ZSgpOworICAgICAgICBpZiAodmFsdWUubV9vYmplY3RWYWx1ZSkgeworICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IEphdmFJbnN0YW5jZUpvYmplY3QsIHNvIHdlIGtu
b3cgdGhlCisgICAgICAgICAgICAvLyBkZXJpdmVkIHR5cGUgb2YgdGhlIG9iamVjdC4KKyAgICAg
ICAgICAgIHJlc3VsdC5sID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlSm9iamVjdCo+KHZhbHVl
Lm1fb2JqZWN0VmFsdWUuZ2V0KCkpLT5qYXZhSW5zdGFuY2UoKTsKKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEphdmFUeXBlU3RyaW5nOgogICAgICAgICAvLyBUaGlzIGNyZWF0
ZXMgYSBsb2NhbCByZWZlcmVuY2UgdG8gYSBuZXcgU3RyaW5nIG9iamVjdCwgd2hpY2ggd2lsbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2Jq
ZWN0VjguY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2Jq
ZWN0VjguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjFlZmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5j
ZUpvYmplY3RWOC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKYXZhSW5zdGFuY2VKb2JqZWN0VjguaCIKKworI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCisjaW5j
bHVkZSAiSmF2YUNsYXNzSm9iamVjdFY4LmgiCisjaW5jbHVkZSAiSmF2YUZpZWxkVjguaCIKKyNp
bmNsdWRlICJKYXZhTWV0aG9kLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7CisKK0phdmFJbnN0YW5jZUpvYmplY3Q6
OkphdmFJbnN0YW5jZUpvYmplY3Qoam9iamVjdCBpbnN0YW5jZSkKKyAgICA6IG1faW5zdGFuY2Uo
bmV3IEpvYmplY3RXcmFwcGVyKGluc3RhbmNlKSkKK3sKK30KKworI2RlZmluZSBOVU1fTE9DQUxf
UkVGUyA2NAorCit2b2lkIEphdmFJbnN0YW5jZUpvYmplY3Q6OmJlZ2luKCkKK3sKKyAgICBnZXRK
TklFbnYoKS0+UHVzaExvY2FsRnJhbWUoTlVNX0xPQ0FMX1JFRlMpOworfQorCit2b2lkIEphdmFJ
bnN0YW5jZUpvYmplY3Q6OmVuZCgpCit7CisgICAgZ2V0Sk5JRW52KCktPlBvcExvY2FsRnJhbWUo
MCk7Cit9CisKK0phdmFDbGFzcyogSmF2YUluc3RhbmNlSm9iamVjdDo6Z2V0Q2xhc3MoKSBjb25z
dAoreworICAgIGlmICghbV9jbGFzcykKKyAgICAgICAgbV9jbGFzcyA9IGFkb3B0UHRyKG5ldyBK
YXZhQ2xhc3NKb2JqZWN0KGphdmFJbnN0YW5jZSgpKSk7CisgICAgcmV0dXJuIG1fY2xhc3MuZ2V0
KCk7Cit9CisKK0phdmFWYWx1ZSBKYXZhSW5zdGFuY2VKb2JqZWN0OjppbnZva2VNZXRob2QoY29u
c3QgSmF2YU1ldGhvZCogbWV0aG9kLCBKYXZhVmFsdWUqIGFyZ3MpCit7CisgICAgQVNTRVJUKGdl
dENsYXNzKCktPm1ldGhvZHNOYW1lZChtZXRob2QtPm5hbWUoKS51dGY4KCkuZGF0YSgpKS5maW5k
KG1ldGhvZCkgIT0gbm90Rm91bmQpOworICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSBtZXRo
b2QtPm51bVBhcmFtZXRlcnMoKTsKKyAgICBPd25BcnJheVB0cjxqdmFsdWU+IGp2YWx1ZUFyZ3Mg
PSBhZG9wdEFycmF5UHRyKG5ldyBqdmFsdWVbbnVtUGFyYW1zXSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAganZhbHVlQXJnc1tpXSA9
IGphdmFWYWx1ZVRvSnZhbHVlKGFyZ3NbaV0pOworICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5J
TWV0aG9kKGphdmFJbnN0YW5jZSgpLCBtZXRob2QtPnJldHVyblR5cGUoKSwgbWV0aG9kLT5uYW1l
KCkudXRmOCgpLmRhdGEoKSwgbWV0aG9kLT5zaWduYXR1cmUoKSwganZhbHVlQXJncy5nZXQoKSk7
CisgICAgcmV0dXJuIGp2YWx1ZVRvSmF2YVZhbHVlKHJlc3VsdCwgbWV0aG9kLT5yZXR1cm5UeXBl
KCkpOworfQorCitKYXZhVmFsdWUgSmF2YUluc3RhbmNlSm9iamVjdDo6Z2V0RmllbGQoY29uc3Qg
SmF2YUZpZWxkKiBmaWVsZCkKK3sKKyAgICBBU1NFUlQoZ2V0Q2xhc3MoKS0+ZmllbGROYW1lZChm
aWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpID09IGZpZWxkKTsKKyAgICByZXR1cm4ganZhbHVl
VG9KYXZhVmFsdWUoZ2V0Sk5JRmllbGQoamF2YUluc3RhbmNlKCksIGZpZWxkLT50eXBlKCksIGZp
ZWxkLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZmllbGQtPnR5cGVDbGFzc05hbWUoKSksIGZpZWxk
LT50eXBlKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0VjguaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NjAzNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4LmgK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFu
ZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSmF2YUluc3RhbmNlSm9i
amVjdFY4X2gKKyNkZWZpbmUgSmF2YUluc3RhbmNlSm9iamVjdFY4X2gKKworI2lmIEVOQUJMRShK
QVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKKyNpbmNsdWRlICJKYXZhSW5z
dGFuY2VWOC5oIgorI2luY2x1ZGUgIkpvYmplY3RXcmFwcGVyLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OworCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworY2xhc3MgSmF2
YUluc3RhbmNlSm9iamVjdCA6IHB1YmxpYyBKYXZhSW5zdGFuY2UgeworcHVibGljOgorICAgIEph
dmFJbnN0YW5jZUpvYmplY3Qoam9iamVjdCBpbnN0YW5jZSk7CisKKyAgICAvLyBKYXZhSW5zdGFu
Y2UgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIEphdmFDbGFzcyogZ2V0Q2xhc3MoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCos
IEphdmFWYWx1ZSogYXJncyk7CisgICAgdmlydHVhbCBKYXZhVmFsdWUgZ2V0RmllbGQoY29uc3Qg
SmF2YUZpZWxkKik7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luKCk7CisgICAgdmlydHVhbCB2b2lk
IGVuZCgpOworCisgICAgam9iamVjdCBqYXZhSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2lu
c3RhbmNlLT5tX2luc3RhbmNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBSZWZQdHI8Sm9iamVjdFdy
YXBwZXI+IG1faW5zdGFuY2U7CisgICAgbXV0YWJsZSBPd25QdHI8SmF2YUNsYXNzPiBtX2NsYXNz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBKYXZhSW5zdGFuY2VK
b2JqZWN0VjhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZh
SW5zdGFuY2VWOC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5j
ZVY4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMmJmMy4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIw
MTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSmF2YUluc3RhbmNlVjguaCIKLQotI2lmIEVOQUJMRShKQVZBX0JS
SURHRSkKLQotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCi0jaW5jbHVkZSAiSmF2YUNs
YXNzSm9iamVjdFY4LmgiCi0jaW5jbHVkZSAiSmF2YUZpZWxkVjguaCIKLSNpbmNsdWRlICJKYXZh
TWV0aG9kLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwotCi1KYXZh
SW5zdGFuY2U6OkphdmFJbnN0YW5jZShqb2JqZWN0IGluc3RhbmNlKQotewotICAgIG1faW5zdGFu
Y2UgPSBuZXcgSm9iamVjdFdyYXBwZXIoaW5zdGFuY2UpOwotICAgIG1fY2xhc3MgPSAwOwotfQot
Ci1KYXZhSW5zdGFuY2U6On5KYXZhSW5zdGFuY2UoKQotewotICAgIG1faW5zdGFuY2UgPSAwOwot
ICAgIGRlbGV0ZSBtX2NsYXNzOwotfQotCi0jZGVmaW5lIE5VTV9MT0NBTF9SRUZTIDY0Ci0KLXZv
aWQgSmF2YUluc3RhbmNlOjp2aXJ0dWFsQmVnaW4oKQotewotICAgIGdldEpOSUVudigpLT5QdXNo
TG9jYWxGcmFtZShOVU1fTE9DQUxfUkVGUyk7Ci19Ci0KLXZvaWQgSmF2YUluc3RhbmNlOjp2aXJ0
dWFsRW5kKCkKLXsKLSAgICBnZXRKTklFbnYoKS0+UG9wTG9jYWxGcmFtZSgwKTsKLX0KLQotSmF2
YUNsYXNzKiBKYXZhSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY2xh
c3MpCi0gICAgICAgIG1fY2xhc3MgPSBuZXcgSmF2YUNsYXNzSm9iamVjdChqYXZhSW5zdGFuY2Uo
KSk7Ci0gICAgcmV0dXJuIG1fY2xhc3M7Ci19Ci0KLUphdmFWYWx1ZSBKYXZhSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kKiBtZXRob2QsIEphdmFWYWx1ZSogYXJncykKLXsK
LSAgICBBU1NFUlQoZ2V0Q2xhc3MoKS0+bWV0aG9kc05hbWVkKG1ldGhvZC0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCkpLmZpbmQobWV0aG9kKSAhPSBub3RGb3VuZCk7Ci0gICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcyA9IG1ldGhvZC0+bnVtUGFyYW1ldGVycygpOwotICAgIE93bkFycmF5UHRyPGp2YWx1
ZT4ganZhbHVlQXJncyA9IGFkb3B0QXJyYXlQdHIobmV3IGp2YWx1ZVtudW1QYXJhbXNdKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICBq
dmFsdWVBcmdzW2ldID0gamF2YVZhbHVlVG9KdmFsdWUoYXJnc1tpXSk7Ci0gICAganZhbHVlIHJl
c3VsdCA9IGNhbGxKTklNZXRob2QoamF2YUluc3RhbmNlKCksIG1ldGhvZC0+cmV0dXJuVHlwZSgp
LCBtZXRob2QtPm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtZXRob2QtPnNpZ25hdHVyZSgpLCBqdmFs
dWVBcmdzLmdldCgpKTsKLSAgICByZXR1cm4ganZhbHVlVG9KYXZhVmFsdWUocmVzdWx0LCBtZXRo
b2QtPnJldHVyblR5cGUoKSk7Ci19Ci0KLUphdmFWYWx1ZSBKYXZhSW5zdGFuY2U6OmdldEZpZWxk
KGNvbnN0IEphdmFGaWVsZCogZmllbGQpCi17Ci0gICAgQVNTRVJUKGdldENsYXNzKCktPmZpZWxk
TmFtZWQoZmllbGQtPm5hbWUoKS51dGY4KCkuZGF0YSgpKSA9PSBmaWVsZCk7Ci0gICAgcmV0dXJu
IGp2YWx1ZVRvSmF2YVZhbHVlKGdldEpOSUZpZWxkKGphdmFJbnN0YW5jZSgpLCBmaWVsZC0+dHlw
ZSgpLCBmaWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGZpZWxkLT50eXBlQ2xhc3NOYW1lKCkp
LCBmaWVsZC0+dHlwZSgpKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaAppbmRleCBiMTE1
MGY4Li43NDM2ZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0ph
dmFJbnN0YW5jZVY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5z
dGFuY2VWOC5oCkBAIC0yOSwxMyArMjksOCBAQAogCiAjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQog
Ci0jaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkphdmFWYWx1ZVY4LmgiCi0jaW5j
bHVkZSAiSm9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKLQogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV1RGOwogCkBAIC00OSwyOCArNDQsMTkgQEAgY2xhc3MgSmF2YU1ldGhvZDsKIAog
Y2xhc3MgSmF2YUluc3RhbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SmF2YUluc3RhbmNlPiB7CiBw
dWJsaWM6Ci0gICAgSmF2YUluc3RhbmNlKGpvYmplY3QgaW5zdGFuY2UpOwotICAgIHZpcnR1YWwg
fkphdmFJbnN0YW5jZSgpOworICAgIHZpcnR1YWwgfkphdmFJbnN0YW5jZSgpIHt9CiAKLSAgICBK
YXZhQ2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CisgICAgdmlydHVhbCBKYXZhQ2xhc3MqIGdldENs
YXNzKCkgY29uc3QgPSAwOwogICAgIC8vIGFyZ3MgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGgg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YKICAgICAvLyBhcmd1bWVudHMg
ZXhwZWN0ZWQgYnkgdGhlIG1ldGhvZC4KLSAgICBKYXZhVmFsdWUgaW52b2tlTWV0aG9kKGNvbnN0
IEphdmFNZXRob2QqLCBKYXZhVmFsdWUqIGFyZ3MpOwotICAgIEphdmFWYWx1ZSBnZXRGaWVsZChj
b25zdCBKYXZhRmllbGQqKTsKLSAgICBqb2JqZWN0IGphdmFJbnN0YW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdGFuY2UtPm1faW5zdGFuY2U7IH0KKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZv
a2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCosIEphdmFWYWx1ZSogYXJncykgPSAwOworICAgIHZp
cnR1YWwgSmF2YVZhbHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCopID0gMDsKIAogICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1haW4gZW50
cnkgcG9pbnRzIGludG8KICAgICAvLyB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9ucy4gIFRoZXkg
Y2FuIGJlIHVzZWQgdG8gZXN0YWJsaXNoIGFuZCBjbGVhbnVwCiAgICAgLy8gYW55IG5lZWRlZCBz
dGF0ZS4KLSAgICB2b2lkIGJlZ2luKCkgeyB2aXJ0dWFsQmVnaW4oKTsgfQotICAgIHZvaWQgZW5k
KCkgeyB2aXJ0dWFsRW5kKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxKb2JqZWN0V3Jh
cHBlcj4gbV9pbnN0YW5jZTsKLSAgICBtdXRhYmxlIEphdmFDbGFzcyogbV9jbGFzczsKLQotICAg
IHZpcnR1YWwgdm9pZCB2aXJ0dWFsQmVnaW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlydHVhbEVu
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5k
KCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MK
</data>
<flag name="review"
          id="80727"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>