<?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>24505</bug_id>
          
          <creation_ts>2009-03-10 18:33:16 -0700</creation_ts>
          <short_desc>Geolocation needs to support asynchronous Chrome challenges</short_desc>
          <delta_ts>2009-05-15 07:34:27 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Greg Bolsinga">bolsinga</reporter>
          <assigned_to name="Greg Bolsinga">bolsinga</assigned_to>
          <cc>koivisto</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113100</commentid>
    <comment_count>0</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-10 18:33:16 -0700</bug_when>
    <thetext>Right now the Geolocation API forces the Chrome to block to return whether or not the Chrome accepts the challenge.

This patch changes it to be asynchronous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113101</commentid>
    <comment_count>1</comment_count>
      <attachid>28458</attachid>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-10 18:38:14 -0700</bug_when>
    <thetext>Created attachment 28458
Implements an asynchronous ChromeClient challenge for Geolocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113107</commentid>
    <comment_count>2</comment_count>
      <attachid>28458</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-03-10 19:57:12 -0700</bug_when>
    <thetext>Comment on attachment 28458
Implements an asynchronous ChromeClient challenge for Geolocation

&gt; Index: WebCore/platform/mac/GeolocationServiceMac.mm
&gt; ===================================================================
&gt; --- WebCore/platform/mac/GeolocationServiceMac.mm	(revision 41572)
&gt; +++ WebCore/platform/mac/GeolocationServiceMac.mm	(working copy)
&gt; @@ -34,6 +34,7 @@
&gt;  #import &quot;PositionOptions.h&quot;
&gt;  #import &quot;SoftLinking.h&quot;
&gt;  #import &lt;CoreLocation/CoreLocation.h&gt;
&gt; +#import &lt;CoreLocation/CoreLocationPriv.h&gt;
&gt;  #import &lt;objc/objc-runtime.h&gt;
&gt;  #import &lt;wtf/RefPtr.h&gt;
&gt;  #import &lt;wtf/UnusedParam.h&gt;
&gt; @@ -121,6 +122,12 @@
&gt;      [m_locationManager.get() startUpdatingLocation];
&gt;  }
&gt;  
&gt; +bool GeolocationServiceMac::shouldCacheBeCleared()
&gt; +{
&gt; +    // This uses CoreLocation SPI.
&gt; +    return m_locationManager.get() ? !m_locationManager.get().locationServicesApproved : true;
&gt; +}
&gt; +

We can&apos;t land something that uses SPI such as this in open source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113108</commentid>
    <comment_count>3</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-10 20:06:28 -0700</bug_when>
    <thetext>Understood. I can make that return false, and keep the method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113227</commentid>
    <comment_count>4</comment_count>
      <attachid>28458</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-11 14:12:43 -0700</bug_when>
    <thetext>Comment on attachment 28458
Implements an asynchronous ChromeClient challenge for Geolocation

&gt; Index: WebKit/mac/WebCoreSupport/WebGeolocationPrivate.h

&gt; +@interface WebGeolocation : NSObject {
&gt; +@private
&gt; +    WebGeolocationPrivate *_private;
&gt; +    BOOL _shouldClearCache;
&gt; +}
&gt; +
&gt; +- (BOOL)shouldClearCache;
&gt; +- (void)setIsAllowed:(BOOL)allowed;
&gt; +@end

What does this class actually _do_? The name is not revealing.
It doesn&apos;t seem to actually do Geolocation, despite the name. Is it some kind of cookie?
Or is it a WebGeolocationRequest?

&gt; Index: WebKit/mac/WebCoreSupport/WebChromeClient.mm
&gt; ===================================================================

&gt; -bool WebChromeClient::shouldAllowGeolocationForFrame(Frame* frame)
&gt; +void WebChromeClient::challengeGeolocationForFrame(Frame* frame, Geolocation* geolocation, bool shouldClearCache)

&quot;challenge&quot; doesn&apos;t communicate what this method does. Is it an async &quot;give me my coordinates&quot;, or
&quot;ask the user if it&apos;s OK to geolocate, then call back later&quot;, or something else?


&gt; Index: WebKit/mac/WebCoreSupport/WebGeolocationInternal.h
&gt; ===================================================================

&gt; +typedef WebCore::Geolocation WebCoreGeolocation;

Seems odd to be typedeffing a namespaced symbol to an Obj-C class. Is this done elsewhere?

Since WebCore::Geolocation shows up in ChromeClient.h, I think it needs to be a real, cross-platform
C++ class or struct.

&gt; Index: WebCore/page/ChromeClient.h
&gt; ===================================================================

&gt; -        virtual bool shouldAllowGeolocationForFrame(Frame*) { return false; }
&gt; -
&gt; +        virtual void challengeGeolocationForFrame(Frame*, Geolocation*, bool) { }
&gt; +            

As above, I think Geolocation needs to be a concrete type here. Also, you should keep
the name of the bool parameter, so the reader knows what the bool is for. It also seems
a bit odd to have this method to two things. Who knows when the cache should be cleared?
Finally, we&apos;re trying to avoid having bool params, because it makes the code at the callsite
hard to understand.


&gt; Index: WebCore/page/Geolocation.h
&gt; ===================================================================

&gt; +    
&gt; +    void setIsAllowed(bool);

Why no associated getter?


&gt;      enum {
&gt;          Unknown,
&gt; +        InProgress,
&gt;          Yes,
&gt;          No
&gt;      } m_allowGeolocation;

For readability, I think it would be clearer to name this enum, and use
values like GeolocationAllowedUnknown, GeolocationAllowedInProgress etc.

I think this needs some increased clarity through renaming, and some thought about using a concrete type for Geolocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113232</commentid>
    <comment_count>5</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-11 14:55:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; What does this class actually _do_? The name is not revealing.
&gt; It doesn&apos;t seem to actually do Geolocation, despite the name. Is it some kind
&gt; of cookie?
&gt; Or is it a WebGeolocationRequest?

It is an ObjC wrapper around WebCore&apos;s Geolocation C++ class. I followed the example (and coding style) in WebSecurityOrigin/SecurityOrigin.

&gt; &quot;challenge&quot; doesn&apos;t communicate what this method does. Is it an async &quot;give me
&gt; my coordinates&quot;, or
&gt; &quot;ask the user if it&apos;s OK to geolocate, then call back later&quot;, or something
&gt; else?

It is a challenge the user to accept Geolocation, tell me what they did later via the Geolocation object call. I&apos;m open to naming suggestions.

&gt; Seems odd to be typedeffing a namespaced symbol to an Obj-C class. Is this done
&gt; elsewhere?
&gt; 
&gt; Since WebCore::Geolocation shows up in ChromeClient.h, I think it needs to be a
&gt; real, cross-platform
&gt; C++ class or struct.

I followed the example (and coding style) in WebSecurityOrigin/SecurityOrigin.

&gt; 
&gt; &gt; Index: WebCore/page/ChromeClient.h
&gt; &gt; ===================================================================
&gt; 
&gt; &gt; -        virtual bool shouldAllowGeolocationForFrame(Frame*) { return false; }
&gt; &gt; -
&gt; &gt; +        virtual void challengeGeolocationForFrame(Frame*, Geolocation*, bool) { }
&gt; &gt; +            
&gt; 
&gt; As above, I think Geolocation needs to be a concrete type here. Also, you
&gt; should keep
&gt; the name of the bool parameter, so the reader knows what the bool is for. It
&gt; also seems
&gt; a bit odd to have this method to two things. Who knows when the cache should be
&gt; cleared?
&gt; Finally, we&apos;re trying to avoid having bool params, because it makes the code at
&gt; the callsite
&gt; hard to understand.

Perhaps I can add the shouldClearCache bool to Geolocation? The GeolocationService knows when the cache should be cleared, and lets the ChromeClient know this via this call. The cache is kept in the chrome (as the Chrome may have different caching policies that way, and WebCore doesn&apos;t need to know about them.

&gt; &gt; +    void setIsAllowed(bool);
&gt; 
&gt; Why no associated getter?

It&apos;s used only within the class, I can add it, but it isn&apos;t necessary.

&gt; &gt;      enum {
&gt; &gt;          Unknown,
&gt; &gt; +        InProgress,
&gt; &gt;          Yes,
&gt; &gt;          No
&gt; &gt;      } m_allowGeolocation;
&gt; 
&gt; For readability, I think it would be clearer to name this enum, and use
&gt; values like GeolocationAllowedUnknown, GeolocationAllowedInProgress etc.

These enum names were here previously, via Sam.

&gt; I think this needs some increased clarity through renaming, and some thought
&gt; about using a concrete type for Geolocation.

I&apos;m open to renames for the challenge method. That was the best I came up with.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113528</commentid>
    <comment_count>6</comment_count>
      <attachid>28566</attachid>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-12 16:40:10 -0700</bug_when>
    <thetext>Created attachment 28566
Updated patch addresses issues found

updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113553</commentid>
    <comment_count>7</comment_count>
      <attachid>28566</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-12 23:05:01 -0700</bug_when>
    <thetext>Comment on attachment 28566
Updated patch addresses issues found

&gt; Index: WebCore/page/ChromeClient.h
&gt; ===================================================================
&gt; --- WebCore/page/ChromeClient.h	(revision 41656)
&gt; +++ WebCore/page/ChromeClient.h	(working copy)
&gt; @@ -42,6 +42,7 @@ namespace WebCore {
&gt;      class FileChooser;
&gt;      class FloatRect;
&gt;      class Frame;
&gt; +    class Geolocation;
&gt;      class HitTestResult;
&gt;      class IntRect;
&gt;      class Node;
&gt; @@ -152,8 +153,8 @@ namespace WebCore {
&gt;                                            float value, float proportion, ScrollbarControlPartMask);
&gt;          virtual bool paintCustomScrollCorner(GraphicsContext*, const FloatRect&amp;);
&gt;  
&gt; -        virtual bool shouldAllowGeolocationForFrame(Frame*) { return false; }
&gt; -
&gt; +        virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) { }

I&apos;d like to see a comment saying that the call is async, and describing
the code path is for giving final approval to do Geolocation
(i.e. someone calls geoloc-&gt;setIsAllowed(true));

&gt; Index: WebCore/page/Geolocation.cpp
&gt; ===================================================================

&gt; +void Geolocation::displayChallengeIfNecessary()

I think this could be renamed to requestPermission() to be more similar
to requestGeolocationPermissionForFrame().

r=me with those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113635</commentid>
    <comment_count>8</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-03-13 11:57:07 -0700</bug_when>
    <thetext>bolsinga:WebKit bolsinga$ svn commit
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.base.exp
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/page/Chrome.cpp
Sending        WebCore/page/Chrome.h
Sending        WebCore/page/ChromeClient.h
Sending        WebCore/page/Geolocation.cpp
Sending        WebCore/page/Geolocation.h
Sending        WebKit/ChangeLog
Sending        WebKit/WebKit.xcodeproj/project.pbxproj
Sending        WebKit/mac/ChangeLog
Sending        WebKit/mac/WebCoreSupport/WebChromeClient.h
Sending        WebKit/mac/WebCoreSupport/WebChromeClient.mm
Adding         WebKit/mac/WebCoreSupport/WebGeolocation.mm
Adding         WebKit/mac/WebCoreSupport/WebGeolocationInternal.h
Adding         WebKit/mac/WebCoreSupport/WebGeolocationPrivate.h
Sending        WebKit/mac/WebView/WebUIDelegatePrivate.h
Transmitting file data .................
Committed revision 41675.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121510</commentid>
    <comment_count>9</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-15 07:34:27 -0700</bug_when>
    <thetext>I believe the ChromeClient callback should be pure virtual.  This is standard for the other callbacks and it leads to bugs in the current way.  We don&apos;t notice when things change underneath us.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28458</attachid>
            <date>2009-03-10 18:38:14 -0700</date>
            <delta_ts>2009-03-12 16:40:10 -0700</delta_ts>
            <desc>Implements an asynchronous ChromeClient challenge for Geolocation</desc>
            <filename>Bugzilla24505.patch.txt</filename>
            <type>text/plain</type>
            <size>29845</size>
            <attacher name="Greg Bolsinga">bolsinga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25Qcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvblBy
aXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2Vv
bG9jYXRpb25Qcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKK0BjbGFzcyBXZWJHZW9sb2NhdGlvblByaXZhdGU7CisKK0BpbnRl
cmZhY2UgV2ViR2VvbG9jYXRpb24gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIFdlYkdlb2xv
Y2F0aW9uUHJpdmF0ZSAqX3ByaXZhdGU7CisgICAgQk9PTCBfc2hvdWxkQ2xlYXJDYWNoZTsKK30K
KworLSAoQk9PTClzaG91bGRDbGVhckNhY2hlOworLSAodm9pZClzZXRJc0FsbG93ZWQ6KEJPT0wp
YWxsb3dlZDsKK0BlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lm1tCShyZXZpc2lvbiA0MTU3MikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJXZWJHZW9sb2NhdGlvbklu
dGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJI
aXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgpAQCAt
NDksNiArNTAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVz
dWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFn
ZS5oPgpAQCAtNjY0LDE5ICs2NjYsMTcgQEAKIH0KICNlbmRpZgogCi1ib29sIFdlYkNocm9tZUNs
aWVudDo6c2hvdWxkQWxsb3dHZW9sb2NhdGlvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK3ZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpjaGFsbGVuZ2VHZW9sb2NhdGlvbkZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uLCBib29sIHNob3VsZENsZWFyQ2FjaGUpCiB7Ci0g
ICAgQk9PTCByZXN1bHQgPSBOTzsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IAogICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2lu
IGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46ZnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCldOwotICAgIHJlc3VsdCA9IENhbGxVSURlbGVnYXRlUmV0dXJuaW5n
Qm9vbGVhbihOTywgbV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRBbGxvd0xvY2F0
aW9uU2VydmljZXNGb3JGcmFtZTpzZWN1cml0eU9yaWdpbjopLCBraXQoZnJhbWUpLCB3ZWJPcmln
aW4pOworICAgIFdlYkdlb2xvY2F0aW9uICp3ZWJHZW9sb2NhdGlvbiA9IFtbV2ViR2VvbG9jYXRp
b24gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVHZW9sb2NhdGlvbjpnZW9sb2NhdGlvbiBzaG91bGRD
bGVhckNhY2hlOnNob3VsZENsZWFyQ2FjaGVdOworICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmll
dywgQHNlbGVjdG9yKHdlYlZpZXc6ZnJhbWU6Y2hhbGxlbmdlRm9yR2VvbG9jYXRpb246c2VjdXJp
dHlPcmlnaW46KSwga2l0KGZyYW1lKSwgd2ViR2VvbG9jYXRpb24sIHdlYk9yaWdpbik7CiAgICAg
W3dlYk9yaWdpbiByZWxlYXNlXTsKKyAgICBbd2ViR2VvbG9jYXRpb24gcmVsZWFzZV07CiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
QGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyCkluZGV4OiBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25JbnRl
cm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYkdlb2xvY2F0aW9uUHJpdmF0
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgR2VvbG9jYXRpb247Cit9CisK
K3R5cGVkZWYgV2ViQ29yZTo6R2VvbG9jYXRpb24gV2ViQ29yZUdlb2xvY2F0aW9uOworCitAaW50
ZXJmYWNlIFdlYkdlb2xvY2F0aW9uIChXZWJJbnRlcm5hbCkKKworLSAoaWQpX2luaXRXaXRoV2Vi
Q29yZUdlb2xvY2F0aW9uOihXZWJDb3JlR2VvbG9jYXRpb24gKilnZW9sb2NhdGlvbiBzaG91bGRD
bGVhckNhY2hlOihCT09MKXNob3VsZENsZWFyQ2FjaGU7CisKK0BlbmQKSW5kZXg6IFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDE1NzIpCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90
RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQWxsb3dHZW9sb2NhdGlvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdmlydHVh
bCB2b2lkIGNoYWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJD
b3JlOjpHZW9sb2NhdGlvbiosIGJvb2wpOwogCiBwcml2YXRlOgogICAgIFdlYlZpZXcgKm1fd2Vi
VmlldzsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbi5t
bQkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRp
b24ubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiV2ViR2VvbG9jYXRpb25JbnRlcm5h
bC5oIgorI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworQGltcGxlbWVudGF0aW9uIFdlYkdlb2xvY2F0aW9uIChXZWJJbnRlcm5hbCkK
KworLSAoaWQpX2luaXRXaXRoV2ViQ29yZUdlb2xvY2F0aW9uOihXZWJDb3JlR2VvbG9jYXRpb24g
KilnZW9sb2NhdGlvbiBzaG91bGRDbGVhckNhY2hlOihCT09MKXNob3VsZENsZWFyQ2FjaGUKK3sK
KyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworCisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoc2VsZikgeworICAgICAgICBnZW9sb2NhdGlvbi0+cmVmKCk7CisgICAgICAgIF9wcml2
YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHZW9sb2NhdGlvblByaXZhdGUqPihnZW9sb2NhdGlv
bik7CisgICAgICAgIF9zaG91bGRDbGVhckNhY2hlID0gc2hvdWxkQ2xlYXJDYWNoZTsKKyAgICB9
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkdlb2xv
Y2F0aW9uCisKKy0gKEJPT0wpc2hvdWxkQ2xlYXJDYWNoZQoreworICAgIHJldHVybiBfc2hvdWxk
Q2xlYXJDYWNoZTsKK30KKworLSAodm9pZClzZXRJc0FsbG93ZWQ6KEJPT0wpYWxsb3dlZAorewor
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvbG9jYXRpb24qPihfcHJpdmF0ZSktPnNldElzQWxsb3dl
ZChhbGxvd2VkKTsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKF9wcml2YXRlKQor
ICAgICAgICByZWludGVycHJldF9jYXN0PEdlb2xvY2F0aW9uKj4oX3ByaXZhdGUpLT5kZXJlZigp
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZApJbmRleDogV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQxNTcy
KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAwOS0wMy0xMCAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDUwNQorICAgICAgICAKKyAgICAg
ICAgVGhpcyBzZXRzIHVwIHRoZSBDaHJvbWVDbGllbnQgdG8gYmUgYWJsZSB0byBhc3luY2hyb25v
dXNseSBsZXQKKyAgICAgICAgdGhlIEdlb2xvY2F0aW9uIGluc3RhbmNlIGtub3cgd2hlbiBpdCBo
YXMgYWNjZXB0ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAg
IChXZWJDaHJvbWVDbGllbnQ6OmNoYWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmlmKToKKyAgICAgICAgKC1bV2ViR2VvbG9jYXRpb24gc2hvdWxkQ2xlYXJDYWNoZV0p
OgorICAgICAgICAoLVtXZWJHZW9sb2NhdGlvbiBzZXRJc0FsbG93ZWQ6XSk6CisgICAgICAgICgt
W1dlYkdlb2xvY2F0aW9uIGRlYWxsb2NdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJH
ZW9sb2NhdGlvbkludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
Ykdlb2xvY2F0aW9uUHJpdmF0ZS5oOiBBZGRlZC4KKwogMjAwOS0wMy0xMCAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LCBubyByZXZpZXcuCkluZGV4
OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0MTU3MikK
KysrIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzE1LDYgKzMxNSw5IEBACiAJCUVERTk4MzgxMEJDREY1RkUwMEZEQUUyOCAvKiBXZWJO
U0FycmF5RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFREU5ODM3RjBCQ0RGNUZFMDBGREFFMjggLyogV2ViTlNBcnJheUV4dHJhcy5tICovOyB9
OwogCQlGODM0QUFENzBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGODM0QUFENTBFNjRCMUM3
MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjgzNEFBRDgwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRl
eHRJdGVyYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY4MzRBQUQ2MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0gKi87IH07
CisJCUZFRjUyREZBMEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjUyREY3MEY2NzQ4RjIw
MEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbi5tbSAqLzsgfTsKKwkJRkVGNTJERkIwRjY3NDhGMjAw
RkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjUyREY4MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJH
ZW9sb2NhdGlvbkludGVybmFsLmggKi87IH07CisJCUZFRjUyREZDMEY2NzQ4RjIwMEZGNzBFRSAv
KiBXZWJHZW9sb2NhdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFRjUyREY5MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlv
blByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwpAQCAtNjMyLDYgKzYzNSw5IEBACiAJCUY4MzRBQUQ2MEU2NEIxQzcw
MEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJUZXh0SXRlcmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY4Q0ExNUI1MDI5QTM5RDkwMTAwMDEyMiAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY4Q0ExNUI2MDI5QTM5RDkwMTAwMDEyMiAvKiBXZWJB
dXRoZW50aWNhdGlvblBhbmVsLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbC5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJRkVGNTJERjcwRjY3
NDhGMjAwRkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViR2VvbG9jYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFRjUyREY4MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbkludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdlb2xvY2F0aW9uSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNTJERjkwRjY3NDhGMjAw
RkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJHZW9sb2NhdGlvblByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMiw2ICsxMTA4LDkgQEAKIAkJ
CQk0QkY5OUY4RjBBRTA1MEJDMDA4MTVDMkIgLyogV2ViRWRpdG9yQ2xpZW50Lm1tICovLAogCQkJ
CTkzMTYzM0VBMEFFREZGOTMwMDYyQjkyRCAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5oICovLAog
CQkJCTkzMTYzM0VFMEFFREZGQUUwMDYyQjkyRCAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5tbSAq
LywKKwkJCQlGRUY1MkRGNzBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb24ubW0gKi8s
CisJCQkJRkVGNTJERjgwRjY3NDhGMjAwRkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uSW50ZXJuYWwu
aCAqLywKKwkJCQlGRUY1MkRGOTBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb25Qcml2
YXRlLmggKi8sCiAJCQkJNTE0OTRDRDQwQzdFQkRFMDAwNDE3OEM1IC8qIFdlYkljb25EYXRhYmFz
ZUNsaWVudC5oICovLAogCQkJCTUxNDk0Q0Q1MEM3RUJERTAwMDQxNzhDNSAvKiBXZWJJY29uRGF0
YWJhc2VDbGllbnQubW0gKi8sCiAJCQkJOUNFMUY4QTMwMkE1QzZGMzBFQ0EyQUNEIC8qIFdlYklt
YWdlUmVuZGVyZXJGYWN0b3J5Lm0gKi8sCkBAIC0xMzg5LDYgKzEzOTgsOCBAQAogCQkJCTFBN0Y5
QzRDMEREM0RERUEwMDI4RjhBNSAvKiBucHRleHRpbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEyREJFOUYwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNzRBMjhFMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUY1MkRGQjBGNjc0OEYyMDBGRjcwRUUgLyog
V2ViR2VvbG9jYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNTJERkMwRjY3
NDhGMjAwRkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xNjk2LDYgKzE3MDcsNyBAQAogCQkJCTkzOTgxMEREMDgyNEJGMDEwMDhERjAzOCAvKiBucGFw
aS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMkRCRUEwMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94
eUluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3NEEyOEYwRjRGNzU0MDAwODJFMjI4
IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAorCQkJCUZF
RjUyREZBMEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTU3MikKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAwOS0wMy0xMCAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDUwNQorCisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIC0gSW5z
dGFsbCBwcml2YXRlIGhlYWRlcnMKKwogMjAwOS0wMy0wMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NTgxMjAzPiBXZWJDb3Jl
IGFuZCBXZWJLaXQgc2hvdWxkIGluc3RhbGwgdGhlIHNhbWUgc2V0IG9mIGhlYWRlcnMgZHVyaW5n
IGluc3RhbGxoZHJzIHBoYXNlIGFzIGJ1aWxkIHBoYXNlCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDE1NzIpCisrKyBX
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDA5LTAz
LTEwICBHcmVnIEJvbHNpbmdhICA8Ym9sc2luZ2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDUwNQorICAgICAgICAKKyAgICAgICAgVGhpcyBzZXRzIHVwIEdl
b2xvY2F0aW9uIHNvIHRoYXQgdGhlIENocm9tZSBtYWtlcyBhbiBhc3luY2hyb25vdXMgY2hhbGxl
bmdlLgorICAgICAgICBJdCBhbHNvIGFsbG93cyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIHRvIGlu
ZGljYXRlIHRvIHRoZSBDaHJvbWUgaWYgaXRzCisgICAgICAgIGNhY2hlIHNob3VsZCBiZSBjbGVh
cmVkLgorICAgICAgICAKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBD
SEFOR0VECisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OmNoYWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUpOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Y2hhbGxlbmdlR2VvbG9jYXRpb25Gb3JG
cmFtZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
OjpzZXRJc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmRpc3BsYXlD
aGFsbGVuZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6Z2Vv
bG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZTo6c2hvdWxkQ2FjaGVCZUNsZWFyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9H
ZW9sb2NhdGlvblNlcnZpY2VNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR2VvbG9jYXRp
b25TZXJ2aWNlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlTWFj
OjpzaG91bGRDYWNoZUJlQ2xlYXJlZCk6CisKIDIwMDktMDMtMTAgIEJldGggRGFraW4gIDxiZGFr
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkocmV2aXNpb24gNDE1NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQAogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjZyZWxvYWRFYgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjdhZGREYXRhRVBLY2kKIF9fWk43
V2ViQ29yZTExRnJhbWVMb2FkZXI3Y2FuTG9hZEVSS05TXzRLVVJMRVJLTlNfNlN0cmluZ0VQS05T
XzhEb2N1bWVudEUKK19fWk43V2ViQ29yZTExR2VvbG9jYXRpb24xMnNldElzQWxsb3dlZEViCiBf
X1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMTFzZXRSZWZlcnJlckVSS05TXzZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMUhpc3RvcnlJdGVtMTJhZGRDaGlsZEl0ZW1FTjNXVEYxMFBhc3NSZWZQdHJJUzBf
RUUKIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW0xMnNldFVSTFN0cmluZ0VSS05TXzZTdHJpbmdF
CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDQxNTcyKQorKysgV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTQgKzcyLDYgQEAKIHsKICAg
ICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gR2VvTm90aWZpZXI6OmNyZWF0ZShzdWNj
ZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOwogCi0gICAgaWYgKCFzaG91bGRB
bGxvd0dlb2xvY2F0aW9uKCkpIHsKLSAgICAgICAgaWYgKG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJh
Y2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFdlYkNvcmU6
OlBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwg
IkRpc2FsbG93ZWQgR2VvbG9jYXRpb24iKTsKLSAgICAgICAgICAgIG5vdGlmaWVyLT5tX2Vycm9y
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKCFtX3NlcnZpY2UtPnN0YXJ0VXBkYXRpbmcob3B0aW9u
cykpIHsKICAgICAgICAgaWYgKG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKICAgICAgICAg
ICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQ
b3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgIlVuYWJsZSB0byBTdGFydCIpOwpAQCAt
OTUsMTQgKzg3LDYgQEAKIHsKICAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gR2Vv
Tm90aWZpZXI6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMp
OwogCi0gICAgaWYgKCFzaG91bGRBbGxvd0dlb2xvY2F0aW9uKCkpIHsKLSAgICAgICAgaWYgKG5v
dGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVy
cm9yPiBlcnJvciA9IFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9y
OjpQRVJNSVNTSU9OX0RFTklFRCwgIkRpc2FsbG93ZWQgR2VvbG9jYXRpb24iKTsKLSAgICAgICAg
ICAgIG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBpZiAoIW1fc2Vydmlj
ZS0+c3RhcnRVcGRhdGluZyhvcHRpb25zKSkgewogICAgICAgICBpZiAobm90aWZpZXItPm1fZXJy
b3JDYWxsYmFjaykgewogICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0g
UG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAi
VW5hYmxlIHRvIFN0YXJ0Iik7CkBAIC0xMzgsNiArMTIyLDE4IEBACiAgICAgICAgIG1fc2Vydmlj
ZS0+cmVzdW1lKCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGlz
QWxsb3dlZCkKK3sKKyAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBpc0FsbG93ZWQgPyBZZXMgOiBO
bzsKKyAgICAKKyAgICBpZiAobV9hbGxvd0dlb2xvY2F0aW9uID09IFllcykKKyAgICAgICAgZ2Vv
bG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKG1fc2VydmljZS5nZXQoKSk7CisgICAgZWxz
ZSB7CisgICAgICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I+IGVycm9yID0g
V2ViQ29yZTo6UG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05f
REVOSUVELCAiVXNlciBkaXNhbGxvd2VkIEdlb0xvY2F0aW9uIik7CisgICAgICAgIGhhbmRsZUVy
cm9yKGVycm9yLmdldCgpKTsKKyAgICB9Cit9CisKIHZvaWQgR2VvbG9jYXRpb246OnNlbmRFcnJv
clRvT25lU2hvdHMoUG9zaXRpb25FcnJvciogZXJyb3IpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxH
ZW9Ob3RpZmllcj4gPiBjb3B5OwpAQCAtMjE2LDEwICsyMTIsMzIgQEAKICAgICBtX29uZVNob3Rz
LmNsZWFyKCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246OmRpc3BsYXlDaGFsbGVuZ2VJZk5lY2Vz
c2FyeSgpCit7CisgICAgaWYgKG1fYWxsb3dHZW9sb2NhdGlvbiA+IFVua25vd24pCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gQXNrIHRoZSBjaHJvbWU6IGl0IG1haW50YWlucyB0aGUgZ2Vv
bG9jYXRpb24gY2hhbGxlbmdlIHBvbGljeSBpdHNlbGYuCisgICAgcGFnZS0+Y2hyb21lKCktPmNo
YWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUobV9mcmFtZSwgdGhpcywgbV9zZXJ2aWNlLT5zaG91
bGRDYWNoZUJlQ2xlYXJlZCgpKTsKKyAgICAKKyAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBJblBy
b2dyZXNzOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlv
bkNoYW5nZWQoR2VvbG9jYXRpb25TZXJ2aWNlKiBzZXJ2aWNlKQogewogICAgIEFTU0VSVChzZXJ2
aWNlLT5sYXN0UG9zaXRpb24oKSk7CiAgICAgCisgICAgZGlzcGxheUNoYWxsZW5nZUlmTmVjZXNz
YXJ5KCk7CisgICAgaWYgKG1fYWxsb3dHZW9sb2NhdGlvbiAhPSBZZXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKICAgICBzZW5kUG9zaXRpb25Ub09uZVNob3RzKHNlcnZpY2UtPmxhc3RQb3NpdGlv
bigpKTsKICAgICBzZW5kUG9zaXRpb25Ub1dhdGNoZXJzKHNlcnZpY2UtPmxhc3RQb3NpdGlvbigp
KTsKICAgICAgICAgCkBAIC0yMzYsMTggKzI1NCw0IEBACiAgICAgaGFuZGxlRXJyb3Ioc2Vydmlj
ZS0+bGFzdEVycm9yKCkpOwogfQogCi1ib29sIEdlb2xvY2F0aW9uOjpzaG91bGRBbGxvd0dlb2xv
Y2F0aW9uKCkKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9hbGxvd0dlb2xvY2F0aW9uID09IFVua25vd24p
Ci0gICAgICAgIG1fYWxsb3dHZW9sb2NhdGlvbiA9IHBhZ2UtPmNocm9tZSgpLT5zaG91bGRBbGxv
d0dlb2xvY2F0aW9uRm9yRnJhbWUobV9mcmFtZSkgPyBZZXMgOiBObzsKLSAgICByZXR1cm4gbV9h
bGxvd0dlb2xvY2F0aW9uID09IFllczsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDE1NzIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICAgICBjbGFzcyBGaWxl
Q2hvb3NlcjsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgR2VvbG9jYXRpb247CiAgICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBJbnRS
ZWN0OwogICAgIGNsYXNzIE5vZGU7CkBAIC0xNTIsOCArMTUzLDggQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBwcm9wb3J0aW9u
LCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spOwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
dXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CiAK
LSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93R2VvbG9jYXRpb25Gb3JGcmFtZShGcmFt
ZSopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNoYWxsZW5nZUdl
b2xvY2F0aW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiosIGJvb2wpIHsgfQorICAgICAg
ICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVm
UHRyPEZpbGVDaG9vc2VyPikgPSAwOwogCiAgICAgICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IHRo
ZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMgZnVuY3Rpb24KSW5kZXg6IFdl
YkNvcmUvcGFnZS9DaHJvbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmgJ
KHJldmlzaW9uIDQxNTcyKQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAgICAgY2xhc3MgQ29udGV4dE1lbnU7CiAgICAgY2xhc3MgRmxv
YXRSZWN0OwogICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEdlb2xvY2F0aW9uOwogICAgIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBQYWdlOwpA
QCAtMTE5LDcgKzEyMCw3IEBACiAgICAgICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24o
KTsKICAgICAgICAgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotICAgICAgICBi
b29sIHNob3VsZEFsbG93R2VvbG9jYXRpb25Gb3JGcmFtZShGcmFtZSopOworICAgICAgICB2b2lk
IGNoYWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiosIGJvb2wg
c2hvdWxkQ2xlYXJDYWNoZSk7CiAKICAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA0MTU3MikK
KysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKQEAgLTM4NywxNCArMzg4LDE0IEBACiAgICAgbV9jbGllbnQtPmVuYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCk7CiB9CiAKLWJvb2wgQ2hyb21lOjpzaG91bGRBbGxvd0dlb2xvY2F0
aW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQordm9pZCBDaHJvbWU6OmNoYWxsZW5nZUdlb2xvY2F0
aW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24sIGJvb2wg
c2hvdWxkQ2xlYXJDYWNoZSkKIHsKICAgICAvLyBEZWZlciBsb2FkcyBpbiBjYXNlIHRoZSBjbGll
bnQgbWV0aG9kIHJ1bnMgYSBuZXcgZXZlbnQgbG9vcCB0aGF0IHdvdWxkIAogICAgIC8vIG90aGVy
d2lzZSBjYXVzZSB0aGUgbG9hZCB0byBjb250aW51ZSB3aGlsZSB3ZSdyZSBpbiB0aGUgbWlkZGxl
IG9mIGV4ZWN1dGluZyBKYXZhU2NyaXB0LgogICAgIFBhZ2VHcm91cExvYWREZWZlcnJlciBkZWZl
cnJlcihtX3BhZ2UsIHRydWUpOwogCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICByZXR1cm4gbV9j
bGllbnQtPnNob3VsZEFsbG93R2VvbG9jYXRpb25Gb3JGcmFtZShmcmFtZSk7CisgICAgbV9jbGll
bnQtPmNoYWxsZW5nZUdlb2xvY2F0aW9uRm9yRnJhbWUoZnJhbWUsIGdlb2xvY2F0aW9uLCBzaG91
bGRDbGVhckNhY2hlKTsKIH0KIAogdm9pZCBDaHJvbWU6OnJ1bk9wZW5QYW5lbChGcmFtZSogZnJh
bWUsIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQpJbmRleDogV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9u
LmgJKHJldmlzaW9uIDQxNTcyKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDYgKzYwLDggQEAKIAogICAgIHZvaWQgc3VzcGVuZCgpOwogICAgIHZvaWQg
cmVzdW1lKCk7CisgICAgCisgICAgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7CiAKIHByaXZhdGU6
CiAgICAgR2VvbG9jYXRpb24oRnJhbWUqKTsKQEAgLTg3LDEyICs4OSwxMiBAQAogICAgIAogICAg
IHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOwogCisgICAgdm9pZCBkaXNwbGF5Q2hh
bGxlbmdlSWZOZWNlc3NhcnkoKTsKKwogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAog
ICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9j
YXRpb25TZXJ2aWNlKik7CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9y
T2NjdXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CiAKLSAgICBib29sIHNob3VsZEFsbG93R2Vv
bG9jYXRpb24oKTsKLQogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8R2VvTm90aWZpZXI+ID4g
R2VvTm90aWZpZXJTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEdlb05vdGlm
aWVyPiA+IEdlb05vdGlmaWVyTWFwOwogICAgIApAQCAtMTAzLDYgKzEwNSw3IEBACiAKICAgICBl
bnVtIHsKICAgICAgICAgVW5rbm93biwKKyAgICAgICAgSW5Qcm9ncmVzcywKICAgICAgICAgWWVz
LAogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmgJKHJldmlzaW9uIDQxNTcyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDYgKzU0LDggQEAKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOwogICAg
IHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWNoZUJl
Q2xlYXJlZCgpOworCiAgICAgdmlydHVhbCBHZW9wb3NpdGlvbiogbGFzdFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFBvc2l0aW9u
RXJyb3IqIGxhc3RFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVycm9yLmdldCgpOyB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9HZW9sb2NhdGlvblNlcnZpY2VNYWMubW0J
KHJldmlzaW9uIDQxNTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2
aWNlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJQb3Np
dGlvbk9wdGlvbnMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0IDxDb3JlTG9j
YXRpb24vQ29yZUxvY2F0aW9uLmg+CisjaW1wb3J0IDxDb3JlTG9jYXRpb24vQ29yZUxvY2F0aW9u
UHJpdi5oPgogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZWZQ
dHIuaD4KICNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtMTIxLDYgKzEyMiwxMiBAQAog
ICAgIFttX2xvY2F0aW9uTWFuYWdlci5nZXQoKSBzdGFydFVwZGF0aW5nTG9jYXRpb25dOwogfQog
Citib29sIEdlb2xvY2F0aW9uU2VydmljZU1hYzo6c2hvdWxkQ2FjaGVCZUNsZWFyZWQoKQorewor
ICAgIC8vIFRoaXMgdXNlcyBDb3JlTG9jYXRpb24gU1BJLgorICAgIHJldHVybiBtX2xvY2F0aW9u
TWFuYWdlci5nZXQoKSA/ICFtX2xvY2F0aW9uTWFuYWdlci5nZXQoKS5sb2NhdGlvblNlcnZpY2Vz
QXBwcm92ZWQgOiB0cnVlOworfQorCiB2b2lkIEdlb2xvY2F0aW9uU2VydmljZU1hYzo6cG9zaXRp
b25DaGFuZ2VkKFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHBvc2l0aW9uKQogewogICAgIG1fbGFz
dFBvc2l0aW9uID0gcG9zaXRpb247CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dlb2xvY2F0aW9u
U2VydmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2
aWNlLmgJKHJldmlzaW9uIDQxNTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HZW9sb2NhdGlvblNl
cnZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsOCBAQAogICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpIHsgfQogCisgICAgdmlydHVh
bCBib29sIHNob3VsZENhY2hlQmVDbGVhcmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZp
cnR1YWwgR2VvcG9zaXRpb24qIGxhc3RQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICB2aXJ0dWFsIFBvc2l0aW9uRXJyb3IqIGxhc3RFcnJvcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
IApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDQxNTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0NjAsMTMgKzQ0NjAsMTMgQEAKIAkJRkU4MEQ3QUEwRTlDMUVE
MjAwMEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdBNTBFOUMxRUQyMDAwRDZG
NzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgfTsKIAkJRkU4MEQ3QUIw
RTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1
IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwICovOyB9OwogCQlGRTgwRDdDNTBFOUMxRjI1MDAw
RDZGNzUgLyogR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU4MEQ3QjcwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNw
cCAqLzsgfTsKLQkJRkU4MEQ3QzYwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCODBFOUMx
RjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
ICgpOyB9OyB9OworCQlGRTgwRDdDNjBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0I4MEU5
QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFODBEN0M4MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9w
b3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTgwRDdCQTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uY3BwICovOyB9OwogCQlG
RTgwRDdDOTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JCMEU5QzFGMjUwMDBENkY3NSAv
KiBHZW9wb3NpdGlvbi5oICovOyB9OwotCQlGRTgwRDdDQjBFOUMxRjI1MDAwRDZGNzUgLyogUG9z
aXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU4MEQ3QkQwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2suaCAqLzsg
fTsKKwkJRkU4MEQ3Q0IwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JEMEU5QzFG
MjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4MEQ3Q0QwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBv
c2l0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFODBEN0JGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi87IH07Ci0J
CUZFODBEN0NGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0MxMEU5QzFG
MjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgfTsKLQkJRkU4MEQ3RDEw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QzMwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBv
c2l0aW9uT3B0aW9ucy5oICovOyB9OworCQlGRTgwRDdDRjBFOUMxRjI1MDAwRDZGNzUgLyogUG9z
aXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTgwRDdDMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvckNhbGxi
YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RkU4MEQ3RDEwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QzMwRTlDMUYyNTAwMEQ2
Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
ODBEQTVGMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU4
MERBNjQwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEQTYwMEU5QzQ3MDMwMDBENkY3NSAv
KiBKU0dlb2xvY2F0aW9uLmggKi87IH07CiAJCUZFODBEQTY1MEU5QzQ3MDMwMDBENkY3NSAvKiBK
U0dlb3Bvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFODBEQTYxMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bvc2l0aW9uLmNwcCAqLzsg
fTsKQEAgLTQ0NzQsNyArNDQ3NCw3IEBACiAJCUZFODBEQTcxMEU5QzQ3MkYwMDBENkY3NSAvKiBK
U1Bvc2l0aW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU4MERBNkQwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5jcHAg
Ki87IH07CiAJCUZFODBEQTcyMEU5QzQ3MkYwMDBENkY3NSAvKiBKU1Bvc2l0aW9uRXJyb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEQTZFMEU5
QzQ3MkYwMDBENkY3NSAvKiBKU1Bvc2l0aW9uRXJyb3IuaCAqLzsgfTsKIAkJRkVBQjkwMTIwRUE1
MUI5QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9uU2VydmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUFCOTAxMDBFQTUxQjlDMDA2MzQ4QzMgLyog
R2VvbG9jYXRpb25TZXJ2aWNlLmNwcCAqLzsgfTsKLQkJRkVBQjkwMTMwRUE1MUI5QzAwNjM0OEMz
IC8qIEdlb2xvY2F0aW9uU2VydmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVBQjkwMTEwRUE1MUI5QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9uU2Vy
dmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCUZFQUI5MDEz
MEVBNTFCOUMwMDYzNDhDMyAvKiBHZW9sb2NhdGlvblNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUI5MDExMEVBNTFCOUMwMDYzNDhDMyAv
KiBHZW9sb2NhdGlvblNlcnZpY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCg==
</data>
<flag name="review"
          id="13954"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28566</attachid>
            <date>2009-03-12 16:40:10 -0700</date>
            <delta_ts>2009-03-12 23:05:01 -0700</delta_ts>
            <desc>Updated patch addresses issues found</desc>
            <filename>Bugzilla24505.patch.txt</filename>
            <type>text/plain</type>
            <size>30061</size>
            <attacher name="Greg Bolsinga">bolsinga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTY1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDMtMTIgIEdyZWcgQm9sc2luZ2EgIDxib2xzaW5nYUBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlIEdlb2xvY2F0aW9uIHBlcmltaXNzaW9uIGRpYWxvZ3MgdG8gYmUgYXN5bmNocm9ub3Vz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1MDUK
KworICAgICAgICBHZW9sb2NhdGlvbiBub3cgcmVxdWVzdHMgcGVybWlzc2lvbiBmcm9tIHRoZSBD
aHJvbWUgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIFRoZSBDaHJvbWUgaXMgcGFzc2VkIHRoZSBH
ZW9sb2NhdGlvbiBvYmplY3QsIGFuZCB0aGUgQ2hyb21lIHNldHMgdGhlIHBlcm1pc3Npb24KKyAg
ICAgICAgb24gdGhlIEdlb2xvY2F0aW9uLiBHZW9sb2NhdGlvbiBhbHNvIHRyYWNrcyBpZiB0aGUg
Q2hyb21lIHNob3VsZCBjbGVhciBpdHMgY2FjaGUKKyAgICAgICAgb2YgU2VjdXJpdHlPcmlnaW5z
IHdpdGggZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4gVGhpcyBpcyBzbyB0aGF0IHRoZSBHZW9sb2Nh
dGlvblNlcnZpY2UKKyAgICAgICAgY2FuIGluZm9ybSB0aGUgQ2hyb21lIG9mIGl0cyByZXF1ZXN0
LCBhbmQgdGhlIENocm9tZSBpcyBhbHNvIGZyZWUgdG8gaW1wbGVtZW50IGl0cworICAgICAgICBv
d24gcG9saWN5LgorICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnJlcXVlc3RHZW9sb2NhdGlvblBl
cm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBw
YWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpyZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgorICAgICAgICAqIHBhZ2UvR2VvbG9j
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb246OnNldElzQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvbjo6ZGlzcGxheUNoYWxsZW5nZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvR2VvbG9jYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpp
c0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnNldFNob3VsZENsZWFy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnNob3VsZENsZWFyQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Oik6CisKIDIwMDktMDItMjYgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1c3RpbiBH
YXJjaWEuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0MTY1NikKKysrIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw3IEBAIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI2
cmVsb2FkRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI3YWRkRGF0YUVQS2NpCiBfX1pON1dl
YkNvcmUxMUZyYW1lTG9hZGVyN2NhbkxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUEtOU184
RG9jdW1lbnRFCitfX1pON1dlYkNvcmUxMUdlb2xvY2F0aW9uMTJzZXRJc0FsbG93ZWRFYgogX19a
TjdXZWJDb3JlMTFIaXN0b3J5SXRlbTExc2V0UmVmZXJyZXJFUktOU182U3RyaW5nRQogX19aTjdX
ZWJDb3JlMTFIaXN0b3J5SXRlbTEyYWRkQ2hpbGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VF
CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtMTJzZXRVUkxTdHJpbmdFUktOU182U3RyaW5nRQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDQxNjU2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTQ0NjUsMTMgKzQ0NjUsMTMgQEAKIAkJRkU4MEQ3QUEwRTlDMUVEMjAw
MEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdBNTBFOUMxRUQyMDAwRDZGNzUg
LyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgfTsKIAkJRkU4MEQ3QUIwRTlD
MUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8q
IEpTR2VvbG9jYXRpb25DdXN0b20uY3BwICovOyB9OwogCQlGRTgwRDdDNTBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU4MEQ3QjcwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNwcCAq
LzsgfTsKLQkJRkU4MEQ3QzYwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCODBFOUMxRjI1
MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgp
OyB9OyB9OworCQlGRTgwRDdDNjBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0I4MEU5QzFG
MjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFODBEN0M4MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9wb3Np
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTgwRDdCQTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uY3BwICovOyB9OwogCQlGRTgw
RDdDOTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JCMEU5QzFGMjUwMDBENkY3NSAvKiBH
ZW9wb3NpdGlvbi5oICovOyB9OwotCQlGRTgwRDdDQjBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRp
b25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEQ3QkQwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2suaCAqLzsgfTsK
KwkJRkU4MEQ3Q0IwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JEMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4MEQ3Q0QwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0
aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFODBEN0JGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi87IH07Ci0JCUZF
ODBEN0NGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0MxMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgfTsKLQkJRkU4MEQ3RDEwRTlD
MUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QzMwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0
aW9uT3B0aW9ucy5oICovOyB9OworCQlGRTgwRDdDRjBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRp
b25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTgwRDdDMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvckNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU4
MEQ3RDEwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QzMwRTlDMUYyNTAwMEQ2Rjc1
IC8qIFBvc2l0aW9uT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBE
QTVGMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU4MERB
NjQwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEQTYwMEU5QzQ3MDMwMDBENkY3NSAvKiBK
U0dlb2xvY2F0aW9uLmggKi87IH07CiAJCUZFODBEQTY1MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dl
b3Bvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFODBEQTYxMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bvc2l0aW9uLmNwcCAqLzsgfTsK
QEAgLTQ0NzksNyArNDQ3OSw3IEBACiAJCUZFODBEQTcxMEU5QzQ3MkYwMDBENkY3NSAvKiBKU1Bv
c2l0aW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU4MERBNkQwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5jcHAgKi87
IH07CiAJCUZFODBEQTcyMEU5QzQ3MkYwMDBENkY3NSAvKiBKU1Bvc2l0aW9uRXJyb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEQTZFMEU5QzQ3
MkYwMDBENkY3NSAvKiBKU1Bvc2l0aW9uRXJyb3IuaCAqLzsgfTsKIAkJRkVBQjkwMTIwRUE1MUI5
QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9uU2VydmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUFCOTAxMDBFQTUxQjlDMDA2MzQ4QzMgLyogR2Vv
bG9jYXRpb25TZXJ2aWNlLmNwcCAqLzsgfTsKLQkJRkVBQjkwMTMwRUE1MUI5QzAwNjM0OEMzIC8q
IEdlb2xvY2F0aW9uU2VydmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBQjkwMTEwRUE1MUI5QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9uU2Vydmlj
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCUZFQUI5MDEzMEVB
NTFCOUMwMDYzNDhDMyAvKiBHZW9sb2NhdGlvblNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUI5MDExMEVBNTFCOUMwMDYzNDhDMyAvKiBH
ZW9sb2NhdGlvblNlcnZpY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gNDE2
NTYpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCkBAIC0zODcsMTQgKzM4OCwxNCBAQCB2b2lkIENocm9tZTo6ZW5hYmxl
U3VkZGVuVGVybWluYXRpb24oKQogICAgIG1fY2xpZW50LT5lbmFibGVTdWRkZW5UZXJtaW5hdGlv
bigpOwogfQogCi1ib29sIENocm9tZTo6c2hvdWxkQWxsb3dHZW9sb2NhdGlvbkZvckZyYW1lKEZy
YW1lKiBmcmFtZSkKK3ZvaWQgQ2hyb21lOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCiB7CiAgICAgLy8g
RGVmZXIgbG9hZHMgaW4gY2FzZSB0aGUgY2xpZW50IG1ldGhvZCBydW5zIGEgbmV3IGV2ZW50IGxv
b3AgdGhhdCB3b3VsZCAKICAgICAvLyBvdGhlcndpc2UgY2F1c2UgdGhlIGxvYWQgdG8gY29udGlu
dWUgd2hpbGUgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcgSmF2YVNjcmlwdC4KICAg
ICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJyZXIobV9wYWdlLCB0cnVlKTsKIAogICAgIEFT
U0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRBbGxvd0dlb2xvY2F0aW9u
Rm9yRnJhbWUoZnJhbWUpOworICAgIG1fY2xpZW50LT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNz
aW9uRm9yRnJhbWUoZnJhbWUsIGdlb2xvY2F0aW9uKTsKIH0KIAogdm9pZCBDaHJvbWU6OnJ1bk9w
ZW5QYW5lbChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2Vy
KQpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9DaHJvbWUuaAkocmV2aXNpb24gNDE2NTYpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIENvbnRleHRNZW51OwogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFtZTsK
KyAgICBjbGFzcyBHZW9sb2NhdGlvbjsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNs
YXNzIEludFJlY3Q7CiAgICAgY2xhc3MgUGFnZTsKQEAgLTExOSw3ICsxMjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAg
ICAgICAgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotICAgICAgICBib29sIHNo
b3VsZEFsbG93R2VvbG9jYXRpb25Gb3JGcmFtZShGcmFtZSopOworICAgICAgICB2b2lkIHJlcXVl
c3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7CiAK
ICAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2Vy
Pik7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDQxNjU2KQorKysgV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGaWxlQ2hvb3NlcjsKICAgICBjbGFzcyBGbG9hdFJl
Y3Q7CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgR2VvbG9jYXRpb247CiAgICAgY2xhc3Mg
SGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIE5vZGU7CkBAIC0x
NTIsOCArMTUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNjcm9s
bGJhckNvbnRyb2xQYXJ0TWFzayk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dHZW9sb2NhdGlvbkZvckZyYW1lKEZyYW1lKikgeyBy
ZXR1cm4gZmFsc2U7IH0KLQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9u
UGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7IH0KKyAgICAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxG
aWxlQ2hvb3Nlcj4pID0gMDsKIAogICAgICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCB0aGUgZ2l2
ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDQxNjU2KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBHZW9sb2NhdGlvbjo6R2VvbG9jYXRp
b24oRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fc2VydmljZShH
ZW9sb2NhdGlvblNlcnZpY2U6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fYWxsb3dHZW9sb2NhdGlv
bihVbmtub3duKQorICAgICwgbV9zaG91bGRDbGVhckNhY2hlKGZhbHNlKQogewogICAgIEFTU0VS
VChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2lu
Z0dlb2xvY2F0aW9uKHRydWUpOwpAQCAtNzIsMTQgKzczLDYgQEAgdm9pZCBHZW9sb2NhdGlvbjo6
Z2V0Q3VycmVudFBvc2l0aW9uKFBhcwogewogICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZp
ZXIgPSBHZW9Ob3RpZmllcjo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
b3B0aW9ucyk7CiAKLSAgICBpZiAoIXNob3VsZEFsbG93R2VvbG9jYXRpb24oKSkgewotICAgICAg
ICBpZiAobm90aWZpZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVmUHRyPFBv
c2l0aW9uRXJyb3I+IGVycm9yID0gV2ViQ29yZTo6UG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0
aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAiRGlzYWxsb3dlZCBHZW9sb2NhdGlvbiIpOwot
ICAgICAgICAgICAgbm90aWZpZXItPm1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3Iu
Z2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoIW1f
c2VydmljZS0+c3RhcnRVcGRhdGluZyhvcHRpb25zKSkgewogICAgICAgICBpZiAobm90aWZpZXIt
Pm1fZXJyb3JDYWxsYmFjaykgewogICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVy
cm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVO
SUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7CkBAIC05NSwxNCArODgsNiBAQCBpbnQgR2VvbG9jYXRp
b246OndhdGNoUG9zaXRpb24oUGFzc1JlZlB0CiB7CiAgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBu
b3RpZmllciA9IEdlb05vdGlmaWVyOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrLCBvcHRpb25zKTsKIAotICAgIGlmICghc2hvdWxkQWxsb3dHZW9sb2NhdGlvbigpKSB7Ci0g
ICAgICAgIGlmIChub3RpZmllci0+bV9lcnJvckNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBXZWJDb3JlOjpQb3NpdGlvbkVycm9yOjpjcmVhdGUo
UG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsICJEaXNhbGxvd2VkIEdlb2xvY2F0aW9u
Iik7Ci0gICAgICAgICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChl
cnJvci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAg
aWYgKCFtX3NlcnZpY2UtPnN0YXJ0VXBkYXRpbmcob3B0aW9ucykpIHsKICAgICAgICAgaWYgKG5v
dGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKICAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVy
cm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNT
SU9OX0RFTklFRCwgIlVuYWJsZSB0byBTdGFydCIpOwpAQCAtMTM4LDYgKzEyMywxOCBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpyZXN1bWUoKQogICAgICAgICBtX3NlcnZpY2UtPnJlc3VtZSgpOwogfQog
Cit2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKQoreworICAgIG1f
YWxsb3dHZW9sb2NhdGlvbiA9IGFsbG93ZWQgPyBZZXMgOiBObzsKKyAgICAKKyAgICBpZiAoaXNB
bGxvd2VkKCkpCisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZVBvc2l0aW9uQ2hhbmdlZChtX3Nl
cnZpY2UuZ2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpQ
b3NpdGlvbkVycm9yPiBlcnJvciA9IFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3Np
dGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgIlVzZXIgZGlzYWxsb3dlZCBHZW9Mb2NhdGlv
biIpOworICAgICAgICBoYW5kbGVFcnJvcihlcnJvci5nZXQoKSk7CisgICAgfQorfQorCiB2b2lk
IEdlb2xvY2F0aW9uOjpzZW5kRXJyb3JUb09uZVNob3RzKFBvc2l0aW9uRXJyb3IqIGVycm9yKQog
ewogICAgIFZlY3RvcjxSZWZQdHI8R2VvTm90aWZpZXI+ID4gY29weTsKQEAgLTIxNiwxMCArMjEz
LDMyIEBAIHZvaWQgR2VvbG9jYXRpb246OmhhbmRsZUVycm9yKFBvc2l0aW9uRXIKICAgICBtX29u
ZVNob3RzLmNsZWFyKCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246OmRpc3BsYXlDaGFsbGVuZ2VJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fYWxsb3dHZW9sb2NhdGlvbiA+IFVua25vd24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gQXNrIHRoZSBjaHJvbWU6IGl0IG1haW50YWlucyB0
aGUgZ2VvbG9jYXRpb24gY2hhbGxlbmdlIHBvbGljeSBpdHNlbGYuCisgICAgcGFnZS0+Y2hyb21l
KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShtX2ZyYW1lLCB0aGlzKTsK
KyAgICAKKyAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBJblByb2dyZXNzOworfQorCiB2b2lkIEdl
b2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRpb25T
ZXJ2aWNlKiBzZXJ2aWNlKQogewogICAgIEFTU0VSVChzZXJ2aWNlLT5sYXN0UG9zaXRpb24oKSk7
CiAgICAgCisgICAgZGlzcGxheUNoYWxsZW5nZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKCFpc0Fs
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIHNlbmRQb3NpdGlvblRvT25lU2hv
dHMoc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOwogICAgIHNlbmRQb3NpdGlvblRvV2F0Y2hlcnMo
c2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOwogICAgICAgICAKQEAgLTIzNiwxOCArMjU1LDQgQEAg
dm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJybwogICAgIGhhbmRsZUVycm9y
KHNlcnZpY2UtPmxhc3RFcnJvcigpKTsKIH0KIAotYm9vbCBHZW9sb2NhdGlvbjo6c2hvdWxkQWxs
b3dHZW9sb2NhdGlvbigpCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fYWxsb3dHZW9sb2NhdGlvbiA9PSBV
bmtub3duKQotICAgICAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBwYWdlLT5jaHJvbWUoKS0+c2hv
dWxkQWxsb3dHZW9sb2NhdGlvbkZvckZyYW1lKG1fZnJhbWUpID8gWWVzIDogTm87Ci0gICAgcmV0
dXJuIG1fYWxsb3dHZW9sb2NhdGlvbiA9PSBZZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5oCShyZXZpc2lvbiA0MTY1NikKKysrIFdlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw2ICs2MCwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHN1c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOworICAgIAorICAgIHZvaWQgc2V0
SXNBbGxvd2VkKGJvb2wpOworICAgIGJvb2wgaXNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9h
bGxvd0dlb2xvY2F0aW9uID09IFllczsgfQorICAgIAorICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJD
YWNoZShib29sIHNob3VsZENsZWFyQ2FjaGUpIHsgbV9zaG91bGRDbGVhckNhY2hlID0gc2hvdWxk
Q2xlYXJDYWNoZTsgfQorICAgIGJvb2wgc2hvdWxkQ2xlYXJDYWNoZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkQ2xlYXJDYWNoZTsgfQogCiBwcml2YXRlOgogICAgIEdlb2xvY2F0aW9uKEZyYW1l
Kik7CkBAIC04NywxMiArOTMsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZUVy
cm9yKFBvc2l0aW9uRXJyb3IqKTsKIAorICAgIHZvaWQgZGlzcGxheUNoYWxsZW5nZUlmTmVjZXNz
YXJ5KCk7CisKICAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQKICAgICB2aXJ0dWFsIHZv
aWQgZ2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uU2VydmljZSop
OwogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVkKEdlb2xv
Y2F0aW9uU2VydmljZSopOwogCi0gICAgYm9vbCBzaG91bGRBbGxvd0dlb2xvY2F0aW9uKCk7Ci0K
ICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyU2V0
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3Rp
Zmllck1hcDsKICAgICAKQEAgLTEwMyw5ICsxMDksMTEgQEAgcHJpdmF0ZToKIAogICAgIGVudW0g
ewogICAgICAgICBVbmtub3duLAorICAgICAgICBJblByb2dyZXNzLAogICAgICAgICBZZXMsCiAg
ICAgICAgIE5vCiAgICAgfSBtX2FsbG93R2VvbG9jYXRpb247CisgICAgYm9vbCBtX3Nob3VsZENs
ZWFyQ2FjaGU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MTY1
NykKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAwOS0wMy0xMiAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgR2VvbG9jYXRp
b24gcGVyaW1pc3Npb24gZGlhbG9ncyB0byBiZSBhc3luY2hyb25vdXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDUwNQorCisgICAgICAgIEFkZCBX
ZWJHZW9sb2NhdGlvbiwgYSB3cmFwcGVyIGFyb3VuZCBXZWJDb3JlOjpHZW9sb2NhdGlvbi4gSXQg
bWltaWNzIHRoZQorICAgICAgICBjb2Rpbmcgc3R5bGUgc2V0IGJ5IFdlYlNlY3VyaXR5T3JpZ2lu
LgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMDkt
MDMtMDMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNjU4MTIwMz4gV2ViQ29yZSBhbmQgV2ViS2l0IHNob3VsZCBpbnN0YWxsIHRo
ZSBzYW1lIHNldCBvZiBoZWFkZXJzIGR1cmluZyBpbnN0YWxsaGRycyBwaGFzZSBhcyBidWlsZCBw
aGFzZQpJbmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNDE2NTYpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsOSBAQAogCQlFREU5ODM4MTBCQ0RGNUZFMDBGREFF
MjggLyogV2ViTlNBcnJheUV4dHJhcy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRURFOTgzN0YwQkNERjVGRTAwRkRBRTI4IC8qIFdlYk5TQXJyYXlFeHRy
YXMubSAqLzsgfTsKIAkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgzNEFB
RDUwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY4MzRBQUQ4MEU2NEIxQzcwMEUyNzM3
QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGODM0QUFENjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9y
Lm1tICovOyB9OworCQlGRUY1MkRGQTBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb24u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY1MkRG
NzBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb24ubW0gKi87IH07CisJCUZFRjUyREZC
MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY1MkRGODBGNjc0OEYyMDBGRjcw
RUUgLyogV2ViR2VvbG9jYXRpb25JbnRlcm5hbC5oICovOyB9OworCQlGRUY1MkRGQzBGNjc0OEYy
MDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY1MkRGOTBGNjc0OEYyMDBGRjcwRUUgLyogV2Vi
R2VvbG9jYXRpb25Qcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KQEAgLTYzMiw2ICs2MzUsOSBAQAogCQlGODM0QUFE
NjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGV4dEl0ZXJhdG9yLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGOENBMTVCNTAyOUEzOUQ5MDEwMDAxMjIgLyogV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGOENBMTVCNjAyOUEzOUQ5MDEwMDAx
MjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwubTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUZF
RjUyREY3MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvbi5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdlb2xvY2F0aW9uLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRUY1MkRGODBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9j
YXRpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHZW9s
b2NhdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRjUyREY5
MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvblByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR2VvbG9jYXRpb25Qcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8q
IEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTExMDIsNiArMTEw
OCw5IEBACiAJCQkJNEJGOTlGOEYwQUUwNTBCQzAwODE1QzJCIC8qIFdlYkVkaXRvckNsaWVudC5t
bSAqLywKIAkJCQk5MzE2MzNFQTBBRURGRjkzMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGll
bnQuaCAqLywKIAkJCQk5MzE2MzNFRTBBRURGRkFFMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJD
bGllbnQubW0gKi8sCisJCQkJRkVGNTJERjcwRjY3NDhGMjAwRkY3MEVFIC8qIFdlYkdlb2xvY2F0
aW9uLm1tICovLAorCQkJCUZFRjUyREY4MEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlv
bkludGVybmFsLmggKi8sCisJCQkJRkVGNTJERjkwRjY3NDhGMjAwRkY3MEVFIC8qIFdlYkdlb2xv
Y2F0aW9uUHJpdmF0ZS5oICovLAogCQkJCTUxNDk0Q0Q0MEM3RUJERTAwMDQxNzhDNSAvKiBXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuaCAqLywKIAkJCQk1MTQ5NENENTBDN0VCREUwMDA0MTc4QzUgLyog
V2ViSWNvbkRhdGFiYXNlQ2xpZW50Lm1tICovLAogCQkJCTlDRTFGOEEzMDJBNUM2RjMwRUNBMkFD
RCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tICovLApAQCAtMTM4OSw2ICsxMzk4LDggQEAK
IAkJCQkxQTdGOUM0QzBERDNEREVBMDAyOEY4QTUgLyogbnB0ZXh0aW5wdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMkRCRTlGMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTc0QTI4RTBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNTJERkIwRjY3NDhGMjAw
RkY3MEVFIC8qIFdlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZF
RjUyREZDMEY2NzQ4RjIwMEZGNzBFRSAvKiBXZWJHZW9sb2NhdGlvblByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMTY5Niw2ICsxNzA3LDcgQEAKIAkJCQk5Mzk4MTBERDA4MjRCRjAxMDA4REYw
MzggLyogbnBhcGkubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTJEQkVBMDBGMjUxRTNBMDAzNkY4
QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNzRBMjhGMEY0Rjc1
NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0gaW4gU291cmNlcyAq
LywKKwkJCQlGRUY1MkRGQTBGNjc0OEYyMDBGRjcwRUUgLyogV2ViR2VvbG9jYXRpb24ubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MTY1NykKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMDMtMTIgIEdyZWcgQm9s
c2luZ2EgIDxib2xzaW5nYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEdlb2xvY2F0aW9uIHBlcmltaXNzaW9uIGRpYWxv
Z3MgdG8gYmUgYXN5bmNocm9ub3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ1MDUKKworICAgICAgICBXZWJHZW9sb2NhdGlvbiBpcyBhIHdyYXBw
ZXIgYXJvdW5kIFdlYkNvcmU6Okdlb2xvY2F0aW9uLiBJdCBtaW1pY3MgdGhlCisgICAgICAgIGNv
ZGluZyBzdHlsZSBzZXQgYnkgV2ViU2VjdXJpdHlPcmlnaW4uCisgICAgICAgIAorICAgICAgICBX
ZWJDaHJvbWVDbGllbnQgbm93IGNhbGxzIHRoZSBwcml2YXRlIFVJIGRlbGVnYXRlIG1ldGhvZCAK
KyAgICAgICAgLXdlYlZpZXc6ZnJhbWU6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbjpzZWN1
cml0eU9yaWdpbjoKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbi5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjppZik6CisgICAgICAgICgtW1dlYkdlb2xvY2F0aW9uIHNob3VsZENsZWFy
Q2FjaGVdKToKKyAgICAgICAgKC1bV2ViR2VvbG9jYXRpb24gc2V0SXNBbGxvd2VkOl0pOgorICAg
ICAgICAoLVtXZWJHZW9sb2NhdGlvbiBkZWFsbG9jXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViR2VvbG9jYXRpb25JbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJHZW9sb2NhdGlvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy9X
ZWJVSURlbGVnYXRlUHJpdmF0ZS5oOgorCiAyMDA5LTAzLTEyICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWlrZSBUaG9sZSBhbmQg
TWFyayBSb3dlLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCShyZXZpc2lvbiA0MTY1NikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24o
KTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93R2VvbG9jYXRpb25Gb3JG
cmFtZShXZWJDb3JlOjpGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRp
b25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlv
biopOwogCiBwcml2YXRlOgogICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKSW5kZXg6IFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA0MTY1NikK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5o
IgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3Lmgi
CisjaW1wb3J0ICJXZWJHZW9sb2NhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIVE1MVmll
d0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldl
YktpdFN5c3RlbUludGVyZmFjZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJl
Y3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgpAQCAtNjY0LDE5ICs2NjYsMTcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERyYQogfQogI2VuZGlmCiAKLWJvb2wg
V2ViQ2hyb21lQ2xpZW50OjpzaG91bGRBbGxvd0dlb2xvY2F0aW9uRm9yRnJhbWUoRnJhbWUqIGZy
YW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25G
b3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKIHsKLSAgICBC
T09MIHJlc3VsdCA9IE5POwotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAg
ICAgV2ViU2VjdXJpdHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxs
b2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKV07Ci0gICAgcmVzdWx0ID0gQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29s
ZWFuKE5PLCBtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZEFsbG93TG9jYXRpb25T
ZXJ2aWNlc0ZvckZyYW1lOnNlY3VyaXR5T3JpZ2luOiksIGtpdChmcmFtZSksIHdlYk9yaWdpbik7
CisgICAgV2ViR2VvbG9jYXRpb24gKndlYkdlb2xvY2F0aW9uID0gW1tXZWJHZW9sb2NhdGlvbiBh
bGxvY10gX2luaXRXaXRoV2ViQ29yZUdlb2xvY2F0aW9uOmdlb2xvY2F0aW9uXTsKKyAgICBDYWxs
VUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmZyYW1lOnJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb246c2VjdXJpdHlPcmlnaW46KSwga2l0KGZyYW1lKSwgd2ViR2VvbG9j
YXRpb24sIHdlYk9yaWdpbik7CiAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKKyAgICBbd2ViR2Vv
bG9jYXRpb24gcmVsZWFzZV07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRp
b24ubW0JKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xv
Y2F0aW9uLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYkdlb2xvY2F0aW9uSW50
ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb24uaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHZW9sb2NhdGlvbiAoV2ViSW50ZXJu
YWwpCisKKy0gKGlkKV9pbml0V2l0aFdlYkNvcmVHZW9sb2NhdGlvbjooV2ViQ29yZUdlb2xvY2F0
aW9uICopZ2VvbG9jYXRpb24KK3sKKyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworCisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikgeworICAgICAgICBnZW9sb2NhdGlvbi0+
cmVmKCk7CisgICAgICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHZW9sb2NhdGlv
blByaXZhdGUqPihnZW9sb2NhdGlvbik7CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHZW9sb2NhdGlvbgorCistIChCT09MKXNob3VsZENs
ZWFyQ2FjaGUKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KF9w
cml2YXRlKS0+c2hvdWxkQ2xlYXJDYWNoZSgpOworfQorCistICh2b2lkKXNldElzQWxsb3dlZDoo
Qk9PTClhbGxvd2VkCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KF9wcml2
YXRlKS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBpZiAoX3ByaXZhdGUpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvbG9jYXRpb24qPihf
cHJpdmF0ZSktPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uSW50ZXJu
YWwuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9j
YXRpb25JbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYkdlb2xvY2F0
aW9uUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgR2VvbG9jYXRp
b247Cit9CisKK3R5cGVkZWYgV2ViQ29yZTo6R2VvbG9jYXRpb24gV2ViQ29yZUdlb2xvY2F0aW9u
OworCitAaW50ZXJmYWNlIFdlYkdlb2xvY2F0aW9uIChXZWJJbnRlcm5hbCkKKworLSAoaWQpX2lu
aXRXaXRoV2ViQ29yZUdlb2xvY2F0aW9uOihXZWJDb3JlR2VvbG9jYXRpb24gKilnZW9sb2NhdGlv
bjsKKworQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlv
blByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkdl
b2xvY2F0aW9uUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJHZW9sb2NhdGlvblByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIFdlYkdlb2xvY2F0aW9uUHJpdmF0
ZTsKKworQGludGVyZmFjZSBXZWJHZW9sb2NhdGlvbiA6IE5TT2JqZWN0IHsKK0Bwcml2YXRlCisg
ICAgV2ViR2VvbG9jYXRpb25Qcml2YXRlICpfcHJpdmF0ZTsKK30KKworLSAoQk9PTClzaG91bGRD
bGVhckNhY2hlOworLSAodm9pZClzZXRJc0FsbG93ZWQ6KEJPT0wpYWxsb3dlZDsKK0BlbmQKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiA0
MTY1NikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIGVudW0geyAKICAgICBXZWJNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25SaWdodFRvTGVmdCwKICAgICBXZWJNZW51SXRlbVRhZ0Jhc2VBcHBsaWNhdGlv
biA9IDEwMDAwCiB9OworQGNsYXNzIFdlYkdlb2xvY2F0aW9uOwogQGNsYXNzIFdlYlNlY3VyaXR5
T3JpZ2luOwogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJVSURlbGVnYXRlUHJpdmF0ZSkKQEAg
LTExMCw2ICsxMTEsNiBAQCBlbnVtIHsgCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5k
ZXIgc2hvdWxkUmVwbGFjZVVwbG9hZEZpbGU6KE5TU3RyaW5nICopcGF0aCB1c2luZ0dlbmVyYXRl
ZEZpbGVuYW1lOihOU1N0cmluZyAqKilmaWxlbmFtZTsKIC0gKE5TU3RyaW5nICopd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciBnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZTooTlNTdHJpbmcgKilwYXRo
OwogCi0tIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2hvdWxkQWxsb3dMb2NhdGlv
blNlcnZpY2VzRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUgc2VjdXJpdHlPcmlnaW46KFdlYlNl
Y3VyaXR5T3JpZ2luICopb3JpZ2luOworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IGZyYW1lOihXZWJGcmFtZSAqKWZyYW1lIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb246KFdl
Ykdlb2xvY2F0aW9uICopZ2VvbG9jYXRpb24gc2VjdXJpdHlPcmlnaW46KFdlYlNlY3VyaXR5T3Jp
Z2luICopb3JpZ2luOwogCiBAZW5kCg==
</data>
<flag name="review"
          id="14051"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>