<?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>57859</bug_id>
          
          <creation_ts>2011-04-05 10:19:42 -0700</creation_ts>
          <short_desc>Removes V8&apos;s JavaInstanceJobject, JavaClassJobject and JavaFieldJobject.</short_desc>
          <delta_ts>2011-08-09 05:00:45 -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>55383</dependson>
    
    <dependson>55786</dependson>
          <blocked>57230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379704</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-05 10:19:42 -0700</bug_when>
    <thetext>This is required to add Chromium WebKit API methods for injecting Java objects into JavaScript. See Bug 57230.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379748</commentid>
    <comment_count>1</comment_count>
      <attachid>88281</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-05 11:06:34 -0700</bug_when>
    <thetext>Created attachment 88281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379750</commentid>
    <comment_count>2</comment_count>
      <attachid>88281</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-05 11:12:02 -0700</bug_when>
    <thetext>Comment on attachment 88281
Patch

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

&gt; Source/WebCore/bridge/jni/v8/JavaFieldProxyV8.h:51
&gt; +    static PassRefPtr&lt;JavaFieldProxy&gt; create(int id, String name, String typeClassName) { return adoptRef(new JavaFieldProxy(id, name, typeClassName)); }
&gt; +
&gt; +    // JavaField implementation
&gt; +    virtual String name() const { return m_name; }
&gt; +    virtual const char* typeClassName() const { return m_typeClassName.utf8().data(); }
&gt; +    virtual JavaType type() const { return javaTypeFromClassName(m_typeClassName.utf8().data()); }
&gt; +
&gt; +    int id() const { return m_id; }

Can you move these out of a decl? You can place them in the header below the class if you want to inline them.

&gt; Source/WebCore/bridge/jni/v8/JavaInstanceProxyV8.h:50
&gt; +    virtual JavaClass* getClass() const { return &amp;m_class; }
&gt; +    virtual JavaValue invokeMethod(const JavaMethod* method, JavaValue* args) { return invokeMethod(static_cast&lt;const JavaMethodProxy*&gt;(method), args); }
&gt; +    virtual JavaValue getField(const JavaField* field) { return getField(static_cast&lt;const JavaFieldProxy*&gt;(field)); }
&gt; +    virtual void begin() {}
&gt; +    virtual void end() {}
&gt; +
&gt; +    void addMethod(int id, bool isStatic, String name, String returnTypeClassName, const Vector&lt;String&gt; &amp;parameters) { return m_class.addMethod(id, isStatic, name, returnTypeClassName, parameters); }
&gt; +    void addField(int id, String name, String typeClassName) { m_class.addField(id, name, typeClassName); }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380101</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 21:27:07 -0700</bug_when>
    <thetext>Could you please describe the reasons in a little more detail?

Java objects are obviously exposed to JavaScript already, so why is another layer of indirection needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380286</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 05:44:58 -0700</bug_when>
    <thetext>&gt; Can you move these out of a decl? You can place them in the header below the class if you want to inline them.
Done

&gt; Ditto.
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380289</commentid>
    <comment_count>5</comment_count>
      <attachid>88402</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 05:52:39 -0700</bug_when>
    <thetext>Created attachment 88402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380312</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 06:32:07 -0700</bug_when>
    <thetext>&gt; Could you please describe the reasons in a little more detail?
There&apos;s a description in Bug 57230, the umbrella bug for this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380416</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-06 08:46:25 -0700</bug_when>
    <thetext>&gt; There&apos;s a description in Bug 57230, the umbrella bug for this feature.

I don&apos;t think that this is a correct approach. A remote object has pretty much nothing in common with a JavaObject implemented over JNI - but it&apos;s almost the same as a remote NPAPI object. In fact, Java is gravitating towards being implemented via an NPAPI plug-in, and the new version of JNI is tailored to that.

What you need seems to be implementing remote objects in Java, which is OK, but they don&apos;t need to be JavaObjects on WebCore side.

It seems that you&apos;ve been working in this direction for a while - I&apos;m sorry that I only realized it now what you are trying to do.

+    // FIXME: This ugliness is required because we&apos;re not able to use OwnPtr in
+    // a HashMap. An alternative would be to use RefPtr, but making JavaMethod

You can probably use deleteAllValues() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380444</commentid>
    <comment_count>8</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-06 09:06:54 -0700</bug_when>
    <thetext>&gt; What you need seems to be implementing remote objects in Java, which is OK, but
&gt; they don&apos;t need to be JavaObjects on WebCore side.
I considered an approach like this. Rather than use WebCore&apos;s JavaInstance etc, we could expose an injected NPAPI object directly to the embedder.

The advantage of going though JavaInstance is that we can re-use all of the existing JavaScript-Java conversions already in WebCore. Exposing an NPAPI object to the embedder would mean re-implementing all of this logic for each platform. Similarly, JavaInstance provides a common interface for both JSC and V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381325</commentid>
    <comment_count>9</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-07 07:31:11 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; What you need seems to be implementing remote objects in Java, which is OK, but
&gt; &gt; they don&apos;t need to be JavaObjects on WebCore side.
&gt; I considered an approach like this. Rather than use WebCore&apos;s JavaInstance etc, we could expose an injected NPAPI object directly to the embedder.
&gt; 
&gt; The advantage of going though JavaInstance is that we can re-use all of the existing JavaScript-Java conversions already in WebCore. Exposing an NPAPI object to the embedder would mean re-implementing all of this logic for each platform. Similarly, JavaInstance provides a common interface for both JSC and V8.

This makes sense to me given that re-writing the conversion logic can be quite an error-prone process. If Alexey has no objections to continuing with this approach, this change looks otherwise fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381404</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 09:28:26 -0700</bug_when>
    <thetext>I think that implementation of remote Java objects should either be common with other remote objects, or it should at least be similar to how out of process NPAPI plug-ins are implemented.

The former can be challenging, especially since some of out of process NPAPI plug-in code is not in open source. But the latter is something that should be considered if we don&apos;t want our heads explode.

I can see several differences with NPAPI here:

1) WebKit IPC is implemented in WebKit, not in WebCore, so NPAPI remote objects also live in WebKit. With WebKit2, that is now cross-platform of course (for all platforms that adopt WebKit2). This distinction may seem minor, but I don&apos;t see what other platforms would do with proxy Java classes that are being added to WebCore here. And if it&apos;s only for Android, it should live in Android WebKit.

2) NPAPI objects don&apos;t have a common class for local and remote objects. I don&apos;t see any reason for Java to have a common class other than code sharing - but inheritance is an anti-pattern for code sharing. Since these objects behave so differently, I think that JavaInstance and ProxyJavaInstance should be separate JSC::Bindings::Instance subclasses. This objection is more about bug 55383, in fact.

3) If I&apos;m reading this patch correctly, it uses yet another level of inheritance to actually implement IPC (e.g. invokeMethod is pure virtual). This use of inheritance to supply an implementation is against common WebKit practices - we would have a separate class to provide implementation. See e.g. the relationship between ProxyInstance and NetscapePluginInstanceProxy in WebKit/mac.

I&apos;m not saying that out of process NPAPI implementation in WebKit/mac is necessarily the ideal, but it&apos;s the most modern code we have for Instance subclasses. If you prefer to do something differently, we should at least agree that the same would be better for NPAPI in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381514</commentid>
    <comment_count>11</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-07 11:22:37 -0700</bug_when>
    <thetext>Hi Alexey,

Thanks for the comments!

(In reply to comment #10)
&gt; I think that implementation of remote Java objects should either be common with other remote objects, or it should at least be similar to how out of process NPAPI plug-ins are implemented.
&gt;

Since we haven&apos;t adopted WebKit2 but we do want remote Java objects, would it be possible for us to make the implementation of remote Java objects be common with other remote objects? As far as I can tell, that would not work for us, so perhaps the best thing to do is your second choice: follow a somewhat similar pattern but keep them different?
 
&gt; The former can be challenging, especially since some of out of process NPAPI plug-in code is not in open source. But the latter is something that should be considered if we don&apos;t want our heads explode.
&gt; 

Heh, agreed :)

&gt; I can see several differences with NPAPI here:
&gt; 
&gt; 1) WebKit IPC is implemented in WebKit, not in WebCore, so NPAPI remote objects also live in WebKit. With WebKit2, that is now cross-platform of course (for all platforms that adopt WebKit2). This distinction may seem minor, but I don&apos;t see what other platforms would do with proxy Java classes that are being added to WebCore here. And if it&apos;s only for Android, it should live in Android WebKit.
&gt; 

Ok so how about we just leave the JavaInstance be an interface whose header lives in WebCore/bridge/v8? We can then have the proxy class live in WebKit?

&gt; 2) NPAPI objects don&apos;t have a common class for local and remote objects. I don&apos;t see any reason for Java to have a common class other than code sharing - but inheritance is an anti-pattern for code sharing. Since these objects behave so differently, I think that JavaInstance and ProxyJavaInstance should be separate JSC::Bindings::Instance subclasses. This objection is more about bug 55383, in fact.
&gt; 

But I think they can&apos;t be subclasses of JSC::Bindings::Instance since the Instance class is JSC-specific and we use V8. We inject our instances via NPAPI, which is just a V8-specific detail. This is why we have two JavaInstance classes: one in bridge/jsc and one in bridge/v8. 

&gt; 3) If I&apos;m reading this patch correctly, it uses yet another level of inheritance to actually implement IPC (e.g. invokeMethod is pure virtual). This use of inheritance to supply an implementation is against common WebKit practices - we would have a separate class to provide implementation. See e.g. the relationship between ProxyInstance and NetscapePluginInstanceProxy in WebKit/mac.
&gt; 
&gt; I&apos;m not saying that out of process NPAPI implementation in WebKit/mac is necessarily the ideal, but it&apos;s the most modern code we have for Instance subclasses. If you prefer to do something differently, we should at least agree that the same would be better for NPAPI in the future.


If I understand things right:  since the V8-specific JavaInstance isn&apos;t really an Instance subclass, is this the right goal here? Instead, we can have the JavaInstance be a pure interface and have the implementations live in WebKit...

Thanks,
Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381529</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 11:38:44 -0700</bug_when>
    <thetext>&gt; If I understand things right:  since the V8-specific JavaInstance isn&apos;t really an Instance subclass, is this the right goal here?

Indeed, I forgot about that.

What does v8 do for NPAPI plug-ins? Those didn&apos;t involve making CInstance an interface class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381556</commentid>
    <comment_count>13</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-07 12:05:52 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; If I understand things right:  since the V8-specific JavaInstance isn&apos;t really an Instance subclass, is this the right goal here?
&gt; 
&gt; Indeed, I forgot about that.
&gt; 
&gt; What does v8 do for NPAPI plug-ins? Those didn&apos;t involve making CInstance an interface class.

There&apos;s a separate implementation that maps between NPObjects and v8::Objects here:

http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/NPV8Object.cpp
http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/npruntime.cpp
etc

Thanks,
Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408356</commentid>
    <comment_count>14</comment_count>
      <attachid>88402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 15:05:09 -0700</bug_when>
    <thetext>Comment on attachment 88402
Patch

This hasn&apos;t been touched in over 3 weeks.  Looks like there are still concerns above.  Marking r-.

I would love it if someone would go through the exising JNI code and give it a bath... Our second-most common cause of flaky tests is something to do with liveconnect objects toString implementations being racy or something...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439256</commentid>
    <comment_count>15</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-07-19 10:48:19 -0700</bug_when>
    <thetext>I&apos;ll look into the approach of keeping JavaInstanceV8.h in WebCore, with implementations provided in the WebKit layer. But first I&apos;ll fix Bug 55786 to simplify the refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444048</commentid>
    <comment_count>16</comment_count>
      <attachid>102382</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-07-29 12:54:22 -0700</bug_when>
    <thetext>Created attachment 102382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444052</commentid>
    <comment_count>17</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-07-29 13:00:46 -0700</bug_when>
    <thetext>I&apos;ve uploaded a new patch which removes V8&apos;s JavaInstanceJobject, JavaClassJobject and JavaFieldJobject, which were added in Bug 55383, Bug 57533 and Bug 55766.

These classes were only used by Android. In the future, Android will use the Chromium WebKit API to implement the Java bridge.

The patch also simplifies the JavaInstance, JavaClass and JavaField and JavaMethod interfaces for V8. Following Alexey&apos;s comments, these will be implemented in the Chromium WebKit layer in a later patch.

I&apos;ll also send a couple of patches to clean up JavaMethodJobject and JavaString, which are now only needed for JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444053</commentid>
    <comment_count>18</comment_count>
      <attachid>102384</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-07-29 13:03:31 -0700</bug_when>
    <thetext>Created attachment 102384
Patch 3

Previous patch seems to have been mangled during upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448333</commentid>
    <comment_count>19</comment_count>
      <attachid>102384</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-08 15:58:45 -0700</bug_when>
    <thetext>Comment on attachment 102384
Patch 3

This patch has been up for review for a while, with several Google folks CC&apos;ed, so I&apos;m going to say r=me despite this being V8-specific code. Please yell if you&apos;d like someone else to take a look!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448392</commentid>
    <comment_count>20</comment_count>
      <attachid>102384</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 17:55:45 -0700</bug_when>
    <thetext>Comment on attachment 102384
Patch 3

Clearing flags on attachment: 102384

Committed r92659: &lt;http://trac.webkit.org/changeset/92659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448393</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 17:55:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448520</commentid>
    <comment_count>22</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-09 05:00:45 -0700</bug_when>
    <thetext>Thanks Alexey.

&gt; I&apos;ll also send a couple of patches to clean up JavaMethodJobject
Bug 65910

&gt; and JavaString, which are now only needed for JSC.
Bug 65909</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88281</attachid>
            <date>2011-04-05 11:06:34 -0700</date>
            <delta_ts>2011-04-06 05:52:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57859-20110405190631.patch</filename>
            <type>text/plain</type>
            <size>20606</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI5NTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQudjhiaW5kaW5ncy5tayBiL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5t
awppbmRleCA5ZTQzOGU3ZjRkZmY4NTE3MTQ1MzNkYzdjMGE2NjYwMTc1YjYwNTdkLi5lOTkwMjU2
MmQ0MWUyNjY2ZWQ0ZDNkZjY1NDRiZjEwNjdjY2E5OWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsKKysrIGIvU291cmNlL1dlYkNvcmUvQW5kcm9pZC52
OGJpbmRpbmdzLm1rCkBAIC0xNzksNyArMTc5LDcgQEAgTE9DQUxfU1JDX0ZJTEVTICs9IFwKIAli
cmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmNwcCBcCiAJYnJpZGdlL2puaS92OC9KTklVdGlsaXR5
UHJpdmF0ZS5jcHAgXAogCWJyaWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVjdFY4LmNwcCBcCisJ
YnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmNwcCBcCiAJYnJpZGdlL2puaS92OC9KYXZh
RmllbGRKb2JqZWN0VjguY3BwIFwKIAlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RW
OC5jcHAgXAotCWJyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0LmNwcCBcCi0JYnJpZGdlL2puaS92
OC9Kb2JqZWN0V3JhcHBlci5jcHAKKwlicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA4NWIyODVkY2NlMDMwZmJiODI1M2I3ZTJkMTBlOGEyMGJjYTMzMzg1Li5hNDdi
OTM3Y2JkZmZjZTIwODAxODhiYTRkODNhYjMyZjI4YTlmOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDkgQEAKKzIwMTEtMDQtMDUgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBp
bXBsZW1lbnRhdGlvbnMgb2YgSmF2YUluc3RhbmNlLCBKYXZhQ2xhc3MsIEphdmFGaWVsZCBhbmQg
SmF2YU1ldGhvZCB0aGF0IHNpbXBseSBwcm94eSBjYWxscyB0byBhIGxpc3RlbmVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4NTkKKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHRoaXMgd2lsbCBiZSB0ZXN0ZWQgYnkgZXhpc3RpbmcgTGF5b3V0VGVz
dHMuCisKKyAgICAgICAgKiBBbmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIGJyaWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1ldGhvZFByb3h5OjpvcGVyYXRvciBuZXcpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1ldGhvZFByb3h5OjpvcGVyYXRvciBkZWxldGUp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1ldGhvZFByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU1ldGhvZFByb3h5OjpuYW1lKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OkphdmFNZXRob2RQcm94eTo6cmV0dXJuVHlwZUNsYXNzTmFtZSk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJveHk6OnBhcmFtZXRlckF0KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2RQcm94eTo6c2lnbmF0dXJlKToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2RQcm94eTo6cmV0dXJuVHlwZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJveHk6OmlzU3RhdGljKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OkphdmFNZXRob2RQcm94eTo6bnVtUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpKYXZhTWV0aG9kUHJveHk6OmlkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkphdmFNZXRob2RQcm94eTo6SmF2YU1ldGhvZFByb3h5KToKKyAgICAgICAgKiBicmlkZ2Uvam5p
L3Y4L0phdmFDbGFzc1Byb3h5VjguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkphdmFDbGFzc1Byb3h5OjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
SmF2YUNsYXNzUHJveHk6OmZpZWxkTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2
YUNsYXNzUHJveHk6OmFkZE1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhQ2xh
c3NQcm94eTo6YWRkRmllbGQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUNsYXNzUHJv
eHlWOC5oOiBBZGRlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5Vjgu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhRmllbGRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFGaWVsZFByb3h5OjpuYW1lKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkphdmFGaWVsZFByb3h5Ojp0eXBlQ2xhc3NOYW1lKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkphdmFGaWVsZFByb3h5Ojp0eXBlKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OkphdmFGaWVsZFByb3h5OjppZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpK
YXZhRmllbGRQcm94eTo6SmF2YUZpZWxkUHJveHkpOgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgv
SmF2YUluc3RhbmNlUHJveHlWOC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okph
dmFJbnN0YW5jZVByb3h5OjpnZXRDbGFzcyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
SW5zdGFuY2VQcm94eTo6aW52b2tlTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okph
dmFJbnN0YW5jZVByb3h5OjpnZXRGaWVsZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
SW5zdGFuY2VQcm94eTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3Rh
bmNlUHJveHk6OmVuZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2VQcm94
eTo6YWRkTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZVByb3h5
OjphZGRGaWVsZCk6CisKIDIwMTEtMDQtMDUgIERhdmlkIERvcndpbiAgPGRkb3J3aW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDY1N2Q1YjA3ODcyNDk1NTEyMTk2YTA5Zjc5NjY2ODhiNTAyNTE0ODUuLmNkYWQyMDc0
YjAzZTRlMmNlYTgzMWIzZmM0ODNmNTEyYmRkNzM2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIx
NzIsNiArMjE3Miw3IEBACiAgICAgICAgICAgICAnYnJpZGdlL2puaS9KYXZhTWV0aG9kLmgnLAog
ICAgICAgICAgICAgJ2JyaWRnZS9qbmkvSmF2YU1ldGhvZEpvYmplY3QuY3BwJywKICAgICAgICAg
ICAgICdicmlkZ2Uvam5pL0phdmFNZXRob2RKb2JqZWN0LmgnLAorICAgICAgICAgICAgJ2JyaWRn
ZS9qbmkvSmF2YU1ldGhvZFByb3h5LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvSmF2YVN0
cmluZy5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFUeXBlLmgnLAogICAgICAgICAg
ICAgJ2JyaWRnZS9qbmkvSm9iamVjdFdyYXBwZXIuY3BwJywKQEAgLTIxOTUsMTIgKzIxOTYsMTYg
QEAKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmgnLAogICAg
ICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVjdFY4LmNwcCcsCiAgICAgICAg
ICAgICAnYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguaCcsCisgICAgICAgICAgICAn
YnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmNwcCcsCisgICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgv
SmF2YUNsYXNzVjguaCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2Jq
ZWN0VjguY3BwJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RW
OC5oJywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5VjguaCcsCiAg
ICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRWOC5oJywKICAgICAgICAgICAgICdi
cmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAnLAogICAgICAgICAgICAgJ2Jy
aWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4LmgnLAorICAgICAgICAgICAgJ2JyaWRn
ZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5p
L3Y4L0phdmFJbnN0YW5jZVY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YU5Q
T2JqZWN0VjguY3BwJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9KYXZhTWV0aG9kUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTE3NTk5OTJiMjM1ZWE5MmU5YTNiZTI1ZmJmNWY4OTNhNzk3ODg3NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5LmgKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhTWV0aG9kUHJveHlfaAor
I2RlZmluZSBKYXZhTWV0aG9kUHJveHlfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisj
aW5jbHVkZSAiSmF2YU1ldGhvZC5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgQmluZGluZ3MgeworCisvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhTWV0aG9kIHRoYXQg
Y2FuIGJlIGNvbmZpZ3VyZWQgbWFudWFsbHksIHVzZWQgYnkKKy8vIEphdmFJbnN0YW5jZVByb3h5
LgorY2xhc3MgSmF2YU1ldGhvZFByb3h5IDogcHVibGljIEphdmFNZXRob2QsIHB1YmxpYyBSZWZD
b3VudGVkPEphdmFNZXRob2RQcm94eT4geworcHVibGljOgorICAgIC8vIFdlIGhhdmUgaW5oZXJp
dGVkIG92ZXJsb2FkcyBvZiBvcGVyYXRvcnMgbmV3IGFuZCBkZWxldGUgZnJvbSBib3RoIFJlZlB0
cgorICAgIC8vIGFuZCBNZXRob2QsIHdoaWNoIGNhdXNlcyBhbWJpZ3VpdHkuIFdlIHByb3ZpZGUg
b3VyIG93biBvdmVybG9hZHMgaGVyZSB0bworICAgIC8vIGF2b2lkIHRoaXMuCisgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7IHJldHVybiBKU0M6OkJpbmRpbmdzOjpNZXRob2Q6
Om9wZXJhdG9yIG5ldyhzaXplKTsgfQorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAp
IHsgSlNDOjpCaW5kaW5nczo6TWV0aG9kOjpvcGVyYXRvciBkZWxldGUocCk7IH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEphdmFNZXRob2RQcm94eT4gY3JlYXRlKGludCBpZCwgYm9vbCBpc1N0
YXRpYywgU3RyaW5nIG5hbWUsIFN0cmluZyByZXR1cm5UeXBlQ2xhc3NOYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1ldGVycykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEphdmFNZXRob2RQ
cm94eShpZCwgaXNTdGF0aWMsIG5hbWUsIHJldHVyblR5cGVDbGFzc05hbWUsIHBhcmFtZXRlcnMp
KTsgfQorCisgICAgLy8gSmF2YU1ldGhvZCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgU3Ry
aW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFJ1bnRpbWVU
eXBlIHJldHVyblR5cGVDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX3JldHVyblR5cGVDbGFz
c05hbWUudXRmOCgpLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBhcmFtZXRlckF0KGlu
dCBpKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnNbaV07IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHNpZ25hdHVyZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBKYXZhVHlwZSByZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1cm4gamF2
YVR5cGVGcm9tQ2xhc3NOYW1lKG1fcmV0dXJuVHlwZUNsYXNzTmFtZS51dGY4KCkuZGF0YSgpKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGF0aWM7
IH0KKworICAgIC8vIE1ldGhvZCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgaW50IG51bVBh
cmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuc2l6ZSgpOyB9CisKKyAgICBp
bnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKK3ByaXZhdGU6CisgICAgSmF2YU1ldGhv
ZFByb3h5KGludCBpZCwgYm9vbCBpc1N0YXRpYywgU3RyaW5nIG5hbWUsIFN0cmluZyByZXR1cm5U
eXBlQ2xhc3NOYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1ldGVycykKKyAgICAgICAg
OiBtX2lkKGlkKQorICAgICAgICAsIG1faXNTdGF0aWMoaXNTdGF0aWMpCisgICAgICAgICwgbV9u
YW1lKG5hbWUpCisgICAgICAgICwgbV9yZXR1cm5UeXBlQ2xhc3NOYW1lKHJldHVyblR5cGVDbGFz
c05hbWUpCisgICAgICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHt9CisKKyAgICBpbnQg
bV9pZDsKKyAgICBib29sIG1faXNTdGF0aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJp
bmcgbV9yZXR1cm5UeXBlQ2xhc3NOYW1lOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcGFyYW1ldGVy
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQorCisjZW5kaWYgLy8gSmF2YU1ldGhvZFBy
b3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNz
UHJveHlWOC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Byb3h5
VjguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJiMDc5NDZlOWY2YzIwZDc2NjJmNzdiZmNhMTI3NmRiZDYyNDBi
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFD
bGFzc1Byb3h5VjguY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFDbGFzc1Byb3h5VjguaCIKKworI2lmIEVOQUJM
RShKQVZBX0JSSURHRSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7
CisKK01ldGhvZExpc3QgSmF2YUNsYXNzUHJveHk6Om1ldGhvZHNOYW1lZChjb25zdCBjaGFyKiBu
YW1lKSBjb25zdAoreworICAgIE1ldGhvZExpc3QgcmVzdWx0OworICAgIEphdmFNZXRob2RWZWN0
b3JNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21ldGhvZHMuZmluZChuYW1lKTsKKyAgICBp
ZiAoaXRlciAhPSBtX21ldGhvZHMuZW5kKCkpIHsKKyAgICAgICAgY29uc3QgSmF2YU1ldGhvZFZl
Y3RvciogdmVjdG9yID0gJml0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCB2ZWN0b3ItPnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgoKnZlY3RvcilbaV0uZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitK
YXZhRmllbGQqIEphdmFDbGFzc1Byb3h5OjpmaWVsZE5hbWVkKGNvbnN0IGNoYXIqIG5hbWUpIGNv
bnN0Cit7CisgICAgSmF2YUZpZWxkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9maWVsZHMu
ZmluZChuYW1lKTsKKyAgICByZXR1cm4gaXRlciA9PSBtX2ZpZWxkcy5lbmQoKSA/IDAgOiBpdGVy
LT5zZWNvbmQuZ2V0KCk7Cit9CisKK3ZvaWQgSmF2YUNsYXNzUHJveHk6OmFkZE1ldGhvZChpbnQg
aWQsIGJvb2wgaXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmV0dXJuVHlwZUNsYXNzTmFt
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlcnMpCit7CisgICAgSmF2YU1ldGhvZFZl
Y3Rvck1hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWV0aG9kcy5maW5kKG5hbWUpOworICAgIEphdmFN
ZXRob2RWZWN0b3IqIHZlY3RvcjsKKyAgICBpZiAoaXRlciA9PSBtX21ldGhvZHMuZW5kKCkpIHsK
KyAgICAgICAgcGFpcjxKYXZhTWV0aG9kVmVjdG9yTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0
ID0gbV9tZXRob2RzLmFkZChuYW1lLCBKYXZhTWV0aG9kVmVjdG9yKCkpOworICAgICAgICBBU1NF
UlQocmVzdWx0LnNlY29uZCk7CisgICAgICAgIHZlY3RvciA9ICZyZXN1bHQuZmlyc3QtPnNlY29u
ZDsKKyAgICB9IGVsc2UKKyAgICAgICAgdmVjdG9yID0gJml0ZXItPnNlY29uZDsKKyAgICB2ZWN0
b3ItPmFwcGVuZChKYXZhTWV0aG9kUHJveHk6OmNyZWF0ZShpZCwgaXNTdGF0aWMsIG5hbWUsIHJl
dHVyblR5cGVDbGFzc05hbWUsIHBhcmFtZXRlcnMpKTsKK30KKwordm9pZCBKYXZhQ2xhc3NQcm94
eTo6YWRkRmllbGQoaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGVDbGFzc05hbWUpCit7
CisgICAgbV9maWVsZHMuYWRkKG5hbWUsIEphdmFGaWVsZFByb3h5OjpjcmVhdGUoaWQsIG5hbWUs
IHR5cGVDbGFzc05hbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Byb3h5VjguaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzUHJveHlWOC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNk
YjcxMzhjY2RiMWRlYzY2NmQyMTU4NjRlYjM2NzgyMTQxN2FiMmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFzc1Byb3h5VjguaApAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgSmF2YUNsYXNzUHJveHlWOF9oCisj
ZGVmaW5lIEphdmFDbGFzc1Byb3h5VjhfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisj
aW5jbHVkZSAiSmF2YUNsYXNzVjguaCIKKyNpbmNsdWRlICJKYXZhRmllbGRQcm94eVY4LmgiCisj
aW5jbHVkZSAiSmF2YU1ldGhvZFByb3h5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgQmluZGluZ3MgeworCisvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhQ2xhc3MgdGhhdCBj
YW4gYmUgY29uZmlndXJlZCBtYW51YWxseSwgdXNlZCBieQorLy8gSmF2YUluc3RhbmNlUHJveHku
CitjbGFzcyBKYXZhQ2xhc3NQcm94eSA6IHB1YmxpYyBKYXZhQ2xhc3MgeworcHVibGljOgorICAg
IC8vIEphdmFDbGFzcyBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRo
b2RzTmFtZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBKYXZhRmllbGQq
IGZpZWxkTmFtZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CisKKyAgICB2b2lkIGFkZE1ldGhv
ZChpbnQgaWQsIGJvb2wgaXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmV0dXJuVHlwZUNs
YXNzTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlcnMpOworICAgIHZvaWQgYWRk
RmllbGQoaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGVDbGFzc05hbWUpOworCitwcml2
YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxKYXZhTWV0aG9kUHJveHk+ID4gSmF2YU1l
dGhvZFZlY3RvcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBKYXZhTWV0aG9kVmVjdG9y
PiBKYXZhTWV0aG9kVmVjdG9yTWFwOworICAgIEphdmFNZXRob2RWZWN0b3JNYXAgbV9tZXRob2Rz
OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxKYXZhRmllbGRQcm94eT4gPiBK
YXZhRmllbGRNYXA7CisgICAgSmF2YUZpZWxkTWFwIG1fZmllbGRzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBKYXZhQ2xhc3NQcm94eVY4X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5oIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRQcm94eVY4LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMz
NTlkYzU4ODFmOGRjOTRlMTI2N2IxMjU1ZmY4NjhmNTkwZDcyNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5oCkBAIC0wLDAg
KzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBKYXZhRmllbGRQcm94eVY4X2gKKyNk
ZWZpbmUgSmF2YUZpZWxkUHJveHlWOF9oCisKKyNpZiBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNp
bmNsdWRlICJKYXZhRmllbGRWOC5oIgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgQmluZGluZ3MgeworCisvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhRmllbGQgdGhhdCBj
YW4gYmUgY29uZmlndXJlZCBtYW51YWxseSwgdXNlZCBieQorLy8gSmF2YUluc3RhbmNlUHJveHku
CitjbGFzcyBKYXZhRmllbGRQcm94eSA6IHB1YmxpYyBKYXZhRmllbGQsIHB1YmxpYyBSZWZDb3Vu
dGVkPEphdmFGaWVsZFByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SmF2
YUZpZWxkUHJveHk+IGNyZWF0ZShpbnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUNsYXNz
TmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEphdmFGaWVsZFByb3h5KGlkLCBuYW1lLCB0eXBl
Q2xhc3NOYW1lKSk7IH0KKworICAgIC8vIEphdmFGaWVsZCBpbXBsZW1lbnRhdGlvbgorICAgIHZp
cnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHR5cGVDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX3R5cGVDbGFzc05h
bWUudXRmOCgpLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgSmF2YVR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGphdmFUeXBlRnJvbUNsYXNzTmFtZShtX3R5cGVDbGFzc05hbWUudXRmOCgpLmRhdGEo
KSk7IH0KKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworcHJpdmF0ZToK
KyAgICBKYXZhRmllbGRQcm94eShpbnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUNsYXNz
TmFtZSkKKyAgICAgICAgOiBtX2lkKGlkKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAg
ICAsIG1fdHlwZUNsYXNzTmFtZSh0eXBlQ2xhc3NOYW1lKSB7fQorCisgICAgaW50IG1faWQ7Cisg
ICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV90eXBlQ2xhc3NOYW1lOworfTsKKworfSAv
LyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBKYXZhRmllbGRQcm94eVY4X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlWOC5o
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTIzNDRmZTM3NmExMTZiZDlmMmY1MTQyMjk3ODIwOGM3YTYwYWVjNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJv
eHlWOC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBKYXZhSW5z
dGFuY2VQcm94eVY4X2gKKyNkZWZpbmUgSmF2YUluc3RhbmNlUHJveHlWOF9oCisKKyNpZiBFTkFC
TEUoSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKYXZhQ2xhc3NQcm94eVY4LmgiCisjaW5jbHVk
ZSAiSmF2YUluc3RhbmNlVjguaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5k
aW5ncyB7CisKKy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIEphdmFJbnN0YW5jZSB3aGljaCBhbGxv
d3MgdGhlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMKKy8vIGV4cG9zZWQgYnkgdGhlIGluc3RhbmNl
LgorY2xhc3MgSmF2YUluc3RhbmNlUHJveHkgOiBwdWJsaWMgSmF2YUluc3RhbmNlIHsKK3B1Ymxp
YzoKKyAgICAvLyBKYXZhSW5zdGFuY2UgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIEphdmFD
bGFzcyogZ2V0Q2xhc3MoKSBjb25zdCB7IHJldHVybiAmbV9jbGFzczsgfQorICAgIHZpcnR1YWwg
SmF2YVZhbHVlIGludm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kKiBtZXRob2QsIEphdmFWYWx1
ZSogYXJncykgeyByZXR1cm4gaW52b2tlTWV0aG9kKHN0YXRpY19jYXN0PGNvbnN0IEphdmFNZXRo
b2RQcm94eSo+KG1ldGhvZCksIGFyZ3MpOyB9CisgICAgdmlydHVhbCBKYXZhVmFsdWUgZ2V0Rmll
bGQoY29uc3QgSmF2YUZpZWxkKiBmaWVsZCkgeyByZXR1cm4gZ2V0RmllbGQoc3RhdGljX2Nhc3Q8
Y29uc3QgSmF2YUZpZWxkUHJveHkqPihmaWVsZCkpOyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kKCkge30KKworICAgIHZvaWQgYWRkTWV0aG9kKGlu
dCBpZCwgYm9vbCBpc1N0YXRpYywgU3RyaW5nIG5hbWUsIFN0cmluZyByZXR1cm5UeXBlQ2xhc3NO
YW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiAmcGFyYW1ldGVycykgeyByZXR1cm4gbV9jbGFzcy5h
ZGRNZXRob2QoaWQsIGlzU3RhdGljLCBuYW1lLCByZXR1cm5UeXBlQ2xhc3NOYW1lLCBwYXJhbWV0
ZXJzKTsgfQorICAgIHZvaWQgYWRkRmllbGQoaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5
cGVDbGFzc05hbWUpIHsgbV9jbGFzcy5hZGRGaWVsZChpZCwgbmFtZSwgdHlwZUNsYXNzTmFtZSk7
IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3Qg
SmF2YU1ldGhvZFByb3h5KiwgSmF2YVZhbHVlKiBhcmdzKSA9IDA7CisgICAgdmlydHVhbCBKYXZh
VmFsdWUgZ2V0RmllbGQoY29uc3QgSmF2YUZpZWxkUHJveHkqKSA9IDA7CisKKyAgICAvLyBXZSBu
ZWVkIHRvIHJldHVybiBKYXZhQ2xhc3MqIGZyb20gZ2V0Q2xhc3MoKS4KKyAgICBtdXRhYmxlIEph
dmFDbGFzc1Byb3h5IG1fY2xhc3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2Vu
ZGlmIC8vIEphdmFJbnN0YW5jZVByb3h5VjhfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88402</attachid>
            <date>2011-04-06 05:52:39 -0700</date>
            <delta_ts>2011-07-29 12:54:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57859-20110406135237.patch</filename>
            <type>text/plain</type>
            <size>28678</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQudjhiaW5kaW5ncy5tayBiL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5t
awppbmRleCA5ZTQzOGU3ZjRkZmY4NTE3MTQ1MzNkYzdjMGE2NjYwMTc1YjYwNTdkLi4wYTRiZTA1
ODE0Mjg4NWI0MmVlNDkyNTMwZTE3M2MyNWVmNzg4NjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9BbmRyb2lkLnY4YmluZGluZ3MubWsKKysrIGIvU291cmNlL1dlYkNvcmUvQW5kcm9pZC52
OGJpbmRpbmdzLm1rCkBAIC0xNzYsMTAgKzE3NiwxMyBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAog
TE9DQUxfU1JDX0ZJTEVTICs9IFwKIAlicmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwIFwKIAlicmlk
Z2Uvam5pL0phdmFNZXRob2RKb2JqZWN0LmNwcCBcCisJYnJpZGdlL2puaS9KYXZhTWV0aG9kUHJv
eHkuY3BwIFwKIAlicmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmNwcCBcCiAJYnJpZGdlL2puaS92
OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAgXAogCWJyaWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVj
dFY4LmNwcCBcCisJYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmNwcCBcCiAJYnJpZGdl
L2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwIFwKKwlicmlkZ2Uvam5pL3Y4L0phdmFGaWVs
ZFByb3h5VjguY3BwIFwKIAlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHAg
XAotCWJyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0LmNwcCBcCi0JYnJpZGdlL2puaS92OC9Kb2Jq
ZWN0V3JhcHBlci5jcHAKKwlicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguY3BwIFwK
KwlicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDZjMzgxM2My
OTM1NDE3YzA1NWVjZGZhN2UzNThkNGQyN2FiZWE4Li44N2JjMTNlNDZmYjU4YTVhODhlZDc3N2Q1
NDQxMDgzYTA5MmMwN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDQtMDYg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbXBsZW1lbnRhdGlvbnMgb2YgSmF2
YUluc3RhbmNlLCBKYXZhQ2xhc3MsIEphdmFGaWVsZCBhbmQgSmF2YU1ldGhvZCB0aGF0IHNpbXBs
eSBwcm94eSBjYWxscyB0byBhIGxpc3RlbmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4NTkKKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMg
d2lsbCBiZSB0ZXN0ZWQgYnkgZXhpc3RpbmcgTGF5b3V0VGVzdHMuCisKKyAgICAgICAgKiBBbmRy
b2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJy
aWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpKYXZhTWV0aG9kUHJveHk6OkphdmFNZXRob2RQcm94eSk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpKYXZhTWV0aG9kUHJveHk6Om5hbWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
SmF2YU1ldGhvZFByb3h5OjpyZXR1cm5UeXBlQ2xhc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkphdmFNZXRob2RQcm94eTo6cGFyYW1ldGVyQXQpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6SmF2YU1ldGhvZFByb3h5OjpzaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6SmF2YU1ldGhvZFByb3h5OjpyZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkphdmFNZXRob2RQcm94eTo6aXNTdGF0aWMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2
YU1ldGhvZFByb3h5OjpudW1QYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okph
dmFNZXRob2RQcm94eTo6aWQpOgorICAgICAgICAqIGJyaWRnZS9qbmkvSmF2YU1ldGhvZFByb3h5
Lmg6IEFkZGVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUNsYXNzUHJveHlWOC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUNsYXNzUHJveHk6OkphdmFDbGFz
c1Byb3h5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFDbGFzc1Byb3h5Ojp+SmF2YUNs
YXNzUHJveHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUNsYXNzUHJveHk6Om1ldGhv
ZHNOYW1lZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhQ2xhc3NQcm94eTo6ZmllbGRO
YW1lZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhQ2xhc3NQcm94eTo6YWRkTWV0aG9k
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFDbGFzc1Byb3h5OjphZGRGaWVsZCk6Cisg
ICAgICAgICogYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4Lmg6IEFkZGVkLgorICAgICAg
ICAqIGJyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6SmF2YUZpZWxkUHJveHk6OkphdmFGaWVsZFByb3h5KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkphdmFGaWVsZFByb3h5OjpuYW1lKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkphdmFGaWVsZFByb3h5Ojp0eXBlQ2xhc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkphdmFGaWVsZFByb3h5Ojp0eXBlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okph
dmFGaWVsZFByb3h5OjppZCk6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZhRmllbGRQcm94
eVY4Lmg6IEFkZGVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlUHJveHlW
OC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlUHJveHk6
OkphdmFJbnN0YW5jZVByb3h5KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJbnN0YW5j
ZVByb3h5Ojp+SmF2YUluc3RhbmNlUHJveHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2
YUluc3RhbmNlUHJveHk6OmdldENsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJ
bnN0YW5jZVByb3h5OjppbnZva2VNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2
YUluc3RhbmNlUHJveHk6OmdldEZpZWxkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFJ
bnN0YW5jZVByb3h5OjphZGRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUlu
c3RhbmNlUHJveHk6OmFkZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0
YW5jZVByb3h5VjguaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFu
Y2VQcm94eTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlUHJv
eHk6OmVuZCk6CisKIDIwMTEtMDQtMDYgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCBhN2U3ZmJhMjkwYmEzMDA1NDE1NzJlOTk0MmQ1NWM2MTQ1MzgwYmNiLi4yMDQ2ZTIxMjE5
ZjUwMGFhNTNmZDcwOTMzOTNhNjhmMGU5ODhjNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTcz
LDYgKzIxNzMsOCBAQAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvSmF2YU1ldGhvZC5oJywKICAg
ICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFNZXRob2RKb2JqZWN0LmNwcCcsCiAgICAgICAgICAg
ICAnYnJpZGdlL2puaS9KYXZhTWV0aG9kSm9iamVjdC5oJywKKyAgICAgICAgICAgICdicmlkZ2Uv
am5pL0phdmFNZXRob2RQcm94eS5jcHAnLAorICAgICAgICAgICAgJ2JyaWRnZS9qbmkvSmF2YU1l
dGhvZFByb3h5LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvSmF2YVN0cmluZy5oJywKICAg
ICAgICAgICAgICdicmlkZ2Uvam5pL0phdmFUeXBlLmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9q
bmkvSm9iamVjdFdyYXBwZXIuY3BwJywKQEAgLTIxOTYsMTIgKzIxOTgsMTggQEAKICAgICAgICAg
ICAgICdicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmgnLAogICAgICAgICAgICAgJ2Jy
aWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVjdFY4LmNwcCcsCiAgICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguaCcsCisgICAgICAgICAgICAnYnJpZGdlL2puaS92
OC9KYXZhQ2xhc3NQcm94eVY4LmNwcCcsCisgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZh
Q2xhc3NQcm94eVY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzVjgu
aCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwJywK
ICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oJywKKyAgICAg
ICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5VjguY3BwJywKKyAgICAgICAgICAg
ICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFByb3h5VjguaCcsCiAgICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhRmllbGRWOC5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJ
bnN0YW5jZUpvYmplY3RWOC5jcHAnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUlu
c3RhbmNlSm9iamVjdFY4LmgnLAorICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUluc3Rh
bmNlUHJveHlWOC5jcHAnLAorICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNl
UHJveHlWOC5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4Lmgn
LAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwJywKICAgICAg
ICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9KYXZhTWV0aG9kUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9KYXZhTWV0aG9kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZjA3NGI1NWM2
NmY3NGI3ZWQxMjI3OGMwYTg5YjAwOTAxM2VjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL0phdmFNZXRob2RQcm94eS5jcHAKQEAgLTAsMCArMSw5MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFNZXRob2RQ
cm94eS5oIgorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiSk5JVXRpbGl0
eS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworSmF2YU1ldGhvZFByb3h5OjpKYXZhTWV0aG9kUHJv
eHkoaW50IGlkLCBib29sIGlzU3RhdGljLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVD
bGFzc05hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbWV0ZXJzKQorICAgIDogbV9pZChp
ZCkKKyAgICAsIG1faXNTdGF0aWMoaXNTdGF0aWMpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAs
IG1fcmV0dXJuVHlwZUNsYXNzTmFtZShyZXR1cm5UeXBlQ2xhc3NOYW1lKQorICAgICwgbV9wYXJh
bWV0ZXJzKHBhcmFtZXRlcnMpCit7Cit9CisKK1N0cmluZyBKYXZhTWV0aG9kUHJveHk6Om5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX25hbWU7Cit9CisKK1J1bnRpbWVUeXBlIEphdmFNZXRo
b2RQcm94eTo6cmV0dXJuVHlwZUNsYXNzTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmV0
dXJuVHlwZUNsYXNzTmFtZS51dGY4KCkuZGF0YSgpOworfQorCitTdHJpbmcgSmF2YU1ldGhvZFBy
b3h5OjpwYXJhbWV0ZXJBdChpbnQgaSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXJhbWV0ZXJz
W2ldOworfQorCitjb25zdCBjaGFyKiBKYXZhTWV0aG9kUHJveHk6OnNpZ25hdHVyZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0phdmFU
eXBlIEphdmFNZXRob2RQcm94eTo6cmV0dXJuVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGph
dmFUeXBlRnJvbUNsYXNzTmFtZShtX3JldHVyblR5cGVDbGFzc05hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK2Jvb2wgSmF2YU1ldGhvZFByb3h5Ojppc1N0YXRpYygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faXNTdGF0aWM7Cit9CisKK2ludCBKYXZhTWV0aG9kUHJveHk6Om51bVBhcmFtZXRlcnMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhcmFtZXRlcnMuc2l6ZSgpOworfQorCitpbnQgSmF2
YU1ldGhvZFByb3h5OjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9K
YXZhTWV0aG9kUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSmF2YU1ldGhvZFBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDE1NDM4OGQ0N2FlOGYyZjM2MDgxMTc3NzM4ZmU0ZjI1MGFkZGUx
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSmF2YU1ldGhv
ZFByb3h5LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhTWV0
aG9kUHJveHlfaAorI2RlZmluZSBKYXZhTWV0aG9kUHJveHlfaAorCisjaWYgRU5BQkxFKEpBVkFf
QlJJREdFKQorCisjaW5jbHVkZSAiSmF2YU1ldGhvZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
bmFtZXNwYWNlIEJpbmRpbmdzIHsKKworLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgSmF2YU1ldGhv
ZCB0aGF0IGNhbiBiZSBjb25maWd1cmVkIG1hbnVhbGx5LCB1c2VkIGJ5CisvLyBKYXZhSW5zdGFu
Y2VQcm94eS4KK2NsYXNzIEphdmFNZXRob2RQcm94eSA6IHB1YmxpYyBKYXZhTWV0aG9kIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShKYXZhTWV0aG9kUHJveHkpOworcHVibGljOgorICAgIEph
dmFNZXRob2RQcm94eShpbnQgaWQsIGJvb2wgaXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcg
cmV0dXJuVHlwZUNsYXNzTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlcnMpOwor
CisgICAgLy8gSmF2YU1ldGhvZCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgU3RyaW5nIG5h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHJldHVyblR5cGVDbGFzc05hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBwYXJhbWV0ZXJBdChpbnQpIGNvbnN0OworICAg
IHZpcnR1YWwgY29uc3QgY2hhciogc2lnbmF0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCBKYXZh
VHlwZSByZXR1cm5UeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU3RhdGljKCkgY29u
c3Q7CisKKyAgICAvLyBNZXRob2QgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGludCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3Q7CisKKyAgICBpbnQgaWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBpbnQgbV9pZDsKKyAgICBib29sIG1faXNTdGF0aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAg
ICBTdHJpbmcgbV9yZXR1cm5UeXBlQ2xhc3NOYW1lOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcGFy
YW1ldGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQorCisjZW5kaWYgLy8gSmF2YU1l
dGhvZFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2
YUNsYXNzUHJveHlWOC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFz
c1Byb3h5VjguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1NTNiYjE4MzkyMTIyMTg1MGU2NjQ5ZTRhMTUyZWIz
ZTkzODBiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4
L0phdmFDbGFzc1Byb3h5VjguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFDbGFzc1Byb3h5VjguaCIKKworI2lm
IEVOQUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkphdmFGaWVsZFByb3h5VjguaCIKKyNp
bmNsdWRlICJKYXZhTWV0aG9kUHJveHkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBCaW5kaW5ncyB7CisKK0phdmFDbGFzc1Byb3h5OjpKYXZhQ2xhc3NQcm94eSgpCit7Cit9CisK
K0phdmFDbGFzc1Byb3h5Ojp+SmF2YUNsYXNzUHJveHkoKQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHVnbGluZXNzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugd2UncmUgbm90IGFibGUgdG8gdXNlIE93blB0
ciBpbgorICAgIC8vIGEgSGFzaE1hcC4gQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gdXNlIFJl
ZlB0ciwgYnV0IG1ha2luZyBKYXZhTWV0aG9kCisgICAgLy8gaW5oZXJpdCBmcm9tIFJlZkNvdW50
ZWQgY2F1c2VzIHByb2JsZW1zIGFzIGJvdGggUmVmQ291bnRlZCBhbmQgTWV0aG9kCisgICAgLy8g
cHJvdmlkZSBvdmVybG9hZHMgb2Ygb3BlcmF0b3JzIG5ldyBhbmQgZGVsZXRlLgorICAgIGZvciAo
SmF2YU1ldGhvZFZlY3Rvck1hcDo6aXRlcmF0b3IgaXRlcjEgPSBtX21ldGhvZHMuYmVnaW4oKTsg
aXRlcjEgIT0gbV9tZXRob2RzLmVuZCgpOyArK2l0ZXIxKSB7CisgICAgICAgIEphdmFNZXRob2RW
ZWN0b3IqIHZlY3RvciA9ICZpdGVyMS0+c2Vjb25kOworICAgICAgICBmb3IgKEphdmFNZXRob2RW
ZWN0b3I6Oml0ZXJhdG9yIGl0ZXIyID0gdmVjdG9yLT5iZWdpbigpOyBpdGVyMiAhPSB2ZWN0b3It
PmVuZCgpOyArK2l0ZXIyKQorICAgICAgICAgICAgZGVsZXRlIGl0ZXIyOworICAgIH0KKyAgICBm
b3IgKEphdmFGaWVsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fZmllbGRzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9maWVsZHMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZDsK
K30KKworTWV0aG9kTGlzdCBKYXZhQ2xhc3NQcm94eTo6bWV0aG9kc05hbWVkKGNvbnN0IGNoYXIq
IG5hbWUpIGNvbnN0Cit7CisgICAgTWV0aG9kTGlzdCByZXN1bHQ7CisgICAgSmF2YU1ldGhvZFZl
Y3Rvck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWV0aG9kcy5maW5kKG5hbWUpOworICAg
IGlmIChpdGVyICE9IG1fbWV0aG9kcy5lbmQoKSkgeworICAgICAgICBjb25zdCBKYXZhTWV0aG9k
VmVjdG9yKiB2ZWN0b3IgPSAmaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHZlY3Rvci0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHZlY3Rvci0+YXQoaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKYXZh
RmllbGQqIEphdmFDbGFzc1Byb3h5OjpmaWVsZE5hbWVkKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0
Cit7CisgICAgSmF2YUZpZWxkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9maWVsZHMuZmlu
ZChuYW1lKTsKKyAgICByZXR1cm4gaXRlciA9PSBtX2ZpZWxkcy5lbmQoKSA/IDAgOiBpdGVyLT5z
ZWNvbmQ7Cit9CisKK3ZvaWQgSmF2YUNsYXNzUHJveHk6OmFkZE1ldGhvZChpbnQgaWQsIGJvb2wg
aXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmV0dXJuVHlwZUNsYXNzTmFtZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlcnMpCit7CisgICAgSmF2YU1ldGhvZFZlY3Rvck1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fbWV0aG9kcy5maW5kKG5hbWUpOworICAgIEphdmFNZXRob2RWZWN0
b3IqIHZlY3RvcjsKKyAgICBpZiAoaXRlciA9PSBtX21ldGhvZHMuZW5kKCkpIHsKKyAgICAgICAg
cGFpcjxKYXZhTWV0aG9kVmVjdG9yTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tZXRo
b2RzLmFkZChuYW1lLCBKYXZhTWV0aG9kVmVjdG9yKCkpOworICAgICAgICBBU1NFUlQocmVzdWx0
LnNlY29uZCk7CisgICAgICAgIHZlY3RvciA9ICZyZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICB9
IGVsc2UKKyAgICAgICAgdmVjdG9yID0gJml0ZXItPnNlY29uZDsKKyAgICB2ZWN0b3ItPmFwcGVu
ZChuZXcgSmF2YU1ldGhvZFByb3h5KGlkLCBpc1N0YXRpYywgbmFtZSwgcmV0dXJuVHlwZUNsYXNz
TmFtZSwgcGFyYW1ldGVycykpOworfQorCit2b2lkIEphdmFDbGFzc1Byb3h5OjphZGRGaWVsZChp
bnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUNsYXNzTmFtZSkKK3sKKyAgICBtX2ZpZWxk
cy5hZGQobmFtZSwgbmV3IEphdmFGaWVsZFByb3h5KGlkLCBuYW1lLCB0eXBlQ2xhc3NOYW1lKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL3Y4L0phdmFDbGFzc1Byb3h5VjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDI1NWMxMzkwZjNjZmE3NmI4
OGQ1OGM4MTYyMWZjMmQxZDcwYjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS92OC9KYXZhQ2xhc3NQcm94eVY4LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIEphdmFDbGFzc1Byb3h5VjhfaAorI2RlZmluZSBKYXZhQ2xhc3NQ
cm94eVY4X2gKKworI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkphdmFDbGFz
c1Y4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFz
cyBKYXZhRmllbGRQcm94eTsKK2NsYXNzIEphdmFNZXRob2RQcm94eTsKKworLy8gQW4gaW1wbGVt
ZW50YXRpb24gb2YgSmF2YUNsYXNzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgbWFudWFsbHksIHVz
ZWQgYnkKKy8vIEphdmFJbnN0YW5jZVByb3h5LgorY2xhc3MgSmF2YUNsYXNzUHJveHkgOiBwdWJs
aWMgSmF2YUNsYXNzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKYXZhQ2xhc3NQcm94eSk7
CitwdWJsaWM6CisgICAgSmF2YUNsYXNzUHJveHkoKTsKKyAgICB+SmF2YUNsYXNzUHJveHkoKTsK
KworICAgIC8vIEphdmFDbGFzcyBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgTWV0aG9kTGlz
dCBtZXRob2RzTmFtZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBKYXZh
RmllbGQqIGZpZWxkTmFtZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CisKKyAgICB2b2lkIGFk
ZE1ldGhvZChpbnQgaWQsIGJvb2wgaXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmV0dXJu
VHlwZUNsYXNzTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlcnMpOworICAgIHZv
aWQgYWRkRmllbGQoaW50IGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGVDbGFzc05hbWUpOwor
Citwcml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPEphdmFNZXRob2RQcm94eSo+IEphdmFNZXRo
b2RWZWN0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSmF2YU1ldGhvZFZlY3Rvcj4g
SmF2YU1ldGhvZFZlY3Rvck1hcDsKKyAgICBKYXZhTWV0aG9kVmVjdG9yTWFwIG1fbWV0aG9kczsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBKYXZhRmllbGRQcm94eSo+IEphdmFGaWVsZE1h
cDsKKyAgICBKYXZhRmllbGRNYXAgbV9maWVsZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBCaW5k
aW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURH
RSkKKworI2VuZGlmIC8vIEphdmFDbGFzc1Byb3h5VjhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRQcm94eVY4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGViNzZmMjZm
YjM4MWVjMGQwN2M1N2YzNzM2MWYyMWFmODM5MzgwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkUHJveHlWOC5jcHAKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSmF2
YUZpZWxkUHJveHlWOC5oIgorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRp
bmdzIHsKKworSmF2YUZpZWxkUHJveHk6OkphdmFGaWVsZFByb3h5KGludCBpZCwgU3RyaW5nIG5h
bWUsIFN0cmluZyB0eXBlQ2xhc3NOYW1lKQorICAgIDogbV9pZChpZCkKKyAgICAsIG1fbmFtZShu
YW1lKQorICAgICwgbV90eXBlQ2xhc3NOYW1lKHR5cGVDbGFzc05hbWUpCit7Cit9CisKK1N0cmlu
ZyBKYXZhRmllbGRQcm94eTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmFtZTsKK30K
KworY29uc3QgY2hhciogSmF2YUZpZWxkUHJveHk6OnR5cGVDbGFzc05hbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3R5cGVDbGFzc05hbWUudXRmOCgpLmRhdGEoKTsKK30KKworSmF2YVR5cGUg
SmF2YUZpZWxkUHJveHk6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBqYXZhVHlwZUZyb21D
bGFzc05hbWUobV90eXBlQ2xhc3NOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitpbnQgSmF2YUZp
ZWxkUHJveHk6OmlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKworfSAvLyBuYW1l
c3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0ph
dmFGaWVsZFByb3h5VjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxk
UHJveHlWOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNzZkODJmODJhMTNmMDU4ZTdlYjJmMGYxOWE3YTNiZThj
YTk4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0ph
dmFGaWVsZFByb3h5VjguaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgSmF2YUZpZWxkUHJveHlWOF9oCisjZGVmaW5lIEphdmFGaWVsZFByb3h5VjhfaAorCisjaWYg
RU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiSmF2YUZpZWxkVjguaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKKy8vIEFuIGltcGxlbWVudGF0aW9u
IG9mIEphdmFGaWVsZCB0aGF0IGNhbiBiZSBjb25maWd1cmVkIG1hbnVhbGx5LCB1c2VkIGJ5Cisv
LyBKYXZhSW5zdGFuY2VQcm94eS4KK2NsYXNzIEphdmFGaWVsZFByb3h5IDogcHVibGljIEphdmFG
aWVsZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSmF2YUZpZWxkUHJveHkpOworcHVibGlj
OgorICAgIEphdmFGaWVsZFByb3h5KGludCBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlQ2xh
c3NOYW1lKTsKKworICAgIC8vIEphdmFGaWVsZCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwg
U3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGVDbGFzc05h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEphdmFUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIGlu
dCBpZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludCBtX2lkOworICAgIFN0cmluZyBtX25h
bWU7CisgICAgU3RyaW5nIG1fdHlwZUNsYXNzTmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEJp
bmRpbmdzCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJ
REdFKQorCisjZW5kaWYgLy8gSmF2YUZpZWxkUHJveHlWOF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguY3BwIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZjRiOGUwOTk0ZDljYjlkNjc1NGJhMGZlMTY5NTRhZjkzYWFjNGIyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4LmNwcApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKYXZhSW5zdGFuY2VQcm94eVY4LmgiCisKKyNpZiBFTkFCTEUoSkFWQV9CUklER0Up
CisKKyNpbmNsdWRlICJKYXZhQ2xhc3NQcm94eVY4LmgiCisjaW5jbHVkZSAiSmF2YUZpZWxkUHJv
eHlWOC5oIgorI2luY2x1ZGUgIkphdmFNZXRob2RQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisK
K0phdmFJbnN0YW5jZVByb3h5OjpKYXZhSW5zdGFuY2VQcm94eSgpCisgICAgOiBtX2NsYXNzKGFk
b3B0UHRyKG5ldyBKYXZhQ2xhc3NQcm94eSkpCit7Cit9CisKK0phdmFJbnN0YW5jZVByb3h5Ojp+
SmF2YUluc3RhbmNlUHJveHkoKQoreworfQorCitKYXZhQ2xhc3MqIEphdmFJbnN0YW5jZVByb3h5
OjpnZXRDbGFzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xhc3MuZ2V0KCk7Cit9CisKK0ph
dmFWYWx1ZSBKYXZhSW5zdGFuY2VQcm94eTo6aW52b2tlTWV0aG9kKGNvbnN0IEphdmFNZXRob2Qq
IG1ldGhvZCwgSmF2YVZhbHVlKiBhcmdzKQoreworICAgIHJldHVybiBpbnZva2VNZXRob2Qoc3Rh
dGljX2Nhc3Q8Y29uc3QgSmF2YU1ldGhvZFByb3h5Kj4obWV0aG9kKSwgYXJncyk7Cit9CisKK0ph
dmFWYWx1ZSBKYXZhSW5zdGFuY2VQcm94eTo6Z2V0RmllbGQoY29uc3QgSmF2YUZpZWxkKiBmaWVs
ZCkKK3sKKyAgICByZXR1cm4gZ2V0RmllbGQoc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUZpZWxkUHJv
eHkqPihmaWVsZCkpOworfQorCit2b2lkIEphdmFJbnN0YW5jZVByb3h5OjphZGRNZXRob2QoaW50
IGlkLCBib29sIGlzU3RhdGljLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGVDbGFzc05h
bWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+ICZwYXJhbWV0ZXJzKQoreworICAgIG1fY2xhc3MtPmFk
ZE1ldGhvZChpZCwgaXNTdGF0aWMsIG5hbWUsIHJldHVyblR5cGVDbGFzc05hbWUsIHBhcmFtZXRl
cnMpOworfQorCit2b2lkIEphdmFJbnN0YW5jZVByb3h5OjphZGRGaWVsZChpbnQgaWQsIFN0cmlu
ZyBuYW1lLCBTdHJpbmcgdHlwZUNsYXNzTmFtZSkKK3sKKyAgICBtX2NsYXNzLT5hZGRGaWVsZChp
ZCwgbmFtZSwgdHlwZUNsYXNzTmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQcm94eVY4
LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVByb3h5VjguaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZDI3NjZlNGZhZTZkYWY3Yjc5ODdiZjQ2MzI0NGU5MTYyNGFlNGMyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VQ
cm94eVY4LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEphdmFJ
bnN0YW5jZVByb3h5VjhfaAorI2RlZmluZSBKYXZhSW5zdGFuY2VQcm94eVY4X2gKKworI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKKworI2luY2x1ZGUgIkphdmFJbnN0YW5jZVY4LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBKYXZhQ2xhc3NQcm94
eTsKK2NsYXNzIEphdmFGaWVsZFByb3h5OworY2xhc3MgSmF2YU1ldGhvZFByb3h5OworCisvLyBB
biBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhSW5zdGFuY2Ugd2hpY2ggYWxsb3dzIHRoZSBtZXRob2Rz
IGFuZCBwcm9wZXJ0aWVzCisvLyBleHBvc2VkIGJ5IHRoZSBpbnN0YW5jZSB0byBiZSBzZXQgbWFu
dWFsbHkuCitjbGFzcyBKYXZhSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBKYXZhSW5zdGFuY2Ugewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEphdmFJbnN0YW5jZVByb3h5KTsKK3B1YmxpYzoKKyAg
ICBKYXZhSW5zdGFuY2VQcm94eSgpOworICAgIH5KYXZhSW5zdGFuY2VQcm94eSgpOworCisgICAg
Ly8gSmF2YUluc3RhbmNlIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBKYXZhQ2xhc3MqIGdl
dENsYXNzKCkgY29uc3Q7CisgICAgdmlydHVhbCBKYXZhVmFsdWUgaW52b2tlTWV0aG9kKGNvbnN0
IEphdmFNZXRob2QqLCBKYXZhVmFsdWUqIGFyZ3MpOworICAgIHZpcnR1YWwgSmF2YVZhbHVlIGdl
dEZpZWxkKGNvbnN0IEphdmFGaWVsZCopOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpIHt9Cisg
ICAgdmlydHVhbCB2b2lkIGVuZCgpIHt9CisKKyAgICB2b2lkIGFkZE1ldGhvZChpbnQgaWQsIGJv
b2wgaXNTdGF0aWMsIFN0cmluZyBuYW1lLCBTdHJpbmcgcmV0dXJuVHlwZUNsYXNzTmFtZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4gJnBhcmFtZXRlcnMpOworICAgIHZvaWQgYWRkRmllbGQoaW50IGlk
LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGVDbGFzc05hbWUpOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgSmF2YVZhbHVlIGludm9rZU1ldGhvZChjb25zdCBKYXZhTWV0aG9kUHJveHkqLCBKYXZh
VmFsdWUqIGFyZ3MpID0gMDsKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBnZXRGaWVsZChjb25zdCBK
YXZhRmllbGRQcm94eSopID0gMDsKKworICAgIC8vIFdlIG5lZWQgdG8gcmV0dXJuIEphdmFDbGFz
cyogZnJvbSBnZXRDbGFzcygpLgorICAgIE93blB0cjxKYXZhQ2xhc3NQcm94eT4gbV9jbGFzczsK
K307CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQorCisjZW5kaWYgLy8gSmF2YUluc3RhbmNlUHJv
eHlWOF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102382</attachid>
            <date>2011-07-29 12:54:22 -0700</date>
            <delta_ts>2011-07-29 13:03:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57859-20110729205420.patch</filename>
            <type>text/plain</type>
            <size>27008</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZTMzZTYxNDg1YjRhNTRk
NDQwY2NjMTE0ZGU3MmJjMzI0NGMzODljLi5lMTIwODA4YmM1NzU1MDM0YWVmMDJmM2Y4MjRhZjY5
NmQ2Y2QzYWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDctMjkgIFN0ZXZl
IEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJlbW92ZXMgVjgncyBK
YXZhSW5zdGFuY2VKb2JqZWN0LCBKYXZhQ2xhc3NKb2JqZWN0IGFuZCBKYXZhRmllbGRKb2JqZWN0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4NTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGVm
ZmVjdGl2ZWx5IHJldmVydHMgdGhlIGNoYW5nZXMgbWFkZSBpbiBCdWdzIDU1MzgzLCA1NzUzMyBh
bmQKKyAgICAgICAgNTU3NjYuIFRoZXNlIGNsYXNzZXMgd2VyZSBvbmx5IHVzZWQgYnkgQW5kcm9p
ZC4gSW4gdGhlIGZ1dHVyZSwgQW5kcm9pZAorICAgICAgICB3aWxsIHVzZSB0aGUgQ2hyb21pdW0g
V2ViS2l0IEFQSSB0byBpbXBsZW1lbnQgdGhlIEphdmEgYnJpZGdlLgorCisgICAgICAgIFRvd2Fy
ZHMgdGhpcyBnb2FsLCB0aGlzIHBhdGNoIC4uLgorICAgICAgICAtIFNpbXBsZmllcyB0aGUgSmF2
YUluc3RhbmNlLCBKYXZhQ2xhc3MgYW5kIEphdmFGaWVsZCBpbnRlcmZhY2VzIGZvciBWOC4KKyAg
ICAgICAgICBUaGVzZSBpbnRlcmZhY2VzIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0n
cyBXZWJLaXQgbGF5ZXIuCisgICAgICAgIC0gQWRkcyBhIEphdmFNZXRob2QgaW50ZXJmYWNlIGZv
ciBWOAorICAgICAgICAtIFJlbW92ZXMgdGhlIGp2YWx1ZSA8LT4gSmF2YVZhbHVlIGNvbnZlcnNp
b24gZnVuY3Rpb25zIGZvciBWOCwgd2hpY2ggYXJlCisgICAgICAgICAgbm93IHN1cGVyZmx1b3Vz
CisgICAgICAgIC0gUmVtb3ZlcyB0aGUgY2FsbHMgdG8gSmF2YUluc3RhbmNlOjpiZWdpbigpL2Vu
ZCgpIGZvciBWOCwgd2hpY2ggYXJlIG5vdworICAgICAgICAgIHN1cGVyZmx1b3VzCisKKyAgICAg
ICAgV2lsbCBiZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIG9uY2UgdGhlIENocm9taXVtIFdl
YktpdCBsYXllciBpcyBjb21wbGV0ZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKiBicmlk
Z2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmg6CisgICAgICAgICogYnJpZGdlL2puaS92OC9K
YXZhQ2xhc3NKb2JqZWN0VjguY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgv
SmF2YUZpZWxkSm9iamVjdFY4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4
L0phdmFGaWVsZEpvYmplY3RWOC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvdjgv
SmF2YUZpZWxkVjguaDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmpl
Y3RWOC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VK
b2JqZWN0VjguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5j
ZVY4Lmg6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZhTWV0aG9kVjguaDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2Q6On5KYXZhTWV0aG9kKToKKyAgICAgICAgKiBicmlk
Z2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okph
dmFOUE9iamVjdEhhc01ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhTlBPYmpl
Y3RJbnZva2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU5QT2JqZWN0SGFzUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU5QT2JqZWN0R2V0UHJvcGVydHkpOgor
CiAyMDExLTA3LTI4ICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGaXggc3BlZWNoIGlucHV0IGljb24gcmVjdCBvbiBSVEwgZGlyZWN0
aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0MGY3ZTUzNTlhOTYwMWRkYzkzYWU2NDVlZjU4M2E2
OWQyMTg5YjUyLi45YjcxMTIwZDkzZTllOWU0NjFiYThiZjlhOTE0MWY1ODJlYjU5MDY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0yMjU0LDE1ICsyMjU0LDEwIEBACiAgICAgICAgICAgICAnYnJpZGdl
L2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0pO
SVV0aWxpdHlQcml2YXRlLmNwcCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KTklVdGls
aXR5UHJpdmF0ZS5oJywKLSAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFDbGFzc0pvYmpl
Y3RWOC5jcHAnLAotICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzSm9iamVjdFY4
LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzVjguaCcsCi0gICAgICAg
ICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwJywKLSAgICAgICAgICAg
ICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oJywKICAgICAgICAgICAgICdicmlk
Z2Uvam5pL3Y4L0phdmFGaWVsZFY4LmgnLAotICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2
YUluc3RhbmNlSm9iamVjdFY4LmNwcCcsCi0gICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZh
SW5zdGFuY2VKb2JqZWN0VjguaCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhSW5z
dGFuY2VWOC5oJywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFNZXRob2RWOC5oJywK
ICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNwcCcsCiAgICAgICAg
ICAgICAnYnJpZGdlL2puaS92OC9KYXZhTlBPYmplY3RWOC5oJywKICAgICAgICAgICAgICdicmlk
Z2Uvam5pL3Y4L0phdmFTdHJpbmdWOC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKaW5kZXggNWJmZWViYTE4ZjM2MTAwMjQ2MWVi
NWNkOWI1ZTdmODQwMzIyZGUxMi4uODhlNDE3NDJiMmY3NGYwNGQ3ZjdmYjQ4ZjZmMGZjZjI4Mzkx
MTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5
UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5
UHJpdmF0ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShKQVZBX0JSSURHRSkK
IAotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpvYmplY3RWOC5oIgorI2luY2x1ZGUgIkphdmFJbnN0
YW5jZVY4LmgiCiAjaW5jbHVkZSAiSmF2YU5QT2JqZWN0VjguaCIKICNpbmNsdWRlICJKYXZhVmFs
dWVWOC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTIzNCwxMDYgKzIzNCw2
IEBAIHZvaWQgY29udmVydEphdmFWYWx1ZVRvTlBWYXJpYW50KEphdmFWYWx1ZSB2YWx1ZSwgTlBW
YXJpYW50KiByZXN1bHQpCiAgICAgfQogfQogCi1KYXZhVmFsdWUganZhbHVlVG9KYXZhVmFsdWUo
Y29uc3QganZhbHVlJiB2YWx1ZSwgY29uc3QgSmF2YVR5cGUmIHR5cGUpCi17Ci0gICAgSmF2YVZh
bHVlIHJlc3VsdDsKLSAgICByZXN1bHQubV90eXBlID0gdHlwZTsKLSAgICBzd2l0Y2ggKHJlc3Vs
dC5tX3R5cGUpIHsKLSAgICBjYXNlIEphdmFUeXBlVm9pZDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAgcmVzdWx0Lm1fb2JqZWN0VmFsdWUgPSBuZXcg
SmF2YUluc3RhbmNlSm9iamVjdCh2YWx1ZS5sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
YXZhVHlwZVN0cmluZzoKLSAgICAgICAgewotICAgICAgICAgICAganN0cmluZyBqYXZhU3RyaW5n
ID0gc3RhdGljX2Nhc3Q8anN0cmluZz4odmFsdWUubCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihnZXRKTklFbnYo
KSwgamF2YVN0cmluZyk7Ci0gICAgICAgICAgICAvLyBXZSB0YWtlIGEgY29weSB0byBhbGxvdyB0
aGUgSmF2YSBTdHJpbmcgdG8gYmUgcmVsZWFzZWQuCi0gICAgICAgICAgICByZXN1bHQubV9zdHJp
bmdWYWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLCBnZXRKTklFbnYoKS0+R2V0U3RyaW5nTGVuZ3Ro
KGphdmFTdHJpbmcpKTsKLSAgICAgICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJ
bkVudihnZXRKTklFbnYoKSwgamF2YVN0cmluZywgY2hhcmFjdGVycyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHJlc3VsdC5t
X2Jvb2xlYW5WYWx1ZSA9IHZhbHVlLnogPT0gSk5JX0ZBTFNFID8gZmFsc2UgOiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlQnl0ZToKLSAgICAgICAgcmVzdWx0Lm1fYnl0
ZVZhbHVlID0gdmFsdWUuYjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUNoYXI6
Ci0gICAgICAgIHJlc3VsdC5tX2NoYXJWYWx1ZSA9IHZhbHVlLmM7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKLSAgICAgICAgcmVzdWx0Lm1fc2hvcnRWYWx1ZSA9IHZh
bHVlLnM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVJbnQ6Ci0gICAgICAgIHJl
c3VsdC5tX2ludFZhbHVlID0gdmFsdWUuaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZh
VHlwZUxvbmc6Ci0gICAgICAgIHJlc3VsdC5tX2xvbmdWYWx1ZSA9IHZhbHVlLmo7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoKLSAgICAgICAgcmVzdWx0Lm1fZmxvYXRW
YWx1ZSA9IHZhbHVlLmY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6
Ci0gICAgICAgIHJlc3VsdC5tX2RvdWJsZVZhbHVlID0gdmFsdWUuZDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotanZhbHVlIGphdmFWYWx1ZVRvSnZhbHVlKGNvbnN0IEphdmFWYWx1ZSYg
dmFsdWUpCi17Ci0gICAganZhbHVlIHJlc3VsdDsKLSAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6
ZW9mKGp2YWx1ZSkpOwotICAgIHN3aXRjaCAodmFsdWUubV90eXBlKSB7Ci0gICAgY2FzZSBKYXZh
VHlwZVZvaWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0gICAg
ICAgIGlmICh2YWx1ZS5tX29iamVjdFZhbHVlKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG1ldGhv
ZCBpcyB1c2VkIG9ubHkgYnkgSmF2YUluc3RhbmNlSm9iamVjdCwgc28gd2Uga25vdyB0aGUKLSAg
ICAgICAgICAgIC8vIGRlcml2ZWQgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgICAgICAgICAgcmVz
dWx0LmwgPSBzdGF0aWNfY2FzdDxKYXZhSW5zdGFuY2VKb2JqZWN0Kj4odmFsdWUubV9vYmplY3RW
YWx1ZS5nZXQoKSktPmphdmFJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSmF2YVR5cGVTdHJpbmc6Ci0gICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIGxvY2Fs
IHJlZmVyZW5jZSB0byBhIG5ldyBTdHJpbmcgb2JqZWN0LCB3aGljaCB3aWxsCi0gICAgICAgIC8v
IGJlIHJlbGVhc2VkIHdoZW4gdGhlIGNhbGwgc3RhY2sgcmV0dXJucyB0byBKYXZhLiBOb3RlIHRo
YXQgdGhpcwotICAgICAgICAvLyBtYXkgY2F1c2UgbGVha3MgaWYgaW52b2tlZCBmcm9tIGEgbmF0
aXZlIG1lc3NhZ2UgbG9vcCwgYXMgaXMgdGhlCi0gICAgICAgIC8vIGNhc2UgaW4gd29ya2Vycy4K
LSAgICAgICAgcmVzdWx0LmwgPSBnZXRKTklFbnYoKS0+TmV3U3RyaW5nKHZhbHVlLm1fc3RyaW5n
VmFsdWUuY2hhcmFjdGVycygpLCB2YWx1ZS5tX3N0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHJlc3VsdC56ID0g
dmFsdWUubV9ib29sZWFuVmFsdWUgPyBKTklfVFJVRSA6IEpOSV9GQUxTRTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAgIHJlc3VsdC5iID0gdmFsdWUubV9i
eXRlVmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVDaGFyOgotICAgICAg
ICByZXN1bHQuYyA9IHZhbHVlLm1fY2hhclZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEphdmFUeXBlU2hvcnQ6Ci0gICAgICAgIHJlc3VsdC5zID0gdmFsdWUubV9zaG9ydFZhbHVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlSW50OgotICAgICAgICByZXN1bHQuaSA9
IHZhbHVlLm1faW50VmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVMb25n
OgotICAgICAgICByZXN1bHQuaiA9IHZhbHVlLm1fbG9uZ1ZhbHVlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEphdmFUeXBlRmxvYXQ6Ci0gICAgICAgIHJlc3VsdC5mID0gdmFsdWUubV9mbG9h
dFZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlRG91YmxlOgotICAgICAg
ICByZXN1bHQuZCA9IHZhbHVlLm1fZG91YmxlVmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5oCmluZGV4
IDAyODI5MDQ3OWUxNmY4MTAyODJiOWNmMzE5NTVjNWU4NDQ5ODc5YTMuLjIxNWM1NTk1NzFjM2Jl
MTExY2RmOTVmOTlmYzBiZWFlMzVmNjZkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmgKQEAgLTQxLDkgKzQxLDYgQEAgY2xhc3MgSmF2
YVZhbHVlOwogSmF2YVZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb0phdmFWYWx1ZShOUFZhcmlhbnQs
IGNvbnN0IFN0cmluZyYgamF2YUNsYXNzKTsKIHZvaWQgY29udmVydEphdmFWYWx1ZVRvTlBWYXJp
YW50KEphdmFWYWx1ZSwgTlBWYXJpYW50Kik7CiAKLUphdmFWYWx1ZSBqdmFsdWVUb0phdmFWYWx1
ZShjb25zdCBqdmFsdWUmLCBjb25zdCBKYXZhVHlwZSYpOwotanZhbHVlIGphdmFWYWx1ZVRvSnZh
bHVlKGNvbnN0IEphdmFWYWx1ZSYpOwotCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgv
SmF2YUNsYXNzSm9iamVjdFY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2
YUNsYXNzSm9iamVjdFY4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiZmQ2
MzQ2YmE1M2UxZjFmNjhmYWUzMGU0NDU1Y2M5MDhhMzk5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0ph
dmFDbGFzc0pvYmplY3RWOC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFDbGFzc0pvYmplY3RWOC5oIgot
Ci0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSmF2YUZpZWxkSm9iamVjdFY4
LmgiCi0jaW5jbHVkZSAiSmF2YU1ldGhvZEpvYmplY3QuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QmluZGluZ3M7Ci0KLUphdmFDbGFzc0pvYmplY3Q6OkphdmFDbGFzc0pvYmplY3Qoam9iamVj
dCBhbkluc3RhbmNlKQotewotICAgIGpvYmplY3QgYUNsYXNzID0gY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0Pihhbkluc3RhbmNlLCAiZ2V0Q2xhc3MiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwotCi0g
ICAgaWYgKCFhQ2xhc3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gY2FsbCBnZXRD
bGFzcyBvbiBpbnN0YW5jZSAlcCIsIGFuSW5zdGFuY2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIC8vIEdldCB0aGUgZmll
bGRzCi0gICAgamFycmF5IGZpZWxkcyA9IHN0YXRpY19jYXN0PGphcnJheT4oY2FsbEpOSU1ldGhv
ZDxqb2JqZWN0PihhQ2xhc3MsICJnZXRGaWVsZHMiLCAiKClbTGphdmEvbGFuZy9yZWZsZWN0L0Zp
ZWxkOyIpKTsKLSAgICBpbnQgbnVtRmllbGRzID0gZW52LT5HZXRBcnJheUxlbmd0aChmaWVsZHMp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRmllbGRzOyBpKyspIHsKLSAgICAgICAgam9i
amVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9i
amVjdEFycmF5PihmaWVsZHMpLCBpKTsKLSAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcg
SmF2YUZpZWxkSm9iamVjdChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xh
c3MgZGVzdHJ1Y3RvcgotICAgICAgICBtX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1lKCksIGFGaWVs
ZCk7Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7Ci0gICAgfQotCi0gICAg
Ly8gR2V0IHRoZSBtZXRob2RzCi0gICAgamFycmF5IG1ldGhvZHMgPSBzdGF0aWNfY2FzdDxqYXJy
YXk+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0TWV0aG9kcyIsICIoKVtMamF2
YS9sYW5nL3JlZmxlY3QvTWV0aG9kOyIpKTsKLSAgICBpbnQgbnVtTWV0aG9kcyA9IGVudi0+R2V0
QXJyYXlMZW5ndGgobWV0aG9kcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1NZXRob2Rz
OyBpKyspIHsKLSAgICAgICAgam9iamVjdCBhSk1ldGhvZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlF
bGVtZW50KHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4obWV0aG9kcyksIGkpOwotICAgICAgICBK
YXZhTWV0aG9kKiBhTWV0aG9kID0gbmV3IEphdmFNZXRob2RKb2JqZWN0KGVudiwgYUpNZXRob2Qp
OyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgotICAgICAgICBNZXRob2RM
aXN0KiBtZXRob2RMaXN0ID0gbV9tZXRob2RzLmdldChhTWV0aG9kLT5uYW1lKCkpOwotICAgICAg
ICBpZiAoIW1ldGhvZExpc3QpIHsKLSAgICAgICAgICAgIG1ldGhvZExpc3QgPSBuZXcgTWV0aG9k
TGlzdCgpOwotICAgICAgICAgICAgbV9tZXRob2RzLnNldChhTWV0aG9kLT5uYW1lKCksIG1ldGhv
ZExpc3QpOwotICAgICAgICB9Ci0gICAgICAgIG1ldGhvZExpc3QtPmFwcGVuZChhTWV0aG9kKTsK
LSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhSk1ldGhvZCk7Ci0gICAgfQotICAgIGVudi0+
RGVsZXRlTG9jYWxSZWYoZmllbGRzKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1ldGhvZHMp
OwotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUNsYXNzKTsKLX0KLQotSmF2YUNsYXNzSm9iamVj
dDo6fkphdmFDbGFzc0pvYmplY3QoKQotewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZpZWxkcyk7
Ci0gICAgbV9maWVsZHMuY2xlYXIoKTsKLQotICAgIE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKLSAgICBmb3IgKE1ldGhvZExpc3RNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnNlY29uZDsKLSAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKCptZXRob2RMaXN0KTsKLSAgICAgICAgZGVsZXRlIG1ldGhvZExpc3Q7
Ci0gICAgfQotICAgIG1fbWV0aG9kcy5jbGVhcigpOwotfQotCi1NZXRob2RMaXN0IEphdmFDbGFz
c0pvYmplY3Q6Om1ldGhvZHNOYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAotewotICAgIE1l
dGhvZExpc3QqIG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KG5hbWUpOwotCi0gICAgaWYgKG1l
dGhvZExpc3QpCi0gICAgICAgIHJldHVybiAqbWV0aG9kTGlzdDsKLSAgICByZXR1cm4gTWV0aG9k
TGlzdCgpOwotfQotCi1KYXZhRmllbGQqIEphdmFDbGFzc0pvYmplY3Q6OmZpZWxkTmFtZWQoY29u
c3QgY2hhciogbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9maWVsZHMuZ2V0KG5hbWUpOwot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiZjg5NWY5Y2M0ZGVlNDljYmJhMWRlNDc2OTIxNTEzYWYyZTVmZGFiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkSm9iamVjdFY4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBT
b3VyY2UgUHJvamVjdAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZh
RmllbGRKb2JqZWN0VjguaCIKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotdXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci0KLUphdmFGaWVsZEpvYmplY3Q6OkphdmFGaWVsZEpvYmpl
Y3QoSk5JRW52KiBlbnYsIGpvYmplY3QgYUZpZWxkKQotewotICAgIC8vIEdldCBmaWVsZCB0eXBl
Ci0gICAgam9iamVjdCBmaWVsZFR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwg
ImdldFR5cGUiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwotICAgIGpzdHJpbmcgZmllbGRUeXBl
TmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRU
eXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKLSAgICBtX3R5cGVDbGFz
c05hbWUgPSBKYXZhU3RyaW5nKGVudiwgZmllbGRUeXBlTmFtZSk7Ci0gICAgbV90eXBlID0gamF2
YVR5cGVGcm9tQ2xhc3NOYW1lKG1fdHlwZUNsYXNzTmFtZS51dGY4KCkpOwotCi0gICAgLy8gR2V0
IGZpZWxkIG5hbWUKLSAgICBqc3RyaW5nIGZpZWxkTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+
KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYUZpZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcv
U3RyaW5nOyIpKTsKLSAgICBtX25hbWUgPSBKYXZhU3RyaW5nKGVudiwgZmllbGROYW1lKTsKLQot
ICAgIG1fZmllbGQgPSBKb2JqZWN0V3JhcHBlcjo6Y3JlYXRlKGFGaWVsZCk7Ci19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS92OC9KYXZhRmllbGRKb2JqZWN0VjguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzJjNzg1NzVjM2IxZjdiZWJmZGMwNWFhOGEwMDU5NTdjOGJhOGVjZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBKYXZhRmllbGRKb2JqZWN0VjhfaAotI2RlZmluZSBKYXZhRmllbGRKb2Jq
ZWN0VjhfaAotCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSmF2YUZpZWxk
VjguaCIKLSNpbmNsdWRlICJKYXZhU3RyaW5nLmgiCi0jaW5jbHVkZSAiSm9iamVjdFdyYXBwZXIu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIEph
dmFGaWVsZEpvYmplY3QgOiBwdWJsaWMgSmF2YUZpZWxkIHsKLXB1YmxpYzoKLSAgICBKYXZhRmll
bGRKb2JqZWN0KEpOSUVudiosIGpvYmplY3QpOwotCi0gICAgLy8gSmF2YUZpZWxkIGltcGxlbWVu
dGF0aW9uCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5p
bXBsKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGVDbGFzc05hbWUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGVDbGFzc05hbWUudXRmOCgpOyB9Ci0gICAgdmlydHVhbCBKYXZhVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgSmF2YVN0cmlu
ZyBtX25hbWU7Ci0gICAgSmF2YVN0cmluZyBtX3R5cGVDbGFzc05hbWU7Ci0gICAgSmF2YVR5cGUg
bV90eXBlOwotICAgIFJlZlB0cjxKb2JqZWN0V3JhcHBlcj4gbV9maWVsZDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSmF2YUZpZWxkSm9iamVjdFY4X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkVjguaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkVjguaAppbmRleCAzYzI0Y2Y1YmFmZWYy
OWQ3OTA1YTQwZmE0ZDI5YTA2MTNmZmZkODI1Li44ZjljOTgyMmJlNjEzMmU3OTgwMmI1ZDQwNzg0
MjEzMzJiZDJlYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0ph
dmFGaWVsZFY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRW
OC5oCkBAIC00MCw4ICs0MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5KYXZhRmllbGQoKSB7
fQogCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHR5cGVDbGFzc05hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBKYXZhVHlw
ZSB0eXBlKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiYWI1MjZiZTU5NjZhYjRmNTc1
ZjcyNWEwNWQzZDVhZjU2N2E2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpvYmpl
Y3RWOC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpvYmplY3RWOC5oIgot
Ci0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUu
aCIKLSNpbmNsdWRlICJKYXZhQ2xhc3NKb2JqZWN0VjguaCIKLSNpbmNsdWRlICJKYXZhRmllbGRW
OC5oIgotI2luY2x1ZGUgIkphdmFNZXRob2QuaCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKLQotSmF2YUluc3RhbmNl
Sm9iamVjdDo6SmF2YUluc3RhbmNlSm9iamVjdChqb2JqZWN0IGluc3RhbmNlKQotICAgIDogbV9p
bnN0YW5jZShKb2JqZWN0V3JhcHBlcjo6Y3JlYXRlKGluc3RhbmNlKSkKLXsKLX0KLQotI2RlZmlu
ZSBOVU1fTE9DQUxfUkVGUyA2NAotCi12b2lkIEphdmFJbnN0YW5jZUpvYmplY3Q6OmJlZ2luKCkK
LXsKLSAgICBnZXRKTklFbnYoKS0+UHVzaExvY2FsRnJhbWUoTlVNX0xPQ0FMX1JFRlMpOwotfQot
Ci12b2lkIEphdmFJbnN0YW5jZUpvYmplY3Q6OmVuZCgpCi17Ci0gICAgZ2V0Sk5JRW52KCktPlBv
cExvY2FsRnJhbWUoMCk7Ci19Ci0KLUphdmFDbGFzcyogSmF2YUluc3RhbmNlSm9iamVjdDo6Z2V0
Q2xhc3MoKSBjb25zdAotewotICAgIGlmICghbV9jbGFzcykKLSAgICAgICAgbV9jbGFzcyA9IGFk
b3B0UHRyKG5ldyBKYXZhQ2xhc3NKb2JqZWN0KGphdmFJbnN0YW5jZSgpKSk7Ci0gICAgcmV0dXJu
IG1fY2xhc3MuZ2V0KCk7Ci19Ci0KLUphdmFWYWx1ZSBKYXZhSW5zdGFuY2VKb2JqZWN0OjppbnZv
a2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCogbWV0aG9kLCBKYXZhVmFsdWUqIGFyZ3MpCi17Ci0g
ICAgQVNTRVJUKGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChtZXRob2QtPm5hbWUoKS51dGY4KCku
ZGF0YSgpKS5maW5kKG1ldGhvZCkgIT0gbm90Rm91bmQpOwotICAgIHVuc2lnbmVkIGludCBudW1Q
YXJhbXMgPSBtZXRob2QtPm51bVBhcmFtZXRlcnMoKTsKLSAgICBPd25BcnJheVB0cjxqdmFsdWU+
IGp2YWx1ZUFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyBqdmFsdWVbbnVtUGFyYW1zXSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAganZh
bHVlQXJnc1tpXSA9IGphdmFWYWx1ZVRvSnZhbHVlKGFyZ3NbaV0pOwotICAgIGp2YWx1ZSByZXN1
bHQgPSBjYWxsSk5JTWV0aG9kKGphdmFJbnN0YW5jZSgpLCBtZXRob2QtPnJldHVyblR5cGUoKSwg
bWV0aG9kLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbWV0aG9kLT5zaWduYXR1cmUoKSwganZhbHVl
QXJncy5nZXQoKSk7Ci0gICAgcmV0dXJuIGp2YWx1ZVRvSmF2YVZhbHVlKHJlc3VsdCwgbWV0aG9k
LT5yZXR1cm5UeXBlKCkpOwotfQotCi1KYXZhVmFsdWUgSmF2YUluc3RhbmNlSm9iamVjdDo6Z2V0
RmllbGQoY29uc3QgSmF2YUZpZWxkKiBmaWVsZCkKLXsKLSAgICBBU1NFUlQoZ2V0Q2xhc3MoKS0+
ZmllbGROYW1lZChmaWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpID09IGZpZWxkKTsKLSAgICBy
ZXR1cm4ganZhbHVlVG9KYXZhVmFsdWUoZ2V0Sk5JRmllbGQoamF2YUluc3RhbmNlKCksIGZpZWxk
LT50eXBlKCksIGZpZWxkLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZmllbGQtPnR5cGVDbGFzc05h
bWUoKSksIGZpZWxkLT50eXBlKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VK
b2JqZWN0VjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9i
amVjdFY4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MDM3NmQ3NTRlNDRkMWMx
OGIxMWQ2ODlhNzU0Y2Y1ODA0NjMzYjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VK
b2JqZWN0VjguaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEphdmFJbnN0YW5jZUpvYmplY3RWOF9oCi0jZGVmaW5lIEphdmFJbnN0YW5jZUpv
YmplY3RWOF9oCi0KLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNpbmNsdWRlICJKTklVdGls
aXR5LmgiCi0jaW5jbHVkZSAiSmF2YUluc3RhbmNlVjguaCIKLSNpbmNsdWRlICJKb2JqZWN0V3Jh
cHBlci5oIgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFj
ZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIEphdmFJbnN0YW5jZUpvYmplY3QgOiBwdWJsaWMgSmF2YUlu
c3RhbmNlIHsKLXB1YmxpYzoKLSAgICBKYXZhSW5zdGFuY2VKb2JqZWN0KGpvYmplY3QgaW5zdGFu
Y2UpOwotCi0gICAgLy8gSmF2YUluc3RhbmNlIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCBK
YXZhQ2xhc3MqIGdldENsYXNzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKYXZhVmFsdWUgaW52b2tl
TWV0aG9kKGNvbnN0IEphdmFNZXRob2QqLCBKYXZhVmFsdWUqIGFyZ3MpOwotICAgIHZpcnR1YWwg
SmF2YVZhbHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCopOwotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbigpOwotICAgIHZpcnR1YWwgdm9pZCBlbmQoKTsKLQotICAgIGpvYmplY3QgamF2YUluc3Rh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKTsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgUmVmUHRyPEpvYmplY3RXcmFwcGVyPiBtX2luc3RhbmNlOwotICAgIG11dGFibGUg
T3duUHRyPEphdmFDbGFzcz4gbV9jbGFzczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdz
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQot
Ci0jZW5kaWYgLy8gSmF2YUluc3RhbmNlSm9iamVjdFY4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaAppbmRleCA3NDM2ZGU3OTEyMzZhNmIxYTA3MTRh
MmViMzUyYmU4MTBiODM0NjZjLi4yMGQwMjc0Mjg0MzNkOWU2NGFlOTFiYjY0ZDRmNGUwODFlZDlk
YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5j
ZVY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VWOC5o
CkBAIC00OSwxNCArNDksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKYXZhQ2xhc3MqIGdldENs
YXNzKCkgY29uc3QgPSAwOwogICAgIC8vIGFyZ3MgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGgg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YKICAgICAvLyBhcmd1bWVudHMg
ZXhwZWN0ZWQgYnkgdGhlIG1ldGhvZC4KLSAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VNZXRo
b2QoY29uc3QgSmF2YU1ldGhvZCosIEphdmFWYWx1ZSogYXJncykgPSAwOwotICAgIHZpcnR1YWwg
SmF2YVZhbHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCopID0gMDsKLQotICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1haW4gZW50cnkgcG9p
bnRzIGludG8KLSAgICAvLyB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9ucy4gIFRoZXkgY2FuIGJl
IHVzZWQgdG8gZXN0YWJsaXNoIGFuZCBjbGVhbnVwCi0gICAgLy8gYW55IG5lZWRlZCBzdGF0ZS4K
LSAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCYs
IEphdmFWYWx1ZSogYXJncykgPSAwOworICAgIHZpcnR1YWwgSmF2YVZhbHVlIGdldEZpZWxkKGNv
bnN0IEphdmFGaWVsZCYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwCmluZGV4IGE4
M2ZjNjdiYzU1NjI5YWY3OTU1OTMwZWRjOGZjNjg5MGYyODA1OGYuLjkyYTVlYWI3NDk5NTM2YzQ1
ZWFjNjJjYTBiMTI5NTk2MjU0MThjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwCkBAIC05Nyw5ICs5Nyw3IEBAIGJvb2wgSmF2YU5QT2Jq
ZWN0SGFzTWV0aG9kKE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQogICAg
IGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW5zdGFuY2UtPmJlZ2lu
KCk7CiAgICAgYm9vbCByZXN1bHQgPSAoaW5zdGFuY2UtPmdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChuYW1lKS5zaXplKCkgPiAwKTsKLSAgICBpbnN0YW5jZS0+ZW5kKCk7CiAKICAgICAvLyBUT0RP
OiB1c2UgTlBOX01lbUZyZWUKICAgICBmcmVlKG5hbWUpOwpAQCAtMTE2LDggKzExNCw2IEBAIGJv
b2wgSmF2YU5QT2JqZWN0SW52b2tlKE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBOUFZhcmlhbnQqCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLQogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlz
dCA9IGluc3RhbmNlLT5nZXRDbGFzcygpLT5tZXRob2RzTmFtZWQobmFtZSk7CiAgICAgLy8gVE9E
TzogdXNlIE5QTl9NZW1GcmVlCiAgICAgZnJlZShuYW1lKTsKQEAgLTE0NCw4ICsxNDAsNyBAQCBi
b29sIEphdmFOUE9iamVjdEludm9rZShOUE9iamVjdCogb2JqLCBOUElkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgTlBWYXJpYW50KgogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
YXJnQ291bnQ7IGkrKykKICAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0TlBWYXJpYW50VG9KYXZh
VmFsdWUoYXJnc1tpXSwgak1ldGhvZC0+cGFyYW1ldGVyQXQoaSkpOwogCi0gICAgSmF2YVZhbHVl
IGpSZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGpNZXRob2QsIGpBcmdzKTsKLSAgICBp
bnN0YW5jZS0+ZW5kKCk7CisgICAgSmF2YVZhbHVlIGpSZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tl
TWV0aG9kKCpqTWV0aG9kLCBqQXJncyk7CiAgICAgZGVsZXRlW10gakFyZ3M7CiAKICAgICBWT0lE
X1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKQEAgLTE2MSw5ICsxNTYsNyBAQCBib29sIEphdmFOUE9i
amVjdEhhc1Byb3BlcnR5KE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQog
ICAgIE5QVVRGOCogbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpOwog
ICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluc3RhbmNlLT5iZWdp
bigpOwogICAgIGJvb2wgcmVzdWx0ID0gaW5zdGFuY2UtPmdldENsYXNzKCktPmZpZWxkTmFtZWQo
bmFtZSk7Ci0gICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIGZyZWUobmFtZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTE3OCwxNCArMTcxLDEyIEBAIGJvb2wgSmF2YU5QT2JqZWN0R2V0UHJv
cGVydHkoTlBPYmplY3QqIG9iaiwgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5QVmFyaWFudCoK
ICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGluc3RhbmNlLT5i
ZWdpbigpOwogICAgIEphdmFGaWVsZCogZmllbGQgPSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKS0+Zmll
bGROYW1lZChuYW1lKTsKICAgICBmcmVlKG5hbWUpOyAvLyBUT0RPOiB1c2UgTlBOX01lbUZyZWUK
ICAgICBpZiAoIWZpZWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKYXZhVmFsdWUg
dmFsdWUgPSBpbnN0YW5jZS0+Z2V0RmllbGQoZmllbGQpOwotICAgIGluc3RhbmNlLT5lbmQoKTsK
KyAgICBKYXZhVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RmllbGQoKmZpZWxkKTsKIAogICAg
IGNvbnZlcnRKYXZhVmFsdWVUb05QVmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102384</attachid>
            <date>2011-07-29 13:03:31 -0700</date>
            <delta_ts>2011-08-08 17:55:45 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>removeJobjectClasses.txt</filename>
            <type>text/plain</type>
            <size>30725</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZTMzZTYxLi5lMTIwODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTEtMDctMjkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisg
ICAgICAgIFJlbW92ZXMgVjgncyBKYXZhSW5zdGFuY2VKb2JqZWN0LCBKYXZhQ2xhc3NKb2JqZWN0
IGFuZCBKYXZhRmllbGRKb2JqZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc4NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGVmZmVjdGl2ZWx5IHJldmVydHMgdGhlIGNoYW5nZXMgbWFkZSBp
biBCdWdzIDU1MzgzLCA1NzUzMyBhbmQKKyAgICAgICAgNTU3NjYuIFRoZXNlIGNsYXNzZXMgd2Vy
ZSBvbmx5IHVzZWQgYnkgQW5kcm9pZC4gSW4gdGhlIGZ1dHVyZSwgQW5kcm9pZAorICAgICAgICB3
aWxsIHVzZSB0aGUgQ2hyb21pdW0gV2ViS2l0IEFQSSB0byBpbXBsZW1lbnQgdGhlIEphdmEgYnJp
ZGdlLgorCisgICAgICAgIFRvd2FyZHMgdGhpcyBnb2FsLCB0aGlzIHBhdGNoIC4uLgorICAgICAg
ICAtIFNpbXBsZmllcyB0aGUgSmF2YUluc3RhbmNlLCBKYXZhQ2xhc3MgYW5kIEphdmFGaWVsZCBp
bnRlcmZhY2VzIGZvciBWOC4KKyAgICAgICAgICBUaGVzZSBpbnRlcmZhY2VzIHdpbGwgYmUgaW1w
bGVtZW50ZWQgaW4gQ2hyb21pdW0ncyBXZWJLaXQgbGF5ZXIuCisgICAgICAgIC0gQWRkcyBhIEph
dmFNZXRob2QgaW50ZXJmYWNlIGZvciBWOAorICAgICAgICAtIFJlbW92ZXMgdGhlIGp2YWx1ZSA8
LT4gSmF2YVZhbHVlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBWOCwgd2hpY2ggYXJlCisgICAg
ICAgICAgbm93IHN1cGVyZmx1b3VzCisgICAgICAgIC0gUmVtb3ZlcyB0aGUgY2FsbHMgdG8gSmF2
YUluc3RhbmNlOjpiZWdpbigpL2VuZCgpIGZvciBWOCwgd2hpY2ggYXJlIG5vdworICAgICAgICAg
IHN1cGVyZmx1b3VzCisKKyAgICAgICAgV2lsbCBiZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
IG9uY2UgdGhlIENocm9taXVtIFdlYktpdCBsYXllciBpcyBjb21wbGV0ZS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRl
LmNwcDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmg6CisgICAg
ICAgICogYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUZpZWxkSm9iamVjdFY4LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGJyaWRnZS9qbmkvdjgvSmF2YUZpZWxkVjguaDoKKyAgICAgICAgKiBicmlkZ2Uvam5p
L3Y4L0phdmFJbnN0YW5jZUpvYmplY3RWOC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdl
L2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0VjguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlk
Z2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4Lmg6CisgICAgICAgICogYnJpZGdlL2puaS92OC9KYXZh
TWV0aG9kVjguaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFNZXRob2Q6On5KYXZhTWV0
aG9kKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkphdmFOUE9iamVjdEhhc01ldGhvZCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpKYXZhTlBPYmplY3RJbnZva2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
SmF2YU5QT2JqZWN0SGFzUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YU5Q
T2JqZWN0R2V0UHJvcGVydHkpOgorCiAyMDExLTA3LTI4ICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxs
ZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggc3BlZWNoIGlucHV0IGlj
b24gcmVjdCBvbiBSVEwgZGlyZWN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0MGY3ZTUzLi45
YjcxMTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjU0LDE1ICsyMjU0LDEwIEBACiAgICAgICAg
ICAgICAnYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oJywKICAgICAgICAgICAgICdicmlk
Z2Uvam5pL3Y4L0pOSVV0aWxpdHlQcml2YXRlLmNwcCcsCiAgICAgICAgICAgICAnYnJpZGdlL2pu
aS92OC9KTklVdGlsaXR5UHJpdmF0ZS5oJywKLSAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0ph
dmFDbGFzc0pvYmplY3RWOC5jcHAnLAotICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNs
YXNzSm9iamVjdFY4LmgnLAogICAgICAgICAgICAgJ2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNzVjgu
aCcsCi0gICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwJywK
LSAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oJywKICAgICAg
ICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFGaWVsZFY4LmgnLAotICAgICAgICAgICAgJ2JyaWRn
ZS9qbmkvdjgvSmF2YUluc3RhbmNlSm9iamVjdFY4LmNwcCcsCi0gICAgICAgICAgICAnYnJpZGdl
L2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0VjguaCcsCiAgICAgICAgICAgICAnYnJpZGdlL2pu
aS92OC9KYXZhSW5zdGFuY2VWOC5oJywKKyAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFN
ZXRob2RWOC5oJywKICAgICAgICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFOUE9iamVjdFY4LmNw
cCcsCiAgICAgICAgICAgICAnYnJpZGdlL2puaS92OC9KYXZhTlBPYmplY3RWOC5oJywKICAgICAg
ICAgICAgICdicmlkZ2Uvam5pL3Y4L0phdmFTdHJpbmdWOC5oJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKaW5kZXggNWJmZWViYS4u
ODhlNDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGls
aXR5UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGls
aXR5UHJpdmF0ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShKQVZBX0JSSURH
RSkKIAotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpvYmplY3RWOC5oIgorI2luY2x1ZGUgIkphdmFJ
bnN0YW5jZVY4LmgiCiAjaW5jbHVkZSAiSmF2YU5QT2JqZWN0VjguaCIKICNpbmNsdWRlICJKYXZh
VmFsdWVWOC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTIzNCwxMDYgKzIz
NCw2IEBAIHZvaWQgY29udmVydEphdmFWYWx1ZVRvTlBWYXJpYW50KEphdmFWYWx1ZSB2YWx1ZSwg
TlBWYXJpYW50KiByZXN1bHQpCiAgICAgfQogfQogCi1KYXZhVmFsdWUganZhbHVlVG9KYXZhVmFs
dWUoY29uc3QganZhbHVlJiB2YWx1ZSwgY29uc3QgSmF2YVR5cGUmIHR5cGUpCi17Ci0gICAgSmF2
YVZhbHVlIHJlc3VsdDsKLSAgICByZXN1bHQubV90eXBlID0gdHlwZTsKLSAgICBzd2l0Y2ggKHJl
c3VsdC5tX3R5cGUpIHsKLSAgICBjYXNlIEphdmFUeXBlVm9pZDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAgcmVzdWx0Lm1fb2JqZWN0VmFsdWUgPSBu
ZXcgSmF2YUluc3RhbmNlSm9iamVjdCh2YWx1ZS5sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKYXZhVHlwZVN0cmluZzoKLSAgICAgICAgewotICAgICAgICAgICAganN0cmluZyBqYXZhU3Ry
aW5nID0gc3RhdGljX2Nhc3Q8anN0cmluZz4odmFsdWUubCk7Ci0gICAgICAgICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihnZXRKTklF
bnYoKSwgamF2YVN0cmluZyk7Ci0gICAgICAgICAgICAvLyBXZSB0YWtlIGEgY29weSB0byBhbGxv
dyB0aGUgSmF2YSBTdHJpbmcgdG8gYmUgcmVsZWFzZWQuCi0gICAgICAgICAgICByZXN1bHQubV9z
dHJpbmdWYWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzLCBnZXRKTklFbnYoKS0+R2V0U3RyaW5nTGVu
Z3RoKGphdmFTdHJpbmcpKTsKLSAgICAgICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJp
bmdJbkVudihnZXRKTklFbnYoKSwgamF2YVN0cmluZywgY2hhcmFjdGVycyk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHJlc3Vs
dC5tX2Jvb2xlYW5WYWx1ZSA9IHZhbHVlLnogPT0gSk5JX0ZBTFNFID8gZmFsc2UgOiB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlQnl0ZToKLSAgICAgICAgcmVzdWx0Lm1f
Ynl0ZVZhbHVlID0gdmFsdWUuYjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUNo
YXI6Ci0gICAgICAgIHJlc3VsdC5tX2NoYXJWYWx1ZSA9IHZhbHVlLmM7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKLSAgICAgICAgcmVzdWx0Lm1fc2hvcnRWYWx1ZSA9
IHZhbHVlLnM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVJbnQ6Ci0gICAgICAg
IHJlc3VsdC5tX2ludFZhbHVlID0gdmFsdWUuaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
YXZhVHlwZUxvbmc6Ci0gICAgICAgIHJlc3VsdC5tX2xvbmdWYWx1ZSA9IHZhbHVlLmo7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoKLSAgICAgICAgcmVzdWx0Lm1fZmxv
YXRWYWx1ZSA9IHZhbHVlLmY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVEb3Vi
bGU6Ci0gICAgICAgIHJlc3VsdC5tX2RvdWJsZVZhbHVlID0gdmFsdWUuZDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotanZhbHVlIGphdmFWYWx1ZVRvSnZhbHVlKGNvbnN0IEphdmFWYWx1
ZSYgdmFsdWUpCi17Ci0gICAganZhbHVlIHJlc3VsdDsKLSAgICBtZW1zZXQoJnJlc3VsdCwgMCwg
c2l6ZW9mKGp2YWx1ZSkpOwotICAgIHN3aXRjaCAodmFsdWUubV90eXBlKSB7Ci0gICAgY2FzZSBK
YXZhVHlwZVZvaWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0g
ICAgICAgIGlmICh2YWx1ZS5tX29iamVjdFZhbHVlKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG1l
dGhvZCBpcyB1c2VkIG9ubHkgYnkgSmF2YUluc3RhbmNlSm9iamVjdCwgc28gd2Uga25vdyB0aGUK
LSAgICAgICAgICAgIC8vIGRlcml2ZWQgdHlwZSBvZiB0aGUgb2JqZWN0LgotICAgICAgICAgICAg
cmVzdWx0LmwgPSBzdGF0aWNfY2FzdDxKYXZhSW5zdGFuY2VKb2JqZWN0Kj4odmFsdWUubV9vYmpl
Y3RWYWx1ZS5nZXQoKSktPmphdmFJbnN0YW5jZSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSmF2YVR5cGVTdHJpbmc6Ci0gICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIGxv
Y2FsIHJlZmVyZW5jZSB0byBhIG5ldyBTdHJpbmcgb2JqZWN0LCB3aGljaCB3aWxsCi0gICAgICAg
IC8vIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGNhbGwgc3RhY2sgcmV0dXJucyB0byBKYXZhLiBOb3Rl
IHRoYXQgdGhpcwotICAgICAgICAvLyBtYXkgY2F1c2UgbGVha3MgaWYgaW52b2tlZCBmcm9tIGEg
bmF0aXZlIG1lc3NhZ2UgbG9vcCwgYXMgaXMgdGhlCi0gICAgICAgIC8vIGNhc2UgaW4gd29ya2Vy
cy4KLSAgICAgICAgcmVzdWx0LmwgPSBnZXRKTklFbnYoKS0+TmV3U3RyaW5nKHZhbHVlLm1fc3Ry
aW5nVmFsdWUuY2hhcmFjdGVycygpLCB2YWx1ZS5tX3N0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHJlc3VsdC56
ID0gdmFsdWUubV9ib29sZWFuVmFsdWUgPyBKTklfVFJVRSA6IEpOSV9GQUxTRTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAgIHJlc3VsdC5iID0gdmFsdWUu
bV9ieXRlVmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVDaGFyOgotICAg
ICAgICByZXN1bHQuYyA9IHZhbHVlLm1fY2hhclZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEphdmFUeXBlU2hvcnQ6Ci0gICAgICAgIHJlc3VsdC5zID0gdmFsdWUubV9zaG9ydFZhbHVl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlSW50OgotICAgICAgICByZXN1bHQu
aSA9IHZhbHVlLm1faW50VmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVM
b25nOgotICAgICAgICByZXN1bHQuaiA9IHZhbHVlLm1fbG9uZ1ZhbHVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEphdmFUeXBlRmxvYXQ6Ci0gICAgICAgIHJlc3VsdC5mID0gdmFsdWUubV9m
bG9hdFZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEphdmFUeXBlRG91YmxlOgotICAg
ICAgICByZXN1bHQuZCA9IHZhbHVlLm1fZG91YmxlVmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KTklVdGlsaXR5UHJpdmF0ZS5oCmlu
ZGV4IDAyODI5MDQuLjIxNWM1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSk5JVXRpbGl0eVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L3Y4L0pOSVV0aWxpdHlQcml2YXRlLmgKQEAgLTQxLDkgKzQxLDYgQEAgY2xhc3MgSmF2YVZhbHVl
OwogSmF2YVZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb0phdmFWYWx1ZShOUFZhcmlhbnQsIGNvbnN0
IFN0cmluZyYgamF2YUNsYXNzKTsKIHZvaWQgY29udmVydEphdmFWYWx1ZVRvTlBWYXJpYW50KEph
dmFWYWx1ZSwgTlBWYXJpYW50Kik7CiAKLUphdmFWYWx1ZSBqdmFsdWVUb0phdmFWYWx1ZShjb25z
dCBqdmFsdWUmLCBjb25zdCBKYXZhVHlwZSYpOwotanZhbHVlIGphdmFWYWx1ZVRvSnZhbHVlKGNv
bnN0IEphdmFWYWx1ZSYpOwotCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUNs
YXNzSm9iamVjdFY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUNsYXNz
Sm9iamVjdFY4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiZmQ2My4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFDbGFzc0pvYmplY3RW
OC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkphdmFDbGFzc0pvYmplY3RWOC5oIgotCi0jaWYgRU5BQkxFKEpB
VkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSmF2YUZpZWxkSm9iamVjdFY4LmgiCi0jaW5jbHVkZSAi
SmF2YU1ldGhvZEpvYmplY3QuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci0K
LUphdmFDbGFzc0pvYmplY3Q6OkphdmFDbGFzc0pvYmplY3Qoam9iamVjdCBhbkluc3RhbmNlKQot
ewotICAgIGpvYmplY3QgYUNsYXNzID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pihhbkluc3RhbmNl
LCAiZ2V0Q2xhc3MiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwotCi0gICAgaWYgKCFhQ2xhc3Mp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gY2FsbCBnZXRDbGFzcyBvbiBpbnN0YW5j
ZSAlcCIsIGFuSW5zdGFuY2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSk5JRW52
KiBlbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIC8vIEdldCB0aGUgZmllbGRzCi0gICAgamFycmF5
IGZpZWxkcyA9IHN0YXRpY19jYXN0PGphcnJheT4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xh
c3MsICJnZXRGaWVsZHMiLCAiKClbTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOyIpKTsKLSAgICBp
bnQgbnVtRmllbGRzID0gZW52LT5HZXRBcnJheUxlbmd0aChmaWVsZHMpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtRmllbGRzOyBpKyspIHsKLSAgICAgICAgam9iamVjdCBhSkZpZWxkID0g
ZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihmaWVs
ZHMpLCBpKTsKLSAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcgSmF2YUZpZWxkSm9iamVj
dChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3Rvcgot
ICAgICAgICBtX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1lKCksIGFGaWVsZCk7Ci0gICAgICAgIGVu
di0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSBtZXRo
b2RzCi0gICAgamFycmF5IG1ldGhvZHMgPSBzdGF0aWNfY2FzdDxqYXJyYXk+KGNhbGxKTklNZXRo
b2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0TWV0aG9kcyIsICIoKVtMamF2YS9sYW5nL3JlZmxlY3Qv
TWV0aG9kOyIpKTsKLSAgICBpbnQgbnVtTWV0aG9kcyA9IGVudi0+R2V0QXJyYXlMZW5ndGgobWV0
aG9kcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1NZXRob2RzOyBpKyspIHsKLSAgICAg
ICAgam9iamVjdCBhSk1ldGhvZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19j
YXN0PGpvYmplY3RBcnJheT4obWV0aG9kcyksIGkpOwotICAgICAgICBKYXZhTWV0aG9kKiBhTWV0
aG9kID0gbmV3IEphdmFNZXRob2RKb2JqZWN0KGVudiwgYUpNZXRob2QpOyAvLyBkZWxldGVkIGlu
IHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgotICAgICAgICBNZXRob2RMaXN0KiBtZXRob2RMaXN0
ID0gbV9tZXRob2RzLmdldChhTWV0aG9kLT5uYW1lKCkpOwotICAgICAgICBpZiAoIW1ldGhvZExp
c3QpIHsKLSAgICAgICAgICAgIG1ldGhvZExpc3QgPSBuZXcgTWV0aG9kTGlzdCgpOwotICAgICAg
ICAgICAgbV9tZXRob2RzLnNldChhTWV0aG9kLT5uYW1lKCksIG1ldGhvZExpc3QpOwotICAgICAg
ICB9Ci0gICAgICAgIG1ldGhvZExpc3QtPmFwcGVuZChhTWV0aG9kKTsKLSAgICAgICAgZW52LT5E
ZWxldGVMb2NhbFJlZihhSk1ldGhvZCk7Ci0gICAgfQotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYo
ZmllbGRzKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1ldGhvZHMpOwotICAgIGVudi0+RGVs
ZXRlTG9jYWxSZWYoYUNsYXNzKTsKLX0KLQotSmF2YUNsYXNzSm9iamVjdDo6fkphdmFDbGFzc0pv
YmplY3QoKQotewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZpZWxkcyk7Ci0gICAgbV9maWVsZHMu
Y2xlYXIoKTsKLQotICAgIE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0
aG9kcy5lbmQoKTsKLSAgICBmb3IgKE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tZXRob2RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBNZXRo
b2RMaXN0KiBtZXRob2RMaXN0ID0gaXQtPnNlY29uZDsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KCptZXRob2RMaXN0KTsKLSAgICAgICAgZGVsZXRlIG1ldGhvZExpc3Q7Ci0gICAgfQotICAgIG1f
bWV0aG9kcy5jbGVhcigpOwotfQotCi1NZXRob2RMaXN0IEphdmFDbGFzc0pvYmplY3Q6Om1ldGhv
ZHNOYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAotewotICAgIE1ldGhvZExpc3QqIG1ldGhv
ZExpc3QgPSBtX21ldGhvZHMuZ2V0KG5hbWUpOwotCi0gICAgaWYgKG1ldGhvZExpc3QpCi0gICAg
ICAgIHJldHVybiAqbWV0aG9kTGlzdDsKLSAgICByZXR1cm4gTWV0aG9kTGlzdCgpOwotfQotCi1K
YXZhRmllbGQqIEphdmFDbGFzc0pvYmplY3Q6OmZpZWxkTmFtZWQoY29uc3QgY2hhciogbmFtZSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9maWVsZHMuZ2V0KG5hbWUpOwotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS92OC9KYXZhQ2xhc3NKb2JqZWN0VjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgv
SmF2YUNsYXNzSm9iamVjdFY4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Nh
OTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhQ2xhc3NK
b2JqZWN0VjguaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SmF2YUNsYXNzSm9iamVjdFY4X2gKLSNkZWZpbmUgSmF2YUNsYXNzSm9iamVjdFY4X2gKLQotI2lm
IEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRl
ICJKYXZhQ2xhc3NWOC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIEJpbmRpbmdz
IHsKLQotY2xhc3MgSmF2YUNsYXNzSm9iamVjdCA6IHB1YmxpYyBKYXZhQ2xhc3MgewotcHVibGlj
OgotICAgIEphdmFDbGFzc0pvYmplY3Qoam9iamVjdCk7Ci0gICAgdmlydHVhbCB+SmF2YUNsYXNz
Sm9iamVjdCgpOwotCi0gICAgLy8gSmF2YUNsYXNzIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVh
bCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEphdmFGaWVsZCogZmllbGROYW1lZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIE1ldGhvZExpc3QqPiBN
ZXRob2RMaXN0TWFwOwotICAgIE1ldGhvZExpc3RNYXAgbV9tZXRob2RzOwotICAgIEZpZWxkTWFw
IG1fZmllbGRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNlbmRpZiAvLyBKYXZh
Q2xhc3NKb2JqZWN0VjhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92
OC9KYXZhRmllbGRKb2JqZWN0VjguY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9K
YXZhRmllbGRKb2JqZWN0VjguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjg5
NWY5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxk
Sm9iamVjdFY4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhRmllbGRKb2JqZWN0VjguaCIKLQotI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci0KLUph
dmFGaWVsZEpvYmplY3Q6OkphdmFGaWVsZEpvYmplY3QoSk5JRW52KiBlbnYsIGpvYmplY3QgYUZp
ZWxkKQotewotICAgIC8vIEdldCBmaWVsZCB0eXBlCi0gICAgam9iamVjdCBmaWVsZFR5cGUgPSBj
YWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUiLCAiKClMamF2YS9sYW5nL0Ns
YXNzOyIpOwotICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+
KGNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKLSAgICBtX3R5cGVDbGFzc05hbWUgPSBKYXZhU3RyaW5nKGVudiwgZmll
bGRUeXBlTmFtZSk7Ci0gICAgbV90eXBlID0gamF2YVR5cGVGcm9tQ2xhc3NOYW1lKG1fdHlwZUNs
YXNzTmFtZS51dGY4KCkpOwotCi0gICAgLy8gR2V0IGZpZWxkIG5hbWUKLSAgICBqc3RyaW5nIGZp
ZWxkTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYUZp
ZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKLSAgICBtX25hbWUgPSBK
YXZhU3RyaW5nKGVudiwgZmllbGROYW1lKTsKLQotICAgIG1fZmllbGQgPSBKb2JqZWN0V3JhcHBl
cjo6Y3JlYXRlKGFGaWVsZCk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RW
OC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhRmllbGRKb2JqZWN0VjguaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJjNzg1Ny4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFGaWVsZEpvYmplY3RWOC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBKYXZhRmllbGRKb2JqZWN0VjhfaAot
I2RlZmluZSBKYXZhRmllbGRKb2JqZWN0VjhfaAotCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQot
Ci0jaW5jbHVkZSAiSmF2YUZpZWxkVjguaCIKLSNpbmNsdWRlICJKYXZhU3RyaW5nLmgiCi0jaW5j
bHVkZSAiSm9iamVjdFdyYXBwZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBC
aW5kaW5ncyB7Ci0KLWNsYXNzIEphdmFGaWVsZEpvYmplY3QgOiBwdWJsaWMgSmF2YUZpZWxkIHsK
LXB1YmxpYzoKLSAgICBKYXZhRmllbGRKb2JqZWN0KEpOSUVudiosIGpvYmplY3QpOwotCi0gICAg
Ly8gSmF2YUZpZWxkIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZS5pbXBsKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGVDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX3R5cGVDbGFzc05hbWUudXRmOCgpOyB9Ci0g
ICAgdmlydHVhbCBKYXZhVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0gICAgSmF2YVN0cmluZyBtX3R5cGVDbGFz
c05hbWU7Ci0gICAgSmF2YVR5cGUgbV90eXBlOwotICAgIFJlZlB0cjxKb2JqZWN0V3JhcHBlcj4g
bV9maWVsZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSmF2YUZp
ZWxkSm9iamVjdFY4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgv
SmF2YUZpZWxkVjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUZpZWxkVjgu
aAppbmRleCAzYzI0Y2Y1Li44ZjljOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL3Y4L0phdmFGaWVsZFY4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92
OC9KYXZhRmllbGRWOC5oCkBAIC00MCw4ICs0MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5K
YXZhRmllbGQoKSB7fQogCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5cGVDbGFzc05hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBKYXZhVHlwZSB0eXBlKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQmlu
ZGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3Rh
bmNlSm9iamVjdFY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3Rh
bmNlSm9iamVjdFY4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiYWI1Mi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZUpv
YmplY3RWOC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpvYmplY3RWOC5o
IgotCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZh
dGUuaCIKLSNpbmNsdWRlICJKYXZhQ2xhc3NKb2JqZWN0VjguaCIKLSNpbmNsdWRlICJKYXZhRmll
bGRWOC5oIgotI2luY2x1ZGUgIkphdmFNZXRob2QuaCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKLQotSmF2YUluc3Rh
bmNlSm9iamVjdDo6SmF2YUluc3RhbmNlSm9iamVjdChqb2JqZWN0IGluc3RhbmNlKQotICAgIDog
bV9pbnN0YW5jZShKb2JqZWN0V3JhcHBlcjo6Y3JlYXRlKGluc3RhbmNlKSkKLXsKLX0KLQotI2Rl
ZmluZSBOVU1fTE9DQUxfUkVGUyA2NAotCi12b2lkIEphdmFJbnN0YW5jZUpvYmplY3Q6OmJlZ2lu
KCkKLXsKLSAgICBnZXRKTklFbnYoKS0+UHVzaExvY2FsRnJhbWUoTlVNX0xPQ0FMX1JFRlMpOwot
fQotCi12b2lkIEphdmFJbnN0YW5jZUpvYmplY3Q6OmVuZCgpCi17Ci0gICAgZ2V0Sk5JRW52KCkt
PlBvcExvY2FsRnJhbWUoMCk7Ci19Ci0KLUphdmFDbGFzcyogSmF2YUluc3RhbmNlSm9iamVjdDo6
Z2V0Q2xhc3MoKSBjb25zdAotewotICAgIGlmICghbV9jbGFzcykKLSAgICAgICAgbV9jbGFzcyA9
IGFkb3B0UHRyKG5ldyBKYXZhQ2xhc3NKb2JqZWN0KGphdmFJbnN0YW5jZSgpKSk7Ci0gICAgcmV0
dXJuIG1fY2xhc3MuZ2V0KCk7Ci19Ci0KLUphdmFWYWx1ZSBKYXZhSW5zdGFuY2VKb2JqZWN0Ojpp
bnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCogbWV0aG9kLCBKYXZhVmFsdWUqIGFyZ3MpCi17
Ci0gICAgQVNTRVJUKGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChtZXRob2QtPm5hbWUoKS51dGY4
KCkuZGF0YSgpKS5maW5kKG1ldGhvZCkgIT0gbm90Rm91bmQpOwotICAgIHVuc2lnbmVkIGludCBu
dW1QYXJhbXMgPSBtZXRob2QtPm51bVBhcmFtZXRlcnMoKTsKLSAgICBPd25BcnJheVB0cjxqdmFs
dWU+IGp2YWx1ZUFyZ3MgPSBhZG9wdEFycmF5UHRyKG5ldyBqdmFsdWVbbnVtUGFyYW1zXSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAg
anZhbHVlQXJnc1tpXSA9IGphdmFWYWx1ZVRvSnZhbHVlKGFyZ3NbaV0pOwotICAgIGp2YWx1ZSBy
ZXN1bHQgPSBjYWxsSk5JTWV0aG9kKGphdmFJbnN0YW5jZSgpLCBtZXRob2QtPnJldHVyblR5cGUo
KSwgbWV0aG9kLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbWV0aG9kLT5zaWduYXR1cmUoKSwganZh
bHVlQXJncy5nZXQoKSk7Ci0gICAgcmV0dXJuIGp2YWx1ZVRvSmF2YVZhbHVlKHJlc3VsdCwgbWV0
aG9kLT5yZXR1cm5UeXBlKCkpOwotfQotCi1KYXZhVmFsdWUgSmF2YUluc3RhbmNlSm9iamVjdDo6
Z2V0RmllbGQoY29uc3QgSmF2YUZpZWxkKiBmaWVsZCkKLXsKLSAgICBBU1NFUlQoZ2V0Q2xhc3Mo
KS0+ZmllbGROYW1lZChmaWVsZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpID09IGZpZWxkKTsKLSAg
ICByZXR1cm4ganZhbHVlVG9KYXZhVmFsdWUoZ2V0Sk5JRmllbGQoamF2YUluc3RhbmNlKCksIGZp
ZWxkLT50eXBlKCksIGZpZWxkLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZmllbGQtPnR5cGVDbGFz
c05hbWUoKSksIGZpZWxkLT50eXBlKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJ
REdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFu
Y2VKb2JqZWN0VjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNl
Sm9iamVjdFY4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MDM3NmQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VKb2JqZWN0
VjguaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEphdmFJbnN0YW5jZUpvYmplY3RWOF9oCi0jZGVmaW5lIEphdmFJbnN0YW5jZUpvYmplY3RW
OF9oCi0KLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNpbmNsdWRlICJKTklVdGlsaXR5Lmgi
Ci0jaW5jbHVkZSAiSmF2YUluc3RhbmNlVjguaCIKLSNpbmNsdWRlICJKb2JqZWN0V3JhcHBlci5o
IgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5k
aW5ncyB7Ci0KLWNsYXNzIEphdmFJbnN0YW5jZUpvYmplY3QgOiBwdWJsaWMgSmF2YUluc3RhbmNl
IHsKLXB1YmxpYzoKLSAgICBKYXZhSW5zdGFuY2VKb2JqZWN0KGpvYmplY3QgaW5zdGFuY2UpOwot
Ci0gICAgLy8gSmF2YUluc3RhbmNlIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCBKYXZhQ2xh
c3MqIGdldENsYXNzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKYXZhVmFsdWUgaW52b2tlTWV0aG9k
KGNvbnN0IEphdmFNZXRob2QqLCBKYXZhVmFsdWUqIGFyZ3MpOwotICAgIHZpcnR1YWwgSmF2YVZh
bHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCopOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbigp
OwotICAgIHZpcnR1YWwgdm9pZCBlbmQoKTsKLQotICAgIGpvYmplY3QgamF2YUluc3RhbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgUmVmUHRyPEpvYmplY3RXcmFwcGVyPiBtX2luc3RhbmNlOwotICAgIG11dGFibGUgT3duUHRy
PEphdmFDbGFzcz4gbV9jbGFzczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5k
aWYgLy8gSmF2YUluc3RhbmNlSm9iamVjdFY4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvdjgvSmF2YUluc3RhbmNlVjguaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvdjgvSmF2YUluc3RhbmNlVjguaAppbmRleCA3NDM2ZGU3Li4yMGQwMjc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFJbnN0YW5jZVY4LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS92OC9KYXZhSW5zdGFuY2VWOC5oCkBAIC00OSwxNCArNDks
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKYXZhQ2xhc3MqIGdldENsYXNzKCkgY29uc3QgPSAw
OwogICAgIC8vIGFyZ3MgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHRoZSBudW1iZXIgb2YKICAgICAvLyBhcmd1bWVudHMgZXhwZWN0ZWQgYnkgdGhl
IG1ldGhvZC4KLSAgICB2aXJ0dWFsIEphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3QgSmF2YU1l
dGhvZCosIEphdmFWYWx1ZSogYXJncykgPSAwOwotICAgIHZpcnR1YWwgSmF2YVZhbHVlIGdldEZp
ZWxkKGNvbnN0IEphdmFGaWVsZCopID0gMDsKLQotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUg
Y2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRzIGludG8KLSAgICAv
LyB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9ucy4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gZXN0YWJs
aXNoIGFuZCBjbGVhbnVwCi0gICAgLy8gYW55IG5lZWRlZCBzdGF0ZS4KLSAgICB2aXJ0dWFsIHZv
aWQgYmVnaW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZCgpID0gMDsKKyAgICB2aXJ0dWFs
IEphdmFWYWx1ZSBpbnZva2VNZXRob2QoY29uc3QgSmF2YU1ldGhvZCYsIEphdmFWYWx1ZSogYXJn
cykgPSAwOworICAgIHZpcnR1YWwgSmF2YVZhbHVlIGdldEZpZWxkKGNvbnN0IEphdmFGaWVsZCYp
ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL3Y4L0phdmFNZXRob2RWOC5oIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS92OC9KYXZhTWV0aG9kVjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mMDcxMTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS92OC9KYXZhTWV0aG9kVjguaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhTWV0aG9kVjhfaAorI2RlZmluZSBKYXZhTWV0aG9k
VjhfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiQnJpZGdlLmgiCisj
aW5jbHVkZSAiSmF2YVR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKwordHlwZWRlZiBjb25z
dCBjaGFyKiBSdW50aW1lVHlwZTsKKworY2xhc3MgSmF2YU1ldGhvZCA6IHB1YmxpYyBNZXRob2Qg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkphdmFNZXRob2QoKSB7IH0KKworICAgIHZpcnR1YWwg
U3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgcGFyYW1ldGVyQXQo
aW50KSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKKworI2VuZGlmIC8v
IEphdmFNZXRob2RWOF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL3Y4
L0phdmFOUE9iamVjdFY4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YU5Q
T2JqZWN0VjguY3BwCmluZGV4IGE4M2ZjNjcuLjkyYTVlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvdjgvSmF2YU5QT2JqZWN0VjguY3BwCkBAIC05Nyw5ICs5Nyw3IEBAIGJv
b2wgSmF2YU5QT2JqZWN0SGFzTWV0aG9kKE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmllciBpZGVu
dGlmaWVyKQogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW5z
dGFuY2UtPmJlZ2luKCk7CiAgICAgYm9vbCByZXN1bHQgPSAoaW5zdGFuY2UtPmdldENsYXNzKCkt
Pm1ldGhvZHNOYW1lZChuYW1lKS5zaXplKCkgPiAwKTsKLSAgICBpbnN0YW5jZS0+ZW5kKCk7CiAK
ICAgICAvLyBUT0RPOiB1c2UgTlBOX01lbUZyZWUKICAgICBmcmVlKG5hbWUpOwpAQCAtMTE2LDgg
KzExNCw2IEBAIGJvb2wgSmF2YU5QT2JqZWN0SW52b2tlKE5QT2JqZWN0KiBvYmosIE5QSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBjb25zdCBOUFZhcmlhbnQqCiAgICAgaWYgKCFuYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLQogICAgIE1ldGhvZExp
c3QgbWV0aG9kTGlzdCA9IGluc3RhbmNlLT5nZXRDbGFzcygpLT5tZXRob2RzTmFtZWQobmFtZSk7
CiAgICAgLy8gVE9ETzogdXNlIE5QTl9NZW1GcmVlCiAgICAgZnJlZShuYW1lKTsKQEAgLTE0NCw4
ICsxNDAsNyBAQCBib29sIEphdmFOUE9iamVjdEludm9rZShOUE9iamVjdCogb2JqLCBOUElkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50KgogICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykKICAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0TlBW
YXJpYW50VG9KYXZhVmFsdWUoYXJnc1tpXSwgak1ldGhvZC0+cGFyYW1ldGVyQXQoaSkpOwogCi0g
ICAgSmF2YVZhbHVlIGpSZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGpNZXRob2QsIGpB
cmdzKTsKLSAgICBpbnN0YW5jZS0+ZW5kKCk7CisgICAgSmF2YVZhbHVlIGpSZXN1bHQgPSBpbnN0
YW5jZS0+aW52b2tlTWV0aG9kKCpqTWV0aG9kLCBqQXJncyk7CiAgICAgZGVsZXRlW10gakFyZ3M7
CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKQEAgLTE2MSw5ICsxNTYsNyBAQCBi
b29sIEphdmFOUE9iamVjdEhhc1Byb3BlcnR5KE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogICAgIE5QVVRGOCogbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKGlk
ZW50aWZpZXIpOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlu
c3RhbmNlLT5iZWdpbigpOwogICAgIGJvb2wgcmVzdWx0ID0gaW5zdGFuY2UtPmdldENsYXNzKCkt
PmZpZWxkTmFtZWQobmFtZSk7Ci0gICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIGZyZWUobmFtZSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE3OCwxNCArMTcxLDEyIEBAIGJvb2wgSmF2YU5Q
T2JqZWN0R2V0UHJvcGVydHkoTlBPYmplY3QqIG9iaiwgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIs
IE5QVmFyaWFudCoKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGluc3RhbmNlLT5iZWdpbigpOwogICAgIEphdmFGaWVsZCogZmllbGQgPSBpbnN0YW5jZS0+Z2V0
Q2xhc3MoKS0+ZmllbGROYW1lZChuYW1lKTsKICAgICBmcmVlKG5hbWUpOyAvLyBUT0RPOiB1c2Ug
TlBOX01lbUZyZWUKICAgICBpZiAoIWZpZWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKYXZhVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RmllbGQoZmllbGQpOwotICAgIGluc3Rh
bmNlLT5lbmQoKTsKKyAgICBKYXZhVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RmllbGQoKmZp
ZWxkKTsKIAogICAgIGNvbnZlcnRKYXZhVmFsdWVUb05QVmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsK
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>