<?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>193852</bug_id>
          
          <creation_ts>2019-01-25 15:54:52 -0800</creation_ts>
          <short_desc>Web Automation: add support for simulating single touches to Automation.performInteractionSequence</short_desc>
          <delta_ts>2019-01-27 10:53:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebDriver</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>joepeck</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1498533</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-01-25 15:54:52 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498534</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-01-25 15:55:04 -0800</bug_when>
    <thetext>&lt;rdar://problem/28360781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498587</commentid>
    <comment_count>2</comment_count>
      <attachid>360194</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-01-25 17:06:35 -0800</bug_when>
    <thetext>Created attachment 360194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498635</commentid>
    <comment_count>3</comment_count>
      <attachid>360194</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-01-25 18:59:20 -0800</bug_when>
    <thetext>Comment on attachment 360194
Patch

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

Looks good to me! May want to get a nod from a WK2 owner.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:54
&gt; +

Style: Unnecessary newline

&gt; Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm:217
&gt; +#if ENABLE(WEBDRIVER_KEYBOARD_INTERACTIONS)
&gt;  

Style: Most of these guards do not have empty line buffers. Should be consistent.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.h:43
&gt; +- (void)receivedHIDEvent:(IOHIDEventRef)event;

This could use a comment, since it is part of the contract I guess.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:35
&gt; +#import &lt;wtf/Optional.h&gt;

Is optional used?

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:70
&gt; +    return (CFAbsoluteTimeGetCurrent() - startTime);

Style: Unnecessary parenthesis.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:75
&gt; +    return (a + (b - a) * sin(sin(t * M_PI / 2) * t * M_PI / 2));

Style: Unnecessary parenthesis.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:83
&gt; +typedef double(*pressureInterpolationFunction)(double, double, CFTimeInterval);

Nit: Unused

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:112
&gt; +    static _WKTouchEventGenerator *eventGenerator = nil;
&gt; +    if (!eventGenerator)
&gt; +        eventGenerator = [[_WKTouchEventGenerator alloc] init];

This is a .mm you should be able to make this one line:

    static _WKTouchEventGenerator *eventGenerator = [[_WKTouchEventGenerator alloc] init];;

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:141
&gt; +- (void)dealloc
&gt; +{
&gt; +    [_eventCallbacks release];
&gt; +    [super dealloc];
&gt; +}

This is never reached, but it should release the _ioSystemClient if non-null:

    if (_ioSystemClient)
        CFRelease(_ioSystemClient);

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:399
&gt; +    CFIndex callbackID = IOHIDEventGetIntegerValue(event, kIOHIDEventFieldVendorDefinedData);
&gt; +    void (^completionBlock)() = [_eventCallbacks objectForKey:@(callbackID)];
&gt; +    if (completionBlock) {
&gt; +        [_eventCallbacks removeObjectForKey:@(callbackID)];

I&apos;d suggest doing @(callbackID) once, to avoid ObjC duplicating this multiple times.

    NSNumber *key = @(callbackID);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498784</commentid>
    <comment_count>4</comment_count>
      <attachid>360194</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-01-26 17:46:58 -0800</bug_when>
    <thetext>Comment on attachment 360194
Patch

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

&gt; Source/WebKit/ChangeLog:10
&gt; +        use a stripped down version of HIDEventGenerator to send HID events to the UIWindow.

Now we have 3 copies of this code :(

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.h:41
&gt; +- (void)touchDown:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
&gt; +- (void)liftUp:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
&gt; +- (void)moveToPoint:(CGPoint)location duration:(NSTimeInterval)seconds completionBlock:(void (^)(void))completionBlock;

The coordinate system of &apos;location&apos; should be documented.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:93
&gt; +    double delay = (eventIndex * fingerMoveInterval) - elapsed;
&gt; +    if (delay &gt; 0) {
&gt; +        struct timespec moveDelay = { 0, static_cast&lt;long&gt;(delay * nanosecondsPerSecond) };
&gt; +        nanosleep(&amp;moveDelay, NULL);
&gt; +    }   
&gt; +}

We may not want to keep doing it this way, sleeping the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498873</commentid>
    <comment_count>5</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-01-27 10:36:16 -0800</bug_when>
    <thetext>Committed r240554: &lt;https://trac.webkit.org/changeset/240554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498874</commentid>
    <comment_count>6</comment_count>
      <attachid>360194</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-01-27 10:53:29 -0800</bug_when>
    <thetext>Comment on attachment 360194
Patch

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

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:153
&gt;      for (auto&amp; identifier : copyToVector(m_pendingKeyboardEventsFlushedCallbacksPerPage.keys())) {

Nit - Not new to this patch, but I think using std::exchange here might be a bit cleaner.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:160
&gt;      for (auto&amp; identifier : copyToVector(m_pendingMouseEventsFlushedCallbacksPerPage.keys())) {

Ditto.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:665
&gt;              for (auto key : copyToVector(m_pendingMouseEventsFlushedCallbacksPerPage.keys())) {

Ditto.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:674
&gt;              for (auto key : copyToVector(m_pendingKeyboardEventsFlushedCallbacksPerPage.keys())) {

Ditto.

&gt; Source/WebKit/UIProcess/Automation/ios/WebAutomationSessionIOS.mm:180
&gt; +    WebCore::IntPoint locationOnScreen = page.syncRootViewToScreen(IntRect(locationInViewport, IntSize())).location();

Contrary to its name, syncRootViewToScreen seems to convert root view coordinates to window coordinates rather than screen coordinates (since it passes nil as the view to convertRect:toView: — https://developer.apple.com/documentation/uikit/uiview/1622504-convertrect).

We should double check that this is what IOKit expects.

&gt; Source/WebKit/UIProcess/_WKTouchEventGenerator.mm:132
&gt; +    _eventCallbacks = [[NSMutableDictionary alloc] init];

Nit - I think we generally prefer RetainPtr over explicit -release in -dealloc.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360194</attachid>
            <date>2019-01-25 17:06:35 -0800</date>
            <delta_ts>2019-01-25 18:59:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193852-20190125170635.patch</filename>
            <type>text/plain</type>
            <size>68798</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUwMDdiYTZiYjhkMTE5MTMw
MTI4YzQ3OTIzMmJmY2ZkMjc2MDlmNjAuLjJiZjhiNzEyODRkZDQwNGJmN2IwNTI3ZDJkMmQwMGI2
ZjIyNDMzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA4IEBACisyMDE5LTAxLTI1ICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBBdXRvbWF0aW9uOiBhZGQgc3Vw
cG9ydCBmb3Igc2ltdWxhdGluZyBzaW5nbGUgdG91Y2hlcyB0byBBdXRvbWF0aW9uLnBlcmZvcm1J
bnRlcmFjdGlvblNlcXVlbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTM4NTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4MzYwNzgxPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgaXQgcG9zc2libGUgdG8gc2ltdWxhdGUgdG91Y2hlcyB2aWEgdGhlIEFjdGlvbnMgQVBJ
LiBUaGUgYXBwcm9hY2ggaXMgdG8KKyAgICAgICAgdXNlIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9u
IG9mIEhJREV2ZW50R2VuZXJhdG9yIHRvIHNlbmQgSElEIGV2ZW50cyB0byB0aGUgVUlXaW5kb3cu
CisgICAgICAgIFRoZSBpbml0aWFsIHZlcnNpb24gc3VwcG9ydHMgYSBzaW5nbGUgdG91Y2ggcG9p
bnQ7IHRoaXMgbWF5IGJlIGV4cGFuZGVkIGlmIG5lZWRlZCwgYnV0CisgICAgICAgIHNvIGZhciBp
dCBoYXNuJ3QgYmVlbiBhbiBpbXBlZGltZW50IHdoZW4gcnVubmluZyBkZXNrdG9wLW9yaWVudGVk
IFdlYkRyaXZlciB0ZXN0IHN1aXRlcy4KKworICAgICAgICBBcyBwYXJ0IG9mIGltcGxlbWVudGlu
ZyB0aGlzIHN1cHBvcnQsIEkgd2VudCB0aHJvdWdoIGFuZCBhZGRlZCBbc29tZXdoYXQgb2Jub3hp
b3VzXSBFTkFCTEUoKQorICAgICAgICBndWFyZHMgc28gdGhhdCB3ZSBkb24ndCBtaXN0YWtlbmx5
IGNvbXBpbGUgbW91c2Ugc3VwcG9ydCBvbiBpT1MgYW5kIHRvdWNoIG9uIE1hYywKKyAgICAgICAg
YW5kIHZpY2UgdmVyc2EuIEVhY2ggb2YgdGhlIGludGVyYWN0aW9uIG1ldGhvZHMtLS10b3VjaCwg
bW91c2UsIGtleWJvYXJkLS0tY2FuIGJlIGluZGVwZW5kZW50bHkKKyAgICAgICAgY29tcGlsZWQg
b3V0LiBJZiBub25lIGlzIHN1cHBvcnRlZCAoaS5lLiwgV2luZG93cyksIHRoZW4gd2UgZG9uJ3Qg
ZXZlbiB0cnkgdG8gY29tcGlsZQorICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlKkludGVyYWN0aW9u
IG1ldGhvZHMgb3IgU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLiBUaGlzIGFsbG93cyBXZWJBdXRv
bWF0aW9uU2Vzc2lvbgorICAgICAgICB0byBub3QgaW5jbHVkZSBtZW1iZXJzIGFuZCBjb2RlIHRo
YXQgYXJlIG5ldmVyIGdvaW5nIHRvIGJlIHVzZWQgb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLgor
CisgICAgICAgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYkRy
aXZlciB0ZXN0IHN1aXRlcyB0aGF0IHVzZSBFbGVtZW50IENsaWNrIGNvbW1hbmQuCisgICAgICAg
IEFkZGl0aW9uYWwgdGVzdHMgdGhhdCBleHBsaWNpdGx5IGluY2x1ZGUgJ3RvdWNoJyBwb2ludGVy
VHlwZSB3aWxsIGJlIHN1Ym1pdHRlZCB0byBXUFQgbGF0ZXIuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb246IFVwZGF0ZSBjb21tZW50LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjp0cmFuc2l0aW9uSW5w
dXRTb3VyY2VUb1N0YXRlKToKKyAgICAgICAgLSBBZGQgYXBwcm9wcmlhdGUgZ3VhcmRzIGZvciBj
b2RlIHNwZWNpZmljIHRvIGVhY2ggaW50ZXJhY3Rpb24gdHlwZS4KKyAgICAgICAgLSBIYW5kbGUg
U2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpUb3VjaCBhbmQgY2FsbCBvdXQgdG8gZGlzcGF0Y2gg
ZXZlbnRzLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjp0
ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2lsbFNo
b3dKYXZhU2NyaXB0RGlhbG9nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246Om1vdXNlRXZlbnRzRmx1c2hlZEZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6a2V5Ym9hcmRFdmVudHNGbHVzaGVkRm9yUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjp3aWxsQ2xvc2VQYWdlKToKKyAgICAgICAgQWRk
IGFwcHJvcHJpYXRlIGd1YXJkcyBmb3IgY29kZSBzcGVjaWZpYyB0byBlYWNoIGludGVyYWN0aW9u
IHR5cGUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmlzU2ltdWxh
dGluZ1VzZXJJbnRlcmFjdGlvbiBjb25zdCk6CisgICAgICAgIEFkZCBuZXcgaG9vayBzbyB0aGF0
IHdlIGNhbiBkZXRlY3Qgd2hlbiBhIHRvdWNoIHNpbXVsYXRpb24gaXMgaW4gcHJvZ3Jlc3MuCisg
ICAgICAgIFdlIGRvbid0IHJlbHkgb24gY2hlY2tpbmcgV2ViS2l0J3MgZXZlbnQgcXVldWUsIHNv
IHVzZSBhIGZsYWcuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNp
bXVsYXRlVG91Y2hJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25T
ZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rp
b25TZXF1ZW5jZSk6CisgICAgICAgIC0gQWRkIGFwcHJvcHJpYXRlIGd1YXJkcyBmb3IgY29kZSBz
cGVjaWZpYyB0byBlYWNoIGludGVyYWN0aW9uIHR5cGUuCisgICAgICAgIC0gQmFpbCBvdXQgaW1t
ZWRpYXRlbHkgaWYgYSByZXF1ZXN0ZWQgaW50ZXJhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVk
LgorICAgICAgICAtIFNoaW0gVG91Y2ggaW5wdXQgdHlwZSB0byBNb3VzZSBpZiBtb3VzZSBpcyBu
b3Qgc3VwcG9ydGVkIGJ1dCB0b3VjaGVzIGFyZS4KKyAgICAgICAgTmVhcmx5IGFsbCBXZWJEcml2
ZXIgdGVzdHMgaW4gdGhlIHdpbGQgd2lsbCBiZSByZXF1ZXN0aW5nIGEgJ21vdXNlJyBwb2ludGVy
VHlwZSwKKyAgICAgICAgc28gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkuIEl0
J3MgZWFzaWVyIHRvIHNoaW0gYXQgdGhpcyBsZXZlbCB0aGFuIHRyeQorICAgICAgICB0byBpbXBs
ZW1lbnQgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24gZm9yIGlPUyBiZWNhdXNlCisg
ICAgICAgIHBsYXRmb3JtU2ltdWxhdGVNb3VzZWludGVyYWN0aW9uIGRvZXMgbm90IHVzZSBhIGNv
bXBsZXRpb24gaGFuZGxlciBidXQgdGhlIGlPUworICAgICAgICBpbXBsZW1lbnRhdGlvbiB3b3Vs
ZCByZXF1aXJlIHRoYXQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246
OnBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtU2ltdWxhdGVLZXlib2FyZEludGVy
YWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW1vdmUgdGhlc2Ugc3R1YnMuIFBsYXRmb3Jt
IG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBhcmUgbm8gbG9uZ2VyIGJlaW5nIGZpbGxlZAorICAgICAg
ICB3aXRoIHN0dWJzIG9uIHVuc3VwcG9ydGVkIHBsYXRmb3JtcyBiZWNhdXNlIHdlIGV4cGVjdCB0
aGUgY29tbWFuZCB0byBmYWlsIGVhcmxpZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9pb3MvV2ViQXV0b21hdGlvblNlc3Npb25JT1MubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybVNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbik6Cisg
ICAgICAgIC0gQWRkIGFwcHJvcHJpYXRlIGd1YXJkcyBmb3IgY29kZSBzcGVjaWZpYyB0byBlYWNo
IGludGVyYWN0aW9uIHR5cGUuCisgICAgICAgIC0gSW1wbGVtZW50IG5ldyBwbGF0Zm9ybSBtZXRo
b2QgdG8gc2ltdWxhdGUgdG91Y2hlcy4gVGhpcyB1c2VzIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3Iu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Np
b25NYWMubW06CisgICAgICAgIEFkZCBhcHByb3ByaWF0ZSBndWFyZHMgZm9yIGNvZGUgc3BlY2lm
aWMgdG8gZWFjaCBpbnRlcmFjdGlvbiB0eXBlLgorCisgICAgICAgICogVUlQcm9jZXNzL19XS1Rv
dWNoRXZlbnRHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL19XS1RvdWNo
RXZlbnRHZW5lcmF0b3IubW06IEFkZGVkLgorICAgICAgICAoc2ltcGxlQ3VydmVJbnRlcnBvbGF0
aW9uKToKKyAgICAgICAgKGNhbGN1bGF0ZU5leHRDdXJ2ZUxvY2F0aW9uKToKKyAgICAgICAgKGRl
bGF5QmV0d2Vlbk1vdmUpOgorICAgICAgICAoK1tfV0tUb3VjaEV2ZW50R2VuZXJhdG9yIHNoYXJl
ZFRvdWNoRXZlbnRHZW5lcmF0b3JdKToKKyAgICAgICAgKCtbX1dLVG91Y2hFdmVudEdlbmVyYXRv
ciBuZXh0RXZlbnRDYWxsYmFja0lEXSk6CisgICAgICAgICgtW19XS1RvdWNoRXZlbnRHZW5lcmF0
b3IgaW5pdF0pOgorICAgICAgICAoLVtfV0tUb3VjaEV2ZW50R2VuZXJhdG9yIGRlYWxsb2NdKToK
KyAgICAgICAgKC1bX1dLVG91Y2hFdmVudEdlbmVyYXRvciBfY3JlYXRlSU9ISURFdmVudFR5cGU6
XSk6CisgICAgICAgICgtW19XS1RvdWNoRXZlbnRHZW5lcmF0b3IgX3NlbmRISURFdmVudDpdKToK
KyAgICAgICAgKC1bX1dLVG91Y2hFdmVudEdlbmVyYXRvciBfc2VuZE1hcmtlckhJREV2ZW50V2l0
aENvbXBsZXRpb25CbG9jazpdKToKKyAgICAgICAgKC1bX1dLVG91Y2hFdmVudEdlbmVyYXRvciBf
dXBkYXRlVG91Y2hQb2ludHM6Y291bnQ6XSk6CisgICAgICAgICgtW19XS1RvdWNoRXZlbnRHZW5l
cmF0b3IgdG91Y2hEb3duQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bX1dLVG91
Y2hFdmVudEdlbmVyYXRvciB0b3VjaERvd246dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bX1dL
VG91Y2hFdmVudEdlbmVyYXRvciB0b3VjaERvd246XSk6CisgICAgICAgICgtW19XS1RvdWNoRXZl
bnRHZW5lcmF0b3IgbGlmdFVwQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bX1dL
VG91Y2hFdmVudEdlbmVyYXRvciBsaWZ0VXA6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bX1dL
VG91Y2hFdmVudEdlbmVyYXRvciBsaWZ0VXA6XSk6CisgICAgICAgICgtW19XS1RvdWNoRXZlbnRH
ZW5lcmF0b3IgbW92ZVRvUG9pbnRzOnRvdWNoQ291bnQ6ZHVyYXRpb246XSk6CisgICAgICAgICgt
W19XS1RvdWNoRXZlbnRHZW5lcmF0b3IgdG91Y2hEb3duOmNvbXBsZXRpb25CbG9jazpdKToKKyAg
ICAgICAgKC1bX1dLVG91Y2hFdmVudEdlbmVyYXRvciBsaWZ0VXA6Y29tcGxldGlvbkJsb2NrOl0p
OgorICAgICAgICAoLVtfV0tUb3VjaEV2ZW50R2VuZXJhdG9yIG1vdmVUb1BvaW50OmR1cmF0aW9u
OmNvbXBsZXRpb25CbG9jazpdKToKKyAgICAgICAgKC1bX1dLVG91Y2hFdmVudEdlbmVyYXRvciBy
ZWNlaXZlZEhJREV2ZW50Ol0pOgorICAgICAgICBDb3BpZWQgYW5kIHNpbXBsaWZpZWQgZnJvbSBI
SURFdmVudEdlbmVyYXRvciBpbiBXZWJLaXRUZXN0UnVubmVyLgorCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBfV0tUb3VjaEV2ZW50R2Vu
ZXJhdG9yLntoLG1tfSBhbmQgbWFrZSBpdCBhIHByaXZhdGUgaGVhZGVyLiBUaGUgY2xpZW50IG5l
ZWRzIHRvCisgICAgICAgIHJvdXRlIHJlY2VpdmVkIEhJRCBldmVudHMgdG8gLXJlY2VpdmVkSElE
RXZlbnQ6IGluIG9yZGVyIHRvIGRldGVjdCB3aGVuIHRoZSBtYXJrZXIKKyAgICAgICAgSElEIGV2
ZW50IGhhcyBiZWVuIHByb2Nlc3NlZCAoYW5kIHRodXMgdGhlIGludGVyYWN0aW9uIGlzIGNvbXBs
ZXRlZCkuCisKKyAgICAgICAgKiBjb25maWcuaDogQWRkIEVOQUJMRShXRUJEUklWRVJfKl9JTlRF
UkFDVElPTlMpIG1hY3JvcyBoZXJlLgorCiAyMDE5LTAxLTI1ICBLZWl0aCBSb2xsaW4gIDxrcm9s
bGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgWGNvZGUgcHJvamVjdHMgd2l0aCAiQ2hl
Y2sgLnhjZmlsZWxpc3RzIiBidWlsZCBwaGFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgppbmRleCA3Zjc0MTcyZDNlNmJiOTdmZjEx
MDdmOGU3ZWUwNDI0NzFhNWFkNTE2Li5kNDc1NzQ0NjY0NjJiNzQxNWMwMjM1MDA5NTMzNDllYWI0
ZGJkOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzb3VyY2VJZCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaW5w
dXQgc291cmNlIHdob3NlIHN0YXRlIGlzIGRlc2NyaWJlZCBieSB0aGlzIG9iamVjdC4iIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmVzc2VkQ2hhcktleSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJGb3IgJ2tleWJvYXJkJyBpbnB1
dCBzb3VyY2VzLCBzcGVjaWZpZXMgYSBjaGFyYWN0ZXIga2V5IHRoYXQgaGFzICdwcmVzc2VkJyBz
dGF0ZS4gVW5tZW50aW9uZWQgY2hhcmFjdGVyIGtleXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhICdy
ZWxlYXNlZCcgc3RhdGUuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJlc3NlZFZp
cnR1YWxLZXlzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlZpcnR1YWxL
ZXkiIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJGb3IgJ2tleWJvYXJkJyBp
bnB1dCBzb3VyY2VzLCBzcGVjaWZpZXMgdmlydHVhbCBrZXlzIHRoYXQgaGF2ZSBhICdwcmVzc2Vk
JyBzdGF0ZS4gVW5tZW50aW9uZWQgdmlydHVhbCBrZXlzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSAn
cmVsZWFzZWQnIHN0YXRlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByZXNzZWRC
dXR0b24iLCAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJGb3IgJ21vdXNlJyBpbnB1dCBzb3VyY2VzLCBzcGVjaWZpZXMgd2hpY2ggbW91c2Ug
YnV0dG9uIGhhcyBhICdwcmVzc2VkJyBzdGF0ZS4gVW5tZW50aW9uZWQgbW91c2UgYnV0dG9ucyBh
cmUgYXNzdW1lZCB0byBoYXZlIGEgJ3JlbGVhc2VkJyBzdGF0ZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmVzc2VkQnV0dG9uIiwgIiRyZWYiOiAiTW91c2VCdXR0b24iLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiRm9yICdtb3VzZScgaW5wdXQgc291cmNlcywg
c3BlY2lmaWVzIHdoaWNoIG1vdXNlIGJ1dHRvbiBoYXMgYSAncHJlc3NlZCcgc3RhdGUuIFVubWVu
dGlvbmVkIG1vdXNlIGJ1dHRvbnMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhICdyZWxlYXNlZCcgc3Rh
dGUuIEZvciAndG91Y2gnIGlucHV0IHNvdXJjZXMsIHBhc3NpbmcgTW91c2VCdXR0b246OkxlZnQg
ZGVub3RlcyBhIHRvdWNoLWRvd24gc3RhdGUuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAib3JpZ2luIiwgIiRyZWYiOiAiTW91c2VNb3ZlT3JpZ2luIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIkZvciAnbW91c2UnIGlucHV0IHNvdXJjZXMsIHNwZWNpZmllcyB0aGUg
b3JpZ2luIHR5cGUgb2YgYSBtb3VzZSBtb3ZlIHRyYW5zaXRpb24uIERlZmF1bHRzIHRvICdWaWV3
cG9ydCcgaWYgb21pdHRlZC4ifSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVIYW5k
bGUiLCAiJHJlZiI6ICJOb2RlSGFuZGxlIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlRoZSBoYW5kbGUgb2YgdGhlIGVsZW1lbnQgdG8gdXNlIGFzIG9yaWdpbiB3aGVuIG9yaWdp
biB0eXBlIGlzICdFbGVtZW50Jy4ifSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2F0
aW9uIiwgIiRyZWYiOiAiUG9pbnQiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAi
Rm9yICdtb3VzZScgb3IgJ3RvdWNoJyBpbnB1dCBzb3VyY2VzLCBzcGVjaWZpZXMgYSBsb2NhdGlv
biBpbiB2aWV3IGNvb3JkaW5hdGVzIHRvIHdoaWNoIHRoZSBpbnB1dCBzb3VyY2Ugc2hvdWxkIHRy
YW5zaXRpb24uIFRyYW5zaXRpb25pbmcgdG8gdGhpcyBzdGF0ZSBtYXkgaW50ZXJwb2xhdGUgaW50
ZW1lZGlhdGUgaW5wdXQgc291cmNlIHN0YXRlcyB0byBiZXR0ZXIgc2ltdWxhdGUgcmVhbCB1c2Vy
IG1vdmVtZW50cyBhbmQgZ2VzdHVyZXMuIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuY3Bw
CmluZGV4IDA1OTBjNTdiMjk3ZGY2MzlkODQ2NWI2NGQ1ZTg3MmYwNGIzNDQ2YjYuLjM1ZWI3MTk1
NGZkY2M3YWRlMmMwNjUzOTI1MjQ5NGEwM2U5YjVlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0
Y2hlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaCIKIAorI2lmIEVOQUJMRShXRUJEUklWRVJfQUNUSU9O
U19BUEkpCisKICNpbmNsdWRlICJBdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9uLmgiCkBAIC0yNTks
NiArMjYxLDkgQEAgdm9pZCBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OnRyYW5zaXRpb25JbnB1
dFNvdXJjZVRvU3RhdGUoU2ltdWxhdGVkSW5wdXRTb3VyY2UKICAgICAgICAgZXZlbnREaXNwYXRj
aEZpbmlzaGVkKFdURjo6bnVsbG9wdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2ltdWxh
dGVkSW5wdXRTb3VyY2VUeXBlOjpNb3VzZTogeworI2lmICFFTkFCTEUoV0VCRFJJVkVSX01PVVNF
X0lOVEVSQUNUSU9OUykKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bHNlCiAgICAgICAgIHJlc29sdmVMb2NhdGlvbihhLmxvY2F0aW9uLnZhbHVlT3IoV2ViQ29yZTo6
SW50UG9pbnQoKSksIGIubG9jYXRpb24sIGIub3JpZ2luLnZhbHVlT3IoTW91c2VNb3ZlT3JpZ2lu
OjpWaWV3cG9ydCksIGIubm9kZUhhbmRsZSwgW3RoaXMsICZhLCAmYiwgZXZlbnREaXNwYXRjaEZp
bmlzaGVkID0gV1RGTW92ZShldmVudERpc3BhdGNoRmluaXNoZWQpXShPcHRpb25hbDxXZWJDb3Jl
OjpJbnRQb2ludD4gbG9jYXRpb24sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVy
cm9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgICAg
IGV2ZW50RGlzcGF0Y2hGaW5pc2hlZChlcnJvcik7CkBAIC0yNzAsMjUgKzI3NSw1NiBAQCB2b2lk
IFNpbXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6dHJhbnNpdGlvbklucHV0U291cmNlVG9TdGF0ZShT
aW11bGF0ZWRJbnB1dFNvdXJjZQogICAgICAgICAgICAgaWYgKCFhLnByZXNzZWRNb3VzZUJ1dHRv
biAmJiBiLnByZXNzZWRNb3VzZUJ1dHRvbikgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAg
ICAgICAgICBTdHJpbmcgbW91c2VCdXR0b25OYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGIucHJlc3NlZE1vdXNlQnV0dG9u
LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIExPRyhBdXRvbWF0aW9uLCAiU2ltdWxhdGVkSW5w
dXREaXNwYXRjaGVyWyVwXTogc2ltdWxhdGluZyBNb3VzZURvd25bYnV0dG9uPSVzXSBmb3IgdHJh
bnNpdGlvbiB0byAlZC4lZCIsIHRoaXMsIG1vdXNlQnV0dG9uTmFtZS51dGY4KCkuZGF0YSgpLCBt
X2tleWZyYW1lSW5kZXgsIG1faW5wdXRTb3VyY2VTdGF0ZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBMT0coQXV0b21hdGlvbiwgIlNpbXVsYXRlZElucHV0RGlzcGF0Y2hlclslcF06IHNpbXVsYXRp
bmcgTW91c2VEb3duW2J1dHRvbj0lc10gQCAoJWQsICVkKSBmb3IgdHJhbnNpdGlvbiB0byAlZC4l
ZCIsIHRoaXMsIG1vdXNlQnV0dG9uTmFtZS51dGY4KCkuZGF0YSgpLCBiLmxvY2F0aW9uLnZhbHVl
KCkueCgpLCBiLmxvY2F0aW9uLnZhbHVlKCkueSgpLCBtX2tleWZyYW1lSW5kZXgsIG1faW5wdXRT
b3VyY2VTdGF0ZUluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIG1fY2xpZW50LnNpbXVs
YXRlTW91c2VJbnRlcmFjdGlvbihtX3BhZ2UsIE1vdXNlSW50ZXJhY3Rpb246OkRvd24sIGIucHJl
c3NlZE1vdXNlQnV0dG9uLnZhbHVlKCksIGIubG9jYXRpb24udmFsdWUoKSwgV1RGTW92ZShldmVu
dERpc3BhdGNoRmluaXNoZWQpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5wcmVzc2VkTW91
c2VCdXR0b24gJiYgIWIucHJlc3NlZE1vdXNlQnV0dG9uKSB7CiAjaWYgIUxPR19ESVNBQkxFRAog
ICAgICAgICAgICAgICAgIFN0cmluZyBtb3VzZUJ1dHRvbk5hbWUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYS5wcmVzc2VkTW91
c2VCdXR0b24udmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEF1dG9tYXRpb24sICJTaW11
bGF0ZWRJbnB1dERpc3BhdGNoZXJbJXBdOiBzaW11bGF0aW5nIE1vdXNlVXBbYnV0dG9uPSVzXSBm
b3IgdHJhbnNpdGlvbiB0byAlZC4lZCIsIHRoaXMsIG1vdXNlQnV0dG9uTmFtZS51dGY4KCkuZGF0
YSgpLCBtX2tleWZyYW1lSW5kZXgsIG1faW5wdXRTb3VyY2VTdGF0ZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBMT0coQXV0b21hdGlvbiwgIlNpbXVsYXRlZElucHV0RGlzcGF0Y2hlclslcF06IHNp
bXVsYXRpbmcgTW91c2VVcFtidXR0b249JXNdIEAgKCVkLCAlZCkgZm9yIHRyYW5zaXRpb24gdG8g
JWQuJWQiLCB0aGlzLCBtb3VzZUJ1dHRvbk5hbWUudXRmOCgpLmRhdGEoKSwgYS5sb2NhdGlvbi52
YWx1ZSgpLngoKSwgYS5sb2NhdGlvbi52YWx1ZSgpLnkoKSwgbV9rZXlmcmFtZUluZGV4LCBtX2lu
cHV0U291cmNlU3RhdGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBtX2NsaWVudC5z
aW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24obV9wYWdlLCBNb3VzZUludGVyYWN0aW9uOjpVcCwgYS5w
cmVzc2VkTW91c2VCdXR0b24udmFsdWUoKSwgYi5sb2NhdGlvbi52YWx1ZSgpLCBXVEZNb3ZlKGV2
ZW50RGlzcGF0Y2hGaW5pc2hlZCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhLmxvY2F0aW9u
ICE9IGIubG9jYXRpb24pIHsKLSAgICAgICAgICAgICAgICBMT0coQXV0b21hdGlvbiwgIlNpbXVs
YXRlZElucHV0RGlzcGF0Y2hlclslcF06IHNpbXVsYXRpbmcgTW91c2VNb3ZlIGZvciB0cmFuc2l0
aW9uIHRvICVkLiVkIiwgdGhpcywgbV9rZXlmcmFtZUluZGV4LCBtX2lucHV0U291cmNlU3RhdGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgTE9HKEF1dG9tYXRpb24sICJTaW11bGF0ZWRJbnB1dERp
c3BhdGNoZXJbJXBdOiBzaW11bGF0aW5nIE1vdXNlTW92ZSBmcm9tICglZCwgJWQpIHRvICglZCwg
JWQpIGZvciB0cmFuc2l0aW9uIHRvICVkLiVkIiwgdGhpcywgYS5sb2NhdGlvbi52YWx1ZSgpLngo
KSwgYS5sb2NhdGlvbi52YWx1ZSgpLnkoKSwgYi5sb2NhdGlvbi52YWx1ZSgpLngoKSwgYi5sb2Nh
dGlvbi52YWx1ZSgpLnkoKSwgbV9rZXlmcmFtZUluZGV4LCBtX2lucHV0U291cmNlU3RhdGVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaW50ZXJwb2xhdGUg
bW91c2Vtb3ZlcyBwZXIgdGhlICJwZXJmb3JtIGEgcG9pbnRlciBtb3ZlIiBhbGdvcml0aG0gKMKn
MTcuNCBEaXNwYXRjaGluZyBBY3Rpb25zKS4KICAgICAgICAgICAgICAgICBtX2NsaWVudC5zaW11
bGF0ZU1vdXNlSW50ZXJhY3Rpb24obV9wYWdlLCBNb3VzZUludGVyYWN0aW9uOjpNb3ZlLCBiLnBy
ZXNzZWRNb3VzZUJ1dHRvbi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb0J1dHRvbiksIGIubG9jYXRp
b24udmFsdWUoKSwgV1RGTW92ZShldmVudERpc3BhdGNoRmluaXNoZWQpKTsKICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIGV2ZW50RGlzcGF0Y2hGaW5pc2hlZChXVEY6Om51bGxv
cHQpOwogICAgICAgICB9KTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVS
QUNUSU9OUykKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU2ltdWxhdGVkSW5wdXRT
b3VyY2VUeXBlOjpUb3VjaDogeworI2lmICFFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNU
SU9OUykKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlCisgICAg
ICAgIHJlc29sdmVMb2NhdGlvbihhLmxvY2F0aW9uLnZhbHVlT3IoV2ViQ29yZTo6SW50UG9pbnQo
KSksIGIubG9jYXRpb24sIGIub3JpZ2luLnZhbHVlT3IoTW91c2VNb3ZlT3JpZ2luOjpWaWV3cG9y
dCksIGIubm9kZUhhbmRsZSwgW3RoaXMsICZhLCAmYiwgZXZlbnREaXNwYXRjaEZpbmlzaGVkID0g
V1RGTW92ZShldmVudERpc3BhdGNoRmluaXNoZWQpXShPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2lu
dD4gbG9jYXRpb24sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIGV2ZW50RGlz
cGF0Y2hGaW5pc2hlZChlcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24pOworICAgICAgICAgICAg
Yi5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICAgICAgLy8gVGhlICJkaXNwYXRjaCBhIHBv
aW50ZXJ7RG93bixVcCxNb3ZlfSBhY3Rpb24iIGFsZ29yaXRobXMgKMKnMTcuNCBEaXNwYXRjaGlu
ZyBBY3Rpb25zKS4KKyAgICAgICAgICAgIGlmICghYS5wcmVzc2VkTW91c2VCdXR0b24gJiYgYi5w
cmVzc2VkTW91c2VCdXR0b24pIHsKKyAgICAgICAgICAgICAgICBMT0coQXV0b21hdGlvbiwgIlNp
bXVsYXRlZElucHV0RGlzcGF0Y2hlclslcF06IHNpbXVsYXRpbmcgVG91Y2hEb3duIEAgKCVkLCAl
ZCkgZm9yIHRyYW5zaXRpb24gdG8gJWQuJWQiLCB0aGlzLCBiLmxvY2F0aW9uLnZhbHVlKCkueCgp
LCBiLmxvY2F0aW9uLnZhbHVlKCkueSgpLCBtX2tleWZyYW1lSW5kZXgsIG1faW5wdXRTb3VyY2VT
dGF0ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5zaW11bGF0ZVRvdWNoSW50ZXJh
Y3Rpb24obV9wYWdlLCBUb3VjaEludGVyYWN0aW9uOjpUb3VjaERvd24sIGIubG9jYXRpb24udmFs
dWUoKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKGV2ZW50RGlzcGF0Y2hGaW5pc2hlZCkpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChhLnByZXNzZWRNb3VzZUJ1dHRvbiAmJiAhYi5wcmVzc2VkTW91
c2VCdXR0b24pIHsKKyAgICAgICAgICAgICAgICBMT0coQXV0b21hdGlvbiwgIlNpbXVsYXRlZElu
cHV0RGlzcGF0Y2hlclslcF06IHNpbXVsYXRpbmcgTGlmdFVwIEAgKCVkLCAlZCkgZm9yIHRyYW5z
aXRpb24gdG8gJWQuJWQiLCB0aGlzLCBhLmxvY2F0aW9uLnZhbHVlKCkueCgpLCBhLmxvY2F0aW9u
LnZhbHVlKCkueSgpLCBtX2tleWZyYW1lSW5kZXgsIG1faW5wdXRTb3VyY2VTdGF0ZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBtX2NsaWVudC5zaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24obV9wYWdl
LCBUb3VjaEludGVyYWN0aW9uOjpMaWZ0VXAsIGIubG9jYXRpb24udmFsdWUoKSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKGV2ZW50RGlzcGF0Y2hGaW5pc2hlZCkpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChhLmxvY2F0aW9uICE9IGIubG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBMT0coQXV0
b21hdGlvbiwgIlNpbXVsYXRlZElucHV0RGlzcGF0Y2hlclslcF06IHNpbXVsYXRpbmcgTW92ZVRv
IGZyb20gKCVkLCAlZCkgdG8gKCVkLCAlZCkgZm9yIHRyYW5zaXRpb24gdG8gJWQuJWQiLCB0aGlz
LCBhLmxvY2F0aW9uLnZhbHVlKCkueCgpLCBhLmxvY2F0aW9uLnZhbHVlKCkueSgpLCBiLmxvY2F0
aW9uLnZhbHVlKCkueCgpLCBiLmxvY2F0aW9uLnZhbHVlKCkueSgpLCBtX2tleWZyYW1lSW5kZXgs
IG1faW5wdXRTb3VyY2VTdGF0ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5zaW11
bGF0ZVRvdWNoSW50ZXJhY3Rpb24obV9wYWdlLCBUb3VjaEludGVyYWN0aW9uOjpNb3ZlVG8sIGIu
bG9jYXRpb24udmFsdWUoKSwgYS5kdXJhdGlvbi52YWx1ZU9yKDBfcyksIFdURk1vdmUoZXZlbnRE
aXNwYXRjaEZpbmlzaGVkKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBl
dmVudERpc3BhdGNoRmluaXNoZWQoV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSk7CisjZW5kaWYg
Ly8gIUVOQUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGU6OktleWJvYXJkOgorI2lm
ICFFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlCiAgICAgICAgIC8vIFRoZSAiZGlzcGF0Y2gg
YSBrZXl7RG93bixVcH0gYWN0aW9uIiBhbGdvcml0aG1zICjCpzE3LjQgRGlzcGF0Y2hpbmcgQWN0
aW9ucykuCiAgICAgICAgIGlmICghYS5wcmVzc2VkQ2hhcktleSAmJiBiLnByZXNzZWRDaGFyS2V5
KSB7CiAgICAgICAgICAgICBMT0coQXV0b21hdGlvbiwgIlNpbXVsYXRlZElucHV0RGlzcGF0Y2hl
clslcF06IHNpbXVsYXRpbmcgS2V5UHJlc3Nba2V5PSVjXSBmb3IgdHJhbnNpdGlvbiB0byAlZC4l
ZCIsIHRoaXMsIGIucHJlc3NlZENoYXJLZXkudmFsdWUoKSwgbV9rZXlmcmFtZUluZGV4LCBtX2lu
cHV0U291cmNlU3RhdGVJbmRleCk7CkBAIC0zMjcsMTEgKzM2Myw3IEBAIHZvaWQgU2ltdWxhdGVk
SW5wdXREaXNwYXRjaGVyOjp0cmFuc2l0aW9uSW5wdXRTb3VyY2VUb1N0YXRlKFNpbXVsYXRlZElu
cHV0U291cmNlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXZl
bnREaXNwYXRjaEZpbmlzaGVkKFdURjo6bnVsbG9wdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpUb3VjaDoKLSAgICAgICAgLy8gTm90IHN1cHBv
cnRlZCB5ZXQuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBldmVudERp
c3BhdGNoRmluaXNoZWQoQVVUT01BVElPTl9DT01NQU5EX0VSUk9SX1dJVEhfTkFNRShOb3RJbXBs
ZW1lbnRlZCkpOworI2VuZGlmIC8vICFFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNU
SU9OUykKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMzg3LDMgKzQxOSw1IEBAIHZvaWQg
U2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpmaW5pc2hEaXNwYXRjaGluZyhPcHRpb25hbDxBdXRv
bWF0aW9uQ29tbWFuZEVycm9yCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmtpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5o
CmluZGV4IDQ3NzMzYWM3NDQxMDMyODAwNzBlNDFmZmUyNDFmYjBkZGRhNjczNWEuLjdmNDE0MWNl
MGEzOWU1NjA3M2M3ZWM4YTk2NTYwY2JjMzQ4YWRmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNo
ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShXRUJEUklW
RVJfQUNUSU9OU19BUEkpCisKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC02NSw2ICs2
NywxMiBAQCBlbnVtIGNsYXNzIFNpbXVsYXRlZElucHV0U291cmNlVHlwZSB7CiAgICAgVG91Y2gs
CiB9OwogCitlbnVtIGNsYXNzIFRvdWNoSW50ZXJhY3Rpb24geworICAgIFRvdWNoRG93biwKKyAg
ICBNb3ZlVG8sCisgICAgTGlmdFVwLAorfTsKKwogc3RydWN0IFNpbXVsYXRlZElucHV0U291cmNl
U3RhdGUgewogICAgIE9wdGlvbmFsPENoYXJLZXk+IHByZXNzZWRDaGFyS2V5OwogICAgIFZpcnR1
YWxLZXlTZXQgcHJlc3NlZFZpcnR1YWxLZXlzOwpAQCAtMTE1LDggKzEyMywxNSBAQCBwdWJsaWM6
CiAgICAgY2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNsaWVu
dCgpIHsgfQorI2lmIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1v
dXNlSW50ZXJhY3Rpb24sIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgPSAw
OworI2VuZGlmCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5Jiwg
VG91Y2hJbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3
LCBPcHRpb25hbDxTZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVy
JiYpID0gMDsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJ
T05TKQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdl
YlBhZ2VQcm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5
LCBDaGFyS2V5PiYmLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgPSAwOworI2VuZGlm
CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50
KFdlYlBhZ2VQcm94eSYsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRs
ZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxB
dXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpID0gMDsKICAgICB9OwogCkBAIC0xNjcsMyArMTgy
LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXgg
Zjg4NDRhZmU2ZDIyZTRjZDVlZTIwODE0OGI0ZjQ5MmY3Y2M2MzEwZC4uMjBjYTNlNTNkMjA4ZmM3
YTQzMDNhOWE2Nzc3ODYxNDdiOGVmN2NiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTUx
LDYgKzUxLDcgQEAKICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmg+CiAKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CkBAIC03OCwxMCArNzksMTkgQEAgV2ViQXV0b21hdGlvblNlc3Npb246
OldlYkF1dG9tYXRpb25TZXNzaW9uKCkKICAgICAsIG1fZG9tYWluTm90aWZpZXIoc3RkOjptYWtl
X3VuaXF1ZTxBdXRvbWF0aW9uRnJvbnRlbmREaXNwYXRjaGVyPihtX2Zyb250ZW5kUm91dGVyKSkK
ICAgICAsIG1fbG9hZFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYkF1dG9tYXRpb25T
ZXNzaW9uOjpsb2FkVGltZXJGaXJlZCkKIHsKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNf
QVBJKQogICAgIC8vIFNldCB1cCBjYW5vbmljYWwgaW5wdXQgc291cmNlcyB0byBiZSB1c2VkIGZv
ciAncGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UnIGFuZCAnY2FuY2VsSW50ZXJhY3Rpb25TZXF1
ZW5jZScuCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpCisgICAgbV9p
bnB1dFNvdXJjZXMuYWRkKFNpbXVsYXRlZElucHV0U291cmNlOjpjcmVhdGUoU2ltdWxhdGVkSW5w
dXRTb3VyY2VUeXBlOjpUb3VjaCkpOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9NT1VT
RV9JTlRFUkFDVElPTlMpCiAgICAgbV9pbnB1dFNvdXJjZXMuYWRkKFNpbXVsYXRlZElucHV0U291
cmNlOjpjcmVhdGUoU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpNb3VzZSkpOworI2VuZGlmCisj
aWYgRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAgICAgbV9pbnB1dFNv
dXJjZXMuYWRkKFNpbXVsYXRlZElucHV0U291cmNlOjpjcmVhdGUoU2ltdWxhdGVkSW5wdXRTb3Vy
Y2VUeXBlOjpLZXlib2FyZCkpOworI2VuZGlmCiAgICAgbV9pbnB1dFNvdXJjZXMuYWRkKFNpbXVs
YXRlZElucHV0U291cmNlOjpjcmVhdGUoU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpOdWxsKSk7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIH0KIAogV2ViQXV0b21h
dGlvblNlc3Npb246On5XZWJBdXRvbWF0aW9uU2Vzc2lvbigpCkBAIC0xMzksMTUgKzE0OSwxOSBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsJiBjaGFubmVsKQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp0ZXJtaW5h
dGUoKQogeworI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAg
IGZvciAoYXV0byYgaWRlbnRpZmllciA6IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdLZXlib2FyZEV2
ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmtleXMoKSkpIHsKICAgICAgICAgYXV0byBjYWxs
YmFjayA9IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFr
ZShpZGVudGlmaWVyKTsKICAgICAgICAgY2FsbGJhY2soQVVUT01BVElPTl9DT01NQU5EX0VSUk9S
X1dJVEhfTkFNRShJbnRlcm5hbEVycm9yKSk7CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShXRUJE
UklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9NT1VT
RV9JTlRFUkFDVElPTlMpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9y
KG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2Uua2V5cygpKSkgewog
ICAgICAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJh
Y2tzUGVyUGFnZS50YWtlKGlkZW50aWZpZXIpOwogICAgICAgICBjYWxsYmFjayhBVVRPTUFUSU9O
X0NPTU1BTkRfRVJST1JfV0lUSF9OQU1FKEludGVybmFsRXJyb3IpKTsKICAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAKICNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGNoYW5u
ZWwgPSBtX3JlbW90ZUNoYW5uZWwpIHsKQEAgLTY0NSwyMCArNjU5LDI0IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OndpbGxTaG93SmF2YVNjcmlwdERpYWxvZyhXZWJQYWdlUHJveHkmIHBh
Z2UpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKHVuZXhwZWN0ZWRBbGVy
dE9wZW5FcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKKyNpZiBF
TkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKICAgICAgICAgaWYgKCFtX3BlbmRp
bmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFja3NQZXJQYWdlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvIGtleSA6IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNb3VzZUV2ZW50c0Zs
dXNoZWRDYWxsYmFja3NQZXJQYWdlLmtleXMoKSkpIHsKICAgICAgICAgICAgICAgICBhdXRvIGNh
bGxiYWNrID0gbV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS50YWtl
KGtleSk7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJB
Q1RJT05TKQogCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAg
ICAgICAgIGlmICghbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFn
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byBrZXkgOiBjb3B5VG9WZWN0b3Io
bV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5rZXlzKCkpKSB7
CiAgICAgICAgICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0tleWJvYXJkRXZlbnRz
Rmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFrZShrZXkpOwogICAgICAgICAgICAgICAgIGNhbGxi
YWNrKFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKICAgICB9KTsKIH0KICAgICAK
QEAgLTc3NiwxNCArNzk0LDIyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3Rv
ckZyb250ZW5kTG9hZGVkKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSkKIAogdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6bW91c2VFdmVudHNGbHVzaGVkRm9yUGFnZShjb25zdCBXZWJQYWdlUHJv
eHkmIHBhZ2UpCiB7CisjaWYgRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAg
ICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFj
a3NQZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpCiAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVs
bG9wdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyNlbmRpZgogfQogCiB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjprZXlib2FyZEV2ZW50c0ZsdXNoZWRGb3JQYWdlKGNvbnN0
IFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lO
VEVSQUNUSU9OUykKICAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0tleWJvYXJkRXZl
bnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFrZShwYWdlLnBhZ2VJRCgpKSkKICAgICAgICAg
Y2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwor
I2VuZGlmCiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndpbGxDbG9zZVBhZ2UoY29u
c3QgV2ViUGFnZVByb3h5JiBwYWdlKQpAQCAtNzkzLDE1ICs4MTksMjEgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6d2lsbENsb3NlUGFnZShjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UpCiAK
ICAgICAvLyBDYW5jZWwgcGVuZGluZyBpbnRlcmFjdGlvbnMgb24gdGhpcyBwYWdlLiBCeSBwcm92
aWRpbmcgYW4gZXJyb3IsIHRoaXMgd2lsbCBjYXVzZSBzdWJzZXF1ZW50CiAgICAgLy8gYWN0aW9u
cyB0byBiZSBhYm9ydGVkIGFuZCB0aGUgU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpydW4oKSBj
YWxsIHdpbGwgdW53aW5kIGFuZCBmYWlsLgorI2lmIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5U
RVJBQ1RJT05TKQogICAgIGlmIChhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nTW91c2VFdmVudHNG
bHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS50YWtlKHBhZ2UucGFnZUlEKCkpKQogICAgICAgICBjYWxs
YmFjayhBVVRPTUFUSU9OX0NPTU1BTkRfRVJST1JfV0lUSF9OQU1FKFdpbmRvd05vdEZvdW5kKSk7
Ci0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdNb3VzZUV2ZW50c0ZsdXNoZWRDYWxs
YmFja3NQZXJQYWdlLnRha2UocGFnZS5wYWdlSUQoKSkpCisjZW5kaWYKKyNpZiBFTkFCTEUoV0VC
RFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKKyAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1f
cGVuZGluZ0tleWJvYXJkRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UudGFrZShwYWdlLnBh
Z2VJRCgpKSkKICAgICAgICAgY2FsbGJhY2soQVVUT01BVElPTl9DT01NQU5EX0VSUk9SX1dJVEhf
TkFNRShXaW5kb3dOb3RGb3VuZCkpOworI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX0FD
VElPTlNfQVBJKQogICAgIC8vIFRoZW4gdGVsbCB0aGUgaW5wdXQgZGlzcGF0Y2hlciB0byBjYW5j
ZWwgc28gdGltZXJzIGFyZSBzdG9wcGVkLCBhbmQgbGV0IGl0IGdvIG91dCBvZiBzY29wZS4KICAg
ICBPcHRpb25hbDxSZWY8U2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyPj4gaW5wdXREaXNwYXRjaGVy
ID0gbV9pbnB1dERpc3BhdGNoZXJzQnlQYWdlLnRha2UocGFnZS5wYWdlSUQoKSk7CiAgICAgaWYg
KGlucHV0RGlzcGF0Y2hlci5oYXNWYWx1ZSgpKQogICAgICAgICBpbnB1dERpc3BhdGNoZXIudmFs
dWUoKS0+Y2FuY2VsKCk7CisjZW5kaWYKIH0KIAogc3RhdGljIGJvb2wgZmlsZUNhbkJlQWNjZXB0
ZWRGb3JVcGxvYWQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhbGxvd2VkTUlNRVR5cGVzLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRGaWxlRXh0
ZW5zaW9ucykKQEAgLTE0MzQsMTQgKzE0NjYsMjIgQEAgYm9vbCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2hvdWxkQWxsb3dHZXRVc2VyTWVkaWFGb3JQYWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYpIGMK
IAogYm9vbCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaW11bGF0aW5nVXNlckludGVyYWN0aW9u
KCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKICAg
ICBpZiAoIW1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2UuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJEUklWRVJf
S0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIGlmICghbV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNG
bHVzaGVkQ2FsbGJhY2tzUGVyUGFnZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykKKyAgICBp
ZiAobV9zaW11bGF0aW5nVG91Y2hJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX0FDVElP
TlNfQVBJKQogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyJiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
aW5wdXREaXNwYXRjaGVyRm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7CiAgICAgcmV0dXJu
IG1faW5wdXREaXNwYXRjaGVyc0J5UGFnZS5lbnN1cmUocGFnZS5wYWdlSUQoKSwgWyZdIHsKQEAg
LTE0NjAsNyArMTUwMCw3IEBAIFNpbXVsYXRlZElucHV0U291cmNlKiBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6aW5wdXRTb3VyY2VGb3JUeXBlKFNpbXVsYXRlZElucHV0U291CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLS8vIFNpbXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQorLy8g
TUFSSzogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpDbGllbnQgQVBJCiB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgdWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBG
dW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9t
YXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBTdGFy
dCBhdCAzIGFuZCB1c2Ugb25seSBvZGQgbnVtYmVycyB0byBub3QgY29uZmxpY3Qgd2l0aCBtX25l
eHRDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrSUQuCkBAIC0xNDcwLDYgKzE1MTAsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVt
ZW50KFdlYlBhZ2VQcm94eSYgcGFnZQogICAgIHBhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVFbGVtZW50TGF5b3V0KHBhZ2UucGFn
ZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIGZhbHNlLCBDb29yZGluYXRlU3lzdGVtOjpMYXlv
dXRWaWV3cG9ydCwgY2FsbGJhY2tJRCksIDApOwogfQogCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9N
T1VTRV9JTlRFUkFDVElPTlMpCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzaW11bGF0ZU1v
dXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBNb3VzZUludGVyYWN0aW9uIGludGVy
YWN0aW9uLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VCdXR0b24sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBsb2NhdGlvbkluVmlld3BvcnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIFdlYkNvcmU6OkludFBvaW50IGxvY2F0aW9uSW5WaWV3ID0gV2ViQ29yZTo6SW50UG9pbnQo
bG9jYXRpb25JblZpZXdwb3J0LngoKSwgbG9jYXRpb25JblZpZXdwb3J0LnkoKSArIHBhZ2UudG9w
Q29udGVudEluc2V0KCkpOwpAQCAtMTUwMiw3ICsxNTQzLDI3IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIE1v
dXNlSW50CiAgICAgICAgIC8vIE90aGVyd2lzZSwgd2FpdCBmb3IgbW91c2VFdmVudHNGbHVzaGVk
Q2FsbGJhY2sgdG8gcnVuIHdoZW4gYWxsIGV2ZW50cyBhcmUgaGFuZGxlZC4KICAgICB9KTsKIH0K
KyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKIAorI2lmIEVO
QUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgVG91Y2hJ
bnRlcmFjdGlvbiBpbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9u
SW5WaWV3cG9ydCwgT3B0aW9uYWw8U2Vjb25kcz4gZHVyYXRpb24sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFwYWdlLnVub2JzY3Vy
ZWRDb250ZW50UmVjdCgpLmNvbnRhaW5zKGxvY2F0aW9uSW5WaWV3cG9ydCkpIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQVVUT01BVElPTl9DT01NQU5EX0VSUk9SX1dJVEhfTkFNRShUYXJn
ZXRPdXRPZkJvdW5kcykpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBt
X3NpbXVsYXRpbmdUb3VjaEludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBwbGF0Zm9ybVNpbXVsYXRl
VG91Y2hJbnRlcmFjdGlvbihwYWdlLCBpbnRlcmFjdGlvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBk
dXJhdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oT3B0aW9uYWw8QXV0b21hdGlv
bkNvbW1hbmRFcnJvcj4gZXJyb3IpIG11dGFibGUgeworICAgICAgICBtX3NpbXVsYXRpbmdUb3Vj
aEludGVyYWN0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVycm9yKTsK
KyAgICB9KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9O
UykKKworI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgS2V5Ym9hcmRJbnRlcmFjdGlvbiBpbnRlcmFjdGlvbiwgV1RGOjpWYXJpYW50
PFZpcnR1YWxLZXksIENoYXJLZXk+JiYga2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICAvLyBCcmlkZ2UgdGhlIGZsdXNoZWQgY2FsbGJhY2sgdG8gb3VyIGNvbW1hbmQncyBjb21wbGV0
aW9uIGhhbmRsZXIuCkBAIC0xNTI2LDggKzE1ODcsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgS2V5
Ym8KIAogICAgIC8vIE90aGVyd2lzZSwgd2FpdCBmb3Iga2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2Fs
bGJhY2sgdG8gcnVuIHdoZW4gYWxsIGV2ZW50cyBhcmUgaGFuZGxlZC4KIH0KKyNlbmRpZiAvLyBF
TkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKIAotI2lmIFVTRShBUFBLSVQp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorI2VuZGlmIC8vIEVOQUJMRShXRUJE
UklWRVJfQUNUSU9OU19BUEkpCisKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKIHN0YXRpYyBXZWJFdmVudDo6TW9kaWZpZXJzIHByb3RvY29sTW9kaWZpZXJUb1dlYkV2
ZW50TW9kaWZpZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5TW9kaWZpZXIg
bW9kaWZpZXIpCiB7CiAgICAgc3dpdGNoIChtb2RpZmllcikgewpAQCAtMTU0NSw3ICsxNjA5LDkg
QEAgc3RhdGljIFdlYkV2ZW50OjpNb2RpZmllcnMgcHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRN
b2RpZmllcihJbnNwZWN0b3I6OlByb3RvY28KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMp
CiAKKyNpZiBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogc3RhdGljIFdlYk1vdXNlRXZl
bnQ6OkJ1dHRvbiBwcm90b2NvbE1vdXNlQnV0dG9uVG9XZWJNb3VzZUV2ZW50QnV0dG9uKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uIGJ1dHRvbikKIHsKICAgICBz
d2l0Y2ggKGJ1dHRvbikgewpAQCAtMTU2MSwxMSArMTYyNywxMSBAQCBzdGF0aWMgV2ViTW91c2VF
dmVudDo6QnV0dG9uIHByb3RvY29sTW91c2VCdXR0b25Ub1dlYk1vdXNlRXZlbnRCdXR0b24oSW5z
cGVjdG9yOgogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KLSNlbmRpZiAv
LyBVU0UoQVBQS0lUKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
SlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBtb3Vz
ZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBjb25z
dCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSNpZiAhVVNFKEFQUEtJVCkgJiYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFdQRSkKKyNpZiAhRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9J
TlRFUkFDVElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1w
bGVtZW50ZWQpOwogI2Vsc2UKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlG
b3JIYW5kbGUoaGFuZGxlKTsKQEAgLTE2MzQsMTIgKzE3MDAsMTIgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrVG9DYW5jZWwoV1RGOjpudWxsb3B0KTsKICAg
ICAgICAgfQogICAgIH0pOwotI2VuZGlmIC8vIFVTRShBUFBLSVQpIHx8IFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQorI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJB
Q1RJT05TKQogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJ
bnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnRl
cmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShHVEspICYmICFQTEFU
Rk9STShXUEUpCisjaWYgIUVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQog
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKICNl
bHNlCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRs
ZSk7CkBAIC0xNzE2LDEwICsxNzgyLDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBl
cmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAKICAg
ICBmb3IgKGF1dG8mIGFjdGlvbiA6IGFjdGlvbnNUb1BlcmZvcm0pCiAgICAgICAgIGFjdGlvbigp
OwotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdQRSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykK
IH0KIAotI2lmIFVTRShBUFBLSVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQor
I2lmIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiBzdGF0aWMgU2ltdWxhdGVkSW5wdXRT
b3VyY2VUeXBlIHNpbXVsYXRlZElucHV0U291cmNlVHlwZUZyb21Qcm90b2NvbFNvdXJjZVR5cGUo
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6SW5wdXRTb3VyY2VUeXBlIHByb3RvY29s
VHlwZSkKIHsKICAgICBzd2l0Y2ggKHByb3RvY29sVHlwZSkgewpAQCAtMTczNSwxMyArMTgwMSwx
MyBAQCBzdGF0aWMgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlIHNpbXVsYXRlZElucHV0U291cmNl
VHlwZUZyb21Qcm90b2NvbFNvdXJjZVR5cGUoSQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKSB8fCBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKFdQRSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCiB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25z
dCBKU09OOjpBcnJheSYgaW5wdXRTb3VyY2VzLCBjb25zdCBKU09OOjpBcnJheSYgc3RlcHMsIFJl
ZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQgaW1wbGVtZW50cyBXZWJLaXQg
c3VwcG9ydCBmb3IgwqcxNy41IFBlcmZvcm0gQWN0aW9ucy4KIAotI2lmICFVU0UoQVBQS0lUKSAm
JiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV1BFKQorI2lmICFFTkFCTEUoV0VCRFJJVkVS
X0FDVElPTlNfQVBJKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdElt
cGxlbWVudGVkKTsKICNlbHNlCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5
Rm9ySGFuZGxlKGhhbmRsZSk7CkBAIC0xNzc4LDkgKzE4NDQsMjYgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnMKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1
dFNvdXJjZXMnIHBhcmFtZXRlciBoYXMgYW4gaW52YWxpZCAnc291cmNlVHlwZScuIik7CiAKICAg
ICAgICAgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlIGlucHV0U291cmNlVHlwZSA9IHNpbXVsYXRl
ZElucHV0U291cmNlVHlwZUZyb21Qcm90b2NvbFNvdXJjZVR5cGUoKnBhcnNlZElucHV0U291cmNl
VHlwZSk7CisKKyAgICAgICAgLy8gTm90ZTogaU9TIGRvZXMgbm90IHN1cHBvcnQgbW91c2UgaW5w
dXQgc291cmNlcywgYW5kIG90aGVyIHBsYXRmb3JtcyBkbyBub3Qgc3VwcG9ydCB0b3VjaCBpbnB1
dCBzb3VyY2VzLgorICAgICAgICAvLyBJZiBhIG1pc21hdGNoIGhhcHBlbnMsIGFsaWFzIHRvIHRo
ZSBzdXBwb3J0ZWQgaW5wdXQgc291cmNlLiBUaGlzIHdvcmtzIGJlY2F1c2UgYm90aCBNb3VzZSBh
bmQgVG91Y2ggaW5wdXQgc291cmNlcworICAgICAgICAvLyB1c2UgYSBNb3VzZUJ1dHRvbiB0byBp
bmRpY2F0ZSB0aGUgcmVzdWx0IG9mIGludGVyYWN0aW5nIChkb3duL3VwL21vdmUpLCB3aGljaCBj
YW4gYmUgaW50ZXJwcmV0ZWQgZm9yIHRvdWNoIG9yIG1vdXNlLgorI2lmICFFTkFCTEUoV0VCRFJJ
VkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJiYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFD
VElPTlMpCisgICAgICAgIGlmIChpbnB1dFNvdXJjZVR5cGUgPT0gU2ltdWxhdGVkSW5wdXRTb3Vy
Y2VUeXBlOjpNb3VzZSkKKyAgICAgICAgICAgIGlucHV0U291cmNlVHlwZSA9IFNpbXVsYXRlZElu
cHV0U291cmNlVHlwZTo6VG91Y2g7CisjZW5kaWYKKyNpZiAhRU5BQkxFKFdFQkRSSVZFUl9NT1VT
RV9JTlRFUkFDVElPTlMpCisgICAgICAgIGlmIChpbnB1dFNvdXJjZVR5cGUgPT0gU2ltdWxhdGVk
SW5wdXRTb3VyY2VUeXBlOjpNb3VzZSkKKyAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE5vdEltcGxlbWVudGVkLCAiTW91c2UgaW5wdXQgc291
cmNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuIik7CisjZW5kaWYKKyNpZiAhRU5BQkxFKFdFQkRS
SVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpCiAgICAgICAgIGlmIChpbnB1dFNvdXJjZVR5cGUgPT0g
U2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpUb3VjaCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE5vdEltcGxlbWVudGVkLCAiVG91Y2gg
aW5wdXQgc291cmNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuIik7Ci0KKyNlbmRpZgorI2lmICFF
TkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKKyAgICAgICAgaWYgKGlucHV0
U291cmNlVHlwZSA9PSBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGU6OktleWJvYXJkKQorICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTm90SW1w
bGVtZW50ZWQsICJLZXlib2FyZCBpbnB1dCBzb3VyY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4i
KTsKKyNlbmRpZgogICAgICAgICBpZiAodHlwZVRvU291cmNlSWRNYXAuY29udGFpbnMoaW5wdXRT
b3VyY2VUeXBlKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUd28gaW5wdXQgc291cmNlcyB3aXRoIHRo
ZSBzYW1lIHR5cGUgd2VyZSBzcGVjaWZpZWQuIik7CiAgICAgICAgIGlmIChzb3VyY2VJZFRvSW5w
dXRTb3VyY2VNYXAuY29udGFpbnMoc291cmNlSWQpKQpAQCAtMTg5MiwxNCArMTk3NSwxNCBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZF
Ul9BQ1RJT05TX0FQSSkKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50
ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbEZyYW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBw
b3J0IGZvciDCpzE3LjYgUmVsZWFzZSBBY3Rpb25zLgogCi0jaWYgIVVTRShBUFBLSVQpICYmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXUEUpCisjaWYgIUVOQUJMRShXRUJEUklWRVJfQUNU
SU9OU19BUEkpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVt
ZW50ZWQpOwogI2Vsc2UKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoaGFuZGxlKTsKQEAgLTE5MjAsNyArMjAwMyw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwog
ICAgIH0pOwotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKFdQRSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogfQog
CiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsTm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lm
TmVlZGVkLCBjb25zdCBib29sKiBvcHRpb25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVl
bnNob3RDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTE5NjEsMjIgKzIwNDQsNiBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpkaWRUYWtlU2NyZWVuc2hvdCh1aW50NjRfdCBjYWxsYmFja0lE
LCBjb25zdCBTaGFyZWFibAogICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhiYXNlNjRFbmNvZGVk
RGF0YS52YWx1ZSgpKTsKIH0KIAotLy8gUGxhdGZvcm0tZGVwZW5kZW50IEltcGxlbWVudGF0aW9u
IFN0dWJzLgotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdQRSkKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtU2ltdWxhdGVNb3Vz
ZUludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIFdlYk1vdXNlRXZl
bnQ6OkJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJFdmVudDo6TW9kaWZpZXJz
KQotewotfQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShXUEUpCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShXUEUpCi0KLQotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1T
aW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFj
dGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYpCi17Ci19Ci0jZW5kaWYg
Ly8gIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV1BFKQot
CiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKENBSVJPKQogT3B0aW9uYWw8U3RyaW5nPiBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25z
dCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggYmUw
YWZlYzY3ZjU3OGY2MTA5ZWFlNTM1YTNkODNmODY4M2Y3MjAxYy4uYmFkMDcwMjlmNTQ3ZDY3NGU2
MjM0NDdmNzVmMzBhNzM3YzgxNmRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaApAQCAtOTksNyArOTks
OSBAQCBjbGFzcyBXZWJBdXRvbWF0aW9uU2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9iamVj
dEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkF1dAogICAgICwgcHVibGljIEluc3BlY3Rvcjo6UmVt
b3RlQXV0b21hdGlvblRhcmdldAogI2VuZGlmCiAgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpBdXRv
bWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9BQ1RJ
T05TX0FQSSkKICAgICAsIHB1YmxpYyBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OkNsaWVudAor
I2VuZGlmCiB7CiBwdWJsaWM6CiAgICAgV2ViQXV0b21hdGlvblNlc3Npb24oKTsKQEAgLTEzNSwx
MSArMTM3LDIyIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKKyNp
ZiBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQorCiAgICAgLy8gU2ltdWxhdGVkSW5wdXRE
aXNwYXRjaGVyOjpDbGllbnQgQVBJCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFD
VElPTlMpCiAgICAgdm9pZCBzaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5Jiwg
TW91c2VJbnRlcmFjdGlvbiwgV2ViTW91c2VFdmVudDo6QnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBm
aW5hbDsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKQor
ICAgIHZvaWQgc2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIFRvdWNoSW50
ZXJhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgT3B0aW9u
YWw8U2Vjb25kcz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5h
bDsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQog
ICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJv
YXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5LCBDaGFyS2V5PiYmLCBBdXRv
bWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisjZW5kaWYKICAgICB2b2lkIHZpZXdw
b3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiwgdWludDY0X3QgZnJh
bWVJRCwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxX
ZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJikg
ZmluYWw7CiAKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQorCiAgICAg
Ly8gSW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIEFQSQogICAg
IC8vIE5PVEU6IHRoZSBzZXQgb2YgZGVjbGFyYXRpb25zIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJm
YWNlIGRlcGVuZCBvbiB0aGUgInBsYXRmb3JtIiBwcm9wZXJ0eSBpbiBBdXRvbWF0aW9uLmpzb24K
ICAgICAvLyBhbmQgdGhlIC0tcGxhdGZvcm0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcm90b2Nv
bCBiaW5kaW5ncyBnZW5lcmF0b3IuCkBAIC0xODgsOCArMjAxLDEwIEBAIHB1YmxpYzoKIAogICAg
IC8vIEV2ZW50IFNpbXVsYXRpb24gU3VwcG9ydC4KICAgICBib29sIGlzU2ltdWxhdGluZ1VzZXJJ
bnRlcmFjdGlvbigpIGNvbnN0OworI2lmIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiAg
ICAgU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyJiBpbnB1dERpc3BhdGNoZXJGb3JQYWdlKFdlYlBh
Z2VQcm94eSYpOwogICAgIFNpbXVsYXRlZElucHV0U291cmNlKiBpbnB1dFNvdXJjZUZvclR5cGUo
U2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlKSBjb25zdDsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGJvb2wgd2FzRXZlbnRTeW50aGVzaXplZEZvckF1dG9tYXRpb24oTlNFdmVudCAq
KTsKQEAgLTIzMSwxMSArMjQ2LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWREZWxldGVDb29r
aWUodWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGUpOwogCiAgICAg
Ly8gUGxhdGZvcm0tZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucy4KKyNpZiBFTkFCTEUoV0VCRFJJ
VkVSX01PVVNFX0lOVEVSQUNUSU9OUykKICAgICB2b2lkIHBsYXRmb3JtU2ltdWxhdGVNb3VzZUlu
dGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIFdlYk1vdXNlRXZlbnQ6
OkJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBXZWJFdmVu
dDo6TW9kaWZpZXJzIGtleU1vZGlmaWVycyk7CisjZW5kaWYKKyNpZiBFTkFCTEUoV0VCRFJJVkVS
X1RPVUNIX0lOVEVSQUNUSU9OUykKKyAgICAvLyBTaW11bGF0ZXMgYSBzaW5nbGUgdG91Y2ggcG9p
bnQgYmVpbmcgcHJlc3NlZCwgbW92ZWQsIGFuZCByZWxlYXNlZC4KKyAgICB2b2lkIHBsYXRmb3Jt
U2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIFRvdWNoSW50ZXJhY3Rpb24s
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlld3BvcnQsIE9wdGlvbmFsPFNl
Y29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CisjZW5kaWYK
KyNpZiBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKICAgICAvLyBTaW11
bGF0ZXMgYSBzaW5nbGUgdmlydHVhbCBvciBjaGFyIGtleSBiZWluZyBwcmVzc2VkL3JlbGVhc2Vk
LCBzdWNoIGFzICdhJywgQ29udHJvbCwgRi1rZXlzLCBOdW1wYWQga2V5cywgZXRjLiBhcyBhbGxv
d2VkIGJ5IHRoZSBwcm90b2NvbC4KICAgICB2b2lkIHBsYXRmb3JtU2ltdWxhdGVLZXlib2FyZElu
dGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFu
dDxWaXJ0dWFsS2V5LCBDaGFyS2V5PiYmKTsKICAgICAvLyBTaW11bGF0ZXMga2V5IHByZXNzZXMg
dG8gcHJvZHVjZSB0aGUgY29kZXBvaW50cyBpbiBhIHN0cmluZy4gT25lIG9yIG1vcmUgY29kZSBw
b2ludHMgYXJlIGRlbGl2ZXJlZCBhdG9taWNhbGx5IGF0IGdyYXBoZW1lIGNsdXN0ZXIgYm91bmRh
cmllcy4KICAgICB2b2lkIHBsYXRmb3JtU2ltdWxhdGVLZXlTZXF1ZW5jZShXZWJQYWdlUHJveHkm
LCBjb25zdCBTdHJpbmcmKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lO
VEVSQUNUSU9OUykKKwogICAgIC8vIEdldCBiYXNlNjQgZW5jb2RlZCBQTkcgZGF0YSBmcm9tIGEg
Yml0bWFwLgogICAgIE9wdGlvbmFsPFN0cmluZz4gcGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5H
RGF0YShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwogCkBAIC0yNjcsOCArMjkxLDEy
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+IG1fcGVuZGluZ05vcm1hbE5hdmlnYXRpb25J
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlckZyYW1lOwogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiBtX3Bl
bmRpbmdFYWdlck5hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrc1BlckZyYW1lOwog
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2U+PiBtX3BlbmRpbmdJbnNwZWN0b3JDYWxsYmFja3NQZXJQYWdlOworI2lm
IEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEZ1bmN0aW9uPHZvaWQoT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPj4g
bV9wZW5kaW5nS2V5Ym9hcmRFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZTsKKyNlbmRpZgor
I2lmIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEZ1bmN0aW9uPHZvaWQoT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPj4g
bV9wZW5kaW5nTW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2tzUGVyUGFnZTsKKyNlbmRpZgogCiAg
ICAgdWludDY0X3QgbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2tJRCB7IDEgfTsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPj4gbV9l
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrczsKQEAgLTMxMCwxNCArMzM4LDIwIEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSB7IHRydWUg
fTsKIAotICAgIC8vIEtlZXAgdHJhY2sgb2YgY3VycmVudGx5IGFjdGl2ZSBtb2RpZmllcnMgYWNy
b3NzIG11bHRpcGxlIGtleXN0cm9rZXMuCi0gICAgLy8gTW9zdCBwbGF0Zm9ybXMgZG8gbm90IHRy
YWNrIGN1cnJlbnQgbW9kaWZpZXJzIGZyb20gc3ludGhlc2l6ZWQgZXZlbnRzLgotICAgIHVuc2ln
bmVkIG1fY3VycmVudE1vZGlmaWVycyB7IDAgfTsKLQorI2lmIEVOQUJMRShXRUJEUklWRVJfQUNU
SU9OU19BUEkpCiAgICAgLy8gU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyIEFQSXMgdGFrZSBhIHNl
dCBvZiBpbnB1dCBzb3VyY2VzLiBXZSBhbHNvIGludGVybiB0aGVzZQogICAgIC8vIHNvIHRoYXQg
cHJldmlvdXMgaW5wdXQgc291cmNlIHN0YXRlIGlzIHVzZWQgYXMgaW5pdGlhbCBzdGF0ZSBmb3Ig
bGF0ZXIgY29tbWFuZHMuCiAgICAgSGFzaFNldDxSZWY8U2ltdWxhdGVkSW5wdXRTb3VyY2U+PiBt
X2lucHV0U291cmNlczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWY8U2ltdWxhdGVkSW5wdXRE
aXNwYXRjaGVyPj4gbV9pbnB1dERpc3BhdGNoZXJzQnlQYWdlOworI2VuZGlmCisjaWYgRU5BQkxF
KFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCisgICAgLy8gS2VlcCB0cmFjayBvZiBj
dXJyZW50bHkgYWN0aXZlIG1vZGlmaWVycyBhY3Jvc3MgbXVsdGlwbGUga2V5c3Ryb2tlcy4KKyAg
ICAvLyBNb3N0IHBsYXRmb3JtcyBkbyBub3QgdHJhY2sgY3VycmVudCBtb2RpZmllcnMgZnJvbSBz
eW50aGVzaXplZCBldmVudHMuCisgICAgdW5zaWduZWQgbV9jdXJyZW50TW9kaWZpZXJzIHsgMCB9
OworI2VuZGlmCisjaWYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpCisgICAg
Ym9vbCBtX3NpbXVsYXRpbmdUb3VjaEludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyNlbmRpZgogCiAj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwqIG1fcmVtb3RlQ2hhbm5lbCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vaW9zL1dlYkF1dG9tYXRpb25TZXNzaW9uSU9TLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9pb3MvV2ViQXV0b21hdGlvblNlc3Np
b25JT1MubW0KaW5kZXggYzg3ZjU2NzQzNDZmNWFiZTJlNmE4NTBkZGIyN2E3ZjRhMzRjNDc3MC4u
NDhiYTI4MGUzYTg0YzFkM2E4N2M0MzU4NDM4YjljYmUwOTliY2M5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9pb3MvV2ViQXV0b21hdGlvblNlc3Npb25J
T1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9pb3MvV2ViQXV0
b21hdGlvblNlc3Npb25JT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNywgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDkgKzMxLDExIEBACiAjaW1wb3J0ICJOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJXZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIgog
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJfV0tUb3VjaEV2ZW50R2VuZXJhdG9y
LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0tleUV2ZW50Q29kZXNJT1MuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4KKyNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNjQsNiArNjYsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZW5kU3ludGhlc2l6ZWRFdmVudHNUb1BhZ2UoV2ViUGFnZVByb3h5JiBwYWdlLCBOU0FycgogCiAj
cHJhZ21hIG1hcmsgQ29tbWFuZHMgZm9yIFBsYXRmb3JtOiAnaU9TJwogCisjaWYgRU5BQkxFKFdF
QkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwbGF0Zm9ybVNpbXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmIHBhZ2Us
IEtleWJvYXJkSW50ZXJhY3Rpb24gaW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5
LCBDaGFyS2V5PiYmIGtleSkKIHsKICAgICAvLyBUaGUgbW9kaWZpZXJzIGNoYW5nZWQgYnkgdGhl
IHZpcnR1YWwga2V5IHdoZW4gaXQgaXMgcHJlc3NlZCBvciByZWxlYXNlZC4KQEAgLTE2OSw2ICsx
NzIsMzEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1TaW11bGF0ZUtleVNl
cXVlbmNlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QKIAogICAgIHNlbmRTeW50aGVzaXplZEV2
ZW50c1RvUGFnZShwYWdlLCBldmVudHNUb0JlU2VudC5nZXQoKSk7CiB9CisjZW5kaWYgLy8gRU5B
QkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCisKKyNpZiBFTkFCTEUoV0VCRFJJ
VkVSX1RPVUNIX0lOVEVSQUNUSU9OUykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRm
b3JtU2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgVG91Y2hJbnRl
cmFjdGlvbiBpbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5W
aWV3cG9ydCwgT3B0aW9uYWw8U2Vjb25kcz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0aW9u
SGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkludFBvaW50IGxv
Y2F0aW9uT25TY3JlZW4gPSBwYWdlLnN5bmNSb290Vmlld1RvU2NyZWVuKEludFJlY3QobG9jYXRp
b25JblZpZXdwb3J0LCBJbnRTaXplKCkpKS5sb2NhdGlvbigpOworICAgIF9XS1RvdWNoRXZlbnRH
ZW5lcmF0b3IgKmdlbmVyYXRvciA9IFtfV0tUb3VjaEV2ZW50R2VuZXJhdG9yIHNoYXJlZFRvdWNo
RXZlbnRHZW5lcmF0b3JdOworCisgICAgYXV0byBpbnRlcmFjdGlvbkZpbmlzaGVkID0gbWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KTsKKyAg
ICB9KTsKKyAgICAKKyAgICBzd2l0Y2ggKGludGVyYWN0aW9uKSB7CisgICAgY2FzZSBUb3VjaElu
dGVyYWN0aW9uOjpUb3VjaERvd246CisgICAgICAgIFtnZW5lcmF0b3IgdG91Y2hEb3duOmxvY2F0
aW9uT25TY3JlZW4gY29tcGxldGlvbkJsb2NrOmludGVyYWN0aW9uRmluaXNoZWQuZ2V0KCldOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRvdWNoSW50ZXJhY3Rpb246OkxpZnRVcDoKKyAgICAg
ICAgW2dlbmVyYXRvciBsaWZ0VXA6bG9jYXRpb25PblNjcmVlbiBjb21wbGV0aW9uQmxvY2s6aW50
ZXJhY3Rpb25GaW5pc2hlZC5nZXQoKV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVG91Y2hJ
bnRlcmFjdGlvbjo6TW92ZVRvOgorICAgICAgICBbZ2VuZXJhdG9yIG1vdmVUb1BvaW50OmxvY2F0
aW9uT25TY3JlZW4gZHVyYXRpb246ZHVyYXRpb24udmFsdWVPcigwX3MpLnNlY29uZHMoKSBjb21w
bGV0aW9uQmxvY2s6aW50ZXJhY3Rpb25GaW5pc2hlZC5nZXQoKV07CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMu
bW0KaW5kZXggZGZjOTA5MzE2ZTI1MGQ1MTFjNjUzN2U2ZDk5NDE0Nzk4NTgwOGFmNy4uZDdmNjVh
ZTQzOTc2ZjRiZTc5NWU1ZWZlMmQxZDZlZDU1ZjZhZGVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlv
blNlc3Npb25NYWMubW0KQEAgLTEyMCw2ICsxMjAsNyBAQCBib29sIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjp3YXNFdmVudFN5bnRoZXNpemVkRm9yQXV0b21hdGlvbihOU0V2ZW50ICpldmVudCkKIAog
I3ByYWdtYSBtYXJrIFBsYXRmb3JtLWRlcGVuZGVudCBJbXBsZW1lbnRhdGlvbnMKIAorI2lmIEVO
QUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6cGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiBwYWdl
LCBNb3VzZUludGVyYWN0aW9uIGludGVyYWN0aW9uLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0
dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIFdlYkV2ZW50OjpN
b2RpZmllcnMga2V5TW9kaWZpZXJzKQogewogICAgIEludFJlY3Qgd2luZG93UmVjdDsKQEAgLTIx
MCw2ICsyMTEsOSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybVNpbXVsYXRl
TW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsCiAKICAgICBzZW5kU3ludGhlc2l6
ZWRFdmVudHNUb1BhZ2UocGFnZSwgZXZlbnRzVG9CZVNlbnQuZ2V0KCkpOwogfQorI2VuZGlmIC8v
IEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQorCisjaWYgRU5BQkxFKFdFQkRS
SVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAKIHN0YXRpYyBib29sIHZpcnR1YWxLZXlIYXNT
dGlja3lNb2RpZmllcihWaXJ0dWFsS2V5IGtleSkKIHsKQEAgLTcxOSw2ICs3MjMsOCBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwbGF0Zm9ybVNpbXVsYXRlS2V5U2VxdWVuY2UoV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdAogICAgIHNlbmRTeW50aGVzaXplZEV2ZW50c1RvUGFnZShwYWdl
LCBldmVudHNUb0JlU2VudC5nZXQoKSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVS
X0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9f
V0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9fV0tUb3Vj
aEV2ZW50R2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI4MjlkMGNmMDA2N2ViZjNkNDc0YzY5ZTMy
YTdkNGJjMzVlY2VhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L19XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKworI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHR2Vv
bWV0cnkuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KKwordHlwZWRlZiBzdHJ1Y3QgX19JT0hJREV2ZW50ICogSU9ISURFdmVudFJl
ZjsKKworV0tfQ0xBU1NfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dL
VG91Y2hFdmVudEdlbmVyYXRvciA6IE5TT2JqZWN0CisrIChfV0tUb3VjaEV2ZW50R2VuZXJhdG9y
ICopc2hhcmVkVG91Y2hFdmVudEdlbmVyYXRvcjsKKworLSAodm9pZCl0b3VjaERvd246KENHUG9p
bnQpbG9jYXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uQmxv
Y2s7CistICh2b2lkKWxpZnRVcDooQ0dQb2ludClsb2NhdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZv
aWQgKF4pKHZvaWQpKWNvbXBsZXRpb25CbG9jazsKKy0gKHZvaWQpbW92ZVRvUG9pbnQ6KENHUG9p
bnQpbG9jYXRpb24gZHVyYXRpb246KE5TVGltZUludGVydmFsKXNlY29uZHMgY29tcGxldGlvbkJs
b2NrOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uQmxvY2s7CisKKy0gKHZvaWQpcmVjZWl2ZWRI
SURFdmVudDooSU9ISURFdmVudFJlZilldmVudDsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9fV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjRhMWYwN2Yz
MWRkMmYxZmFmNTY5Y2NmMzUzMjc4NTNhYjVlNjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbQpAQCAtMCwwICsxLDQw
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dL
VG91Y2hFdmVudEdlbmVyYXRvci5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2lt
cG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgPG1hY2gvbWFjaF90aW1lLmg+CisjaW1wb3J0IDxw
YWwvc3BpL2NvY29hL0lPS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL09wdGlvbmFsLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0
IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKEJhY2tC
b2FyZFNlcnZpY2VzKQorU09GVF9MSU5LKEJhY2tCb2FyZFNlcnZpY2VzLCBCS1NISURFdmVudFNl
dERpZ2l0aXplckluZm8sIHZvaWQsIChJT0hJREV2ZW50UmVmIGRpZ2l0aXplckV2ZW50LCB1aW50
MzJfdCBjb250ZXh0SUQsIHVpbnQ4X3Qgc3lzdGVtR2VzdHVyZWlzUG9zc2libGUsIHVpbnQ4X3Qg
aXNTeXN0ZW1HZXN0dXJlU3RhdGVDaGFuZ2VFdmVudCwgQ0ZTdHJpbmdSZWYgZGlzcGxheVVVSUQs
IENGVGltZUludGVydmFsIGluaXRpYWxUb3VjaFRpbWVzdGFtcCwgZmxvYXQgbWF4Rm9yY2UpLCAo
ZGlnaXRpemVyRXZlbnQsIGNvbnRleHRJRCwgc3lzdGVtR2VzdHVyZWlzUG9zc2libGUsIGlzU3lz
dGVtR2VzdHVyZVN0YXRlQ2hhbmdlRXZlbnQsIGRpc3BsYXlVVUlELCBpbml0aWFsVG91Y2hUaW1l
c3RhbXAsIG1heEZvcmNlKSk7CisKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBmaW5nZXJN
b3ZlSW50ZXJ2YWwgPSAwLjAxNjsKK3N0YXRpYyBjb25zdCBJT0hJREZsb2F0IGRlZmF1bHRNYWpv
clJhZGl1cyA9IDU7CitzdGF0aWMgY29uc3QgSU9ISURGbG9hdCBkZWZhdWx0UGF0aFByZXNzdXJl
ID0gMDsKK3N0YXRpYyBjb25zdCBsb25nIG5hbm9zZWNvbmRzUGVyU2Vjb25kID0gMWU5OworCitO
U1VJbnRlZ2VyIGNvbnN0IEhJRE1heFRvdWNoQ291bnQgPSA1OworCitzdGF0aWMgaW50IGZpbmdl
cklkZW50aWZpZXJzW0hJRE1heFRvdWNoQ291bnRdID0geyAyLCAzLCA0LCA1LCAxIH07CisKK3R5
cGVkZWYgZW51bSB7CisgICAgSGFuZEV2ZW50TnVsbCwKKyAgICBIYW5kRXZlbnRUb3VjaGVkLAor
ICAgIEhhbmRFdmVudE1vdmVkLAorICAgIEhhbmRFdmVudENob3JkQ2hhbmdlZCwKKyAgICBIYW5k
RXZlbnRMaWZ0ZWQsCisgICAgSGFuZEV2ZW50Q2FuY2VsZWQsCit9IEhhbmRFdmVudFR5cGU7CisK
K3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgaWRlbnRpZmllcjsKKyAgICBDR1BvaW50IHBvaW50
OworICAgIElPSElERmxvYXQgcGF0aE1ham9yUmFkaXVzOworICAgIElPSElERmxvYXQgcGF0aFBy
ZXNzdXJlOworICAgIFVJbnQ4IHBhdGhQcm94aW1pdHk7Cit9IFN5bnRoZXRpY0V2ZW50RGlnaXRp
emVySW5mbzsKKworc3RhdGljIENGVGltZUludGVydmFsIHNlY29uZHNTaW5jZUFic29sdXRlVGlt
ZShDRkFic29sdXRlVGltZSBzdGFydFRpbWUpCit7CisgICAgcmV0dXJuIChDRkFic29sdXRlVGlt
ZUdldEN1cnJlbnQoKSAtIHN0YXJ0VGltZSk7Cit9CisKK3N0YXRpYyBkb3VibGUgc2ltcGxlQ3Vy
dmVJbnRlcnBvbGF0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIHQpCit7CisgICAgcmV0
dXJuIChhICsgKGIgLSBhKSAqIHNpbihzaW4odCAqIE1fUEkgLyAyKSAqIHQgKiBNX1BJIC8gMikp
OworfQorCitzdGF0aWMgQ0dQb2ludCBjYWxjdWxhdGVOZXh0Q3VydmVMb2NhdGlvbihDR1BvaW50
IGEsIENHUG9pbnQgYiwgQ0ZUaW1lSW50ZXJ2YWwgdCkKK3sKKyAgICByZXR1cm4gQ0dQb2ludE1h
a2Uoc2ltcGxlQ3VydmVJbnRlcnBvbGF0aW9uKGEueCwgYi54LCB0KSwgc2ltcGxlQ3VydmVJbnRl
cnBvbGF0aW9uKGEueSwgYi55LCB0KSk7Cit9CisKK3R5cGVkZWYgZG91YmxlKCpwcmVzc3VyZUlu
dGVycG9sYXRpb25GdW5jdGlvbikoZG91YmxlLCBkb3VibGUsIENGVGltZUludGVydmFsKTsKKwor
c3RhdGljIHZvaWQgZGVsYXlCZXR3ZWVuTW92ZShpbnQgZXZlbnRJbmRleCwgZG91YmxlIGVsYXBz
ZWQpCit7CisgICAgLy8gRGVsYXkgbmV4dCBldmVudCB1bnRpbCBleHBlY3RlZCBlbGFwc2VkIHRp
bWUuCisgICAgZG91YmxlIGRlbGF5ID0gKGV2ZW50SW5kZXggKiBmaW5nZXJNb3ZlSW50ZXJ2YWwp
IC0gZWxhcHNlZDsKKyAgICBpZiAoZGVsYXkgPiAwKSB7CisgICAgICAgIHN0cnVjdCB0aW1lc3Bl
YyBtb3ZlRGVsYXkgPSB7IDAsIHN0YXRpY19jYXN0PGxvbmc+KGRlbGF5ICogbmFub3NlY29uZHNQ
ZXJTZWNvbmQpIH07CisgICAgICAgIG5hbm9zbGVlcCgmbW92ZURlbGF5LCBOVUxMKTsKKyAgICB9
ICAgCit9CisKKy8vIE5PVEU6IHRoaXMgZXZlbnQgc3ludGhlc2l6ZXIgaXMgZGVyaXZlZCBmcm9t
IFdlYktpdFRlc3RSdW5uZXIgY29kZS4KKy8vIENvbXBhcmVkIHRvIHRoYXQgdmVyc2lvbiwgdGhp
cyBsYWNrcyBzdXBwb3J0IGZvciBzdHlsdXMgZXZlbnQgc2ltdWxhdGlvbiwKKy8vIGV2ZW50IHN0
cmVhbSwgYW5kIG9ubHkgc2luZ2xlIHRvdWNoZXMgYXJlIGV4cG9zZWQgdmlhIHRoZSB0b3VjaC9s
aWZ0L21vdmUgbWV0aG9kIGNhbGxzLgorQGludGVyZmFjZSBfV0tUb3VjaEV2ZW50R2VuZXJhdG9y
ICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU011dGFibGVEaWN0aW9uYXJ5ICpl
dmVudENhbGxiYWNrczsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1RvdWNoRXZlbnRHZW5l
cmF0b3IgeworICAgIElPSElERXZlbnRTeXN0ZW1DbGllbnRSZWYgX2lvU3lzdGVtQ2xpZW50Owor
ICAgIFN5bnRoZXRpY0V2ZW50RGlnaXRpemVySW5mbyBfYWN0aXZlUG9pbnRzW0hJRE1heFRvdWNo
Q291bnRdOworICAgIE5TVUludGVnZXIgX2FjdGl2ZVBvaW50Q291bnQ7Cit9CisKKysgKF9XS1Rv
dWNoRXZlbnRHZW5lcmF0b3IgKilzaGFyZWRUb3VjaEV2ZW50R2VuZXJhdG9yCit7CisgICAgc3Rh
dGljIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IgKmV2ZW50R2VuZXJhdG9yID0gbmlsOworICAgIGlm
ICghZXZlbnRHZW5lcmF0b3IpCisgICAgICAgIGV2ZW50R2VuZXJhdG9yID0gW1tfV0tUb3VjaEV2
ZW50R2VuZXJhdG9yIGFsbG9jXSBpbml0XTsKKworICAgIHJldHVybiBldmVudEdlbmVyYXRvcjsK
K30KKworKyAoQ0ZJbmRleCluZXh0RXZlbnRDYWxsYmFja0lECit7CisgICAgc3RhdGljIENGSW5k
ZXggY2FsbGJhY2tJRCA9IDA7CisgICAgcmV0dXJuICsrY2FsbGJhY2tJRDsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IEhJRE1heFRvdWNoQ291bnQ7ICsraSkKKyAgICAgICAgX2FjdGl2ZVBvaW50c1tpXS5pZGVudGlm
aWVyID0gZmluZ2VySWRlbnRpZmllcnNbaV07CisKKyAgICBfZXZlbnRDYWxsYmFja3MgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZXZlbnRDYWxsYmFja3MgcmVsZWFzZV07CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistIChJT0hJREV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50
VHlwZTooSGFuZEV2ZW50VHlwZSlldmVudFR5cGUKK3sKKyAgICBCT09MIGlzVG91Y2hpbmcgPSAo
ZXZlbnRUeXBlID09IEhhbmRFdmVudFRvdWNoZWQgfHwgZXZlbnRUeXBlID09IEhhbmRFdmVudE1v
dmVkIHx8IGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRDaG9yZENoYW5nZWQpOworCisgICAgSU9ISURE
aWdpdGl6ZXJFdmVudE1hc2sgZXZlbnRNYXNrID0ga0lPSElERGlnaXRpemVyRXZlbnRUb3VjaDsK
KyAgICBpZiAoZXZlbnRUeXBlID09IEhhbmRFdmVudE1vdmVkKSB7CisgICAgICAgIGV2ZW50TWFz
ayAmPSB+a0lPSElERGlnaXRpemVyRXZlbnRUb3VjaDsKKyAgICAgICAgZXZlbnRNYXNrIHw9IGtJ
T0hJRERpZ2l0aXplckV2ZW50UG9zaXRpb247CisgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISURE
aWdpdGl6ZXJFdmVudEF0dHJpYnV0ZTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBIYW5k
RXZlbnRDaG9yZENoYW5nZWQpIHsKKyAgICAgICAgZXZlbnRNYXNrIHw9IGtJT0hJRERpZ2l0aXpl
ckV2ZW50UG9zaXRpb247CisgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISUREaWdpdGl6ZXJFdmVu
dEF0dHJpYnV0ZTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRUb3VjaGVk
IHx8IGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRDYW5jZWxlZCB8fCBldmVudFR5cGUgPT0gSGFuZEV2
ZW50TGlmdGVkKQorICAgICAgICBldmVudE1hc2sgfD0ga0lPSElERGlnaXRpemVyRXZlbnRJZGVu
dGl0eTsKKworICAgIHVpbnQ2NF90IG1hY2hUaW1lID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7Cisg
ICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50
Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAg
ICAgIGtJT0hJRERpZ2l0aXplclRyYW5zZHVjZXJUeXBlSGFuZCwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgZXZlbnRNYXNrLAorICAgICAgICAwLAorICAgICAgICAwLCAwLCAwLAor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBpc1RvdWNoaW5nLAor
ICAgICAgICBrSU9ISURFdmVudE9wdGlvbk5vbmUpKTsKKworICAgIElPSElERXZlbnRTZXRJbnRl
Z2VyVmFsdWUoZXZlbnRSZWYuZ2V0KCksIGtJT0hJREV2ZW50RmllbGREaWdpdGl6ZXJJc0Rpc3Bs
YXlJbnRlZ3JhdGVkLCAxKTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IF9hY3Rp
dmVQb2ludENvdW50OyArK2kpIHsKKyAgICAgICAgU3ludGhldGljRXZlbnREaWdpdGl6ZXJJbmZv
KiBwb2ludEluZm8gPSAmX2FjdGl2ZVBvaW50c1tpXTsKKyAgICAgICAgaWYgKGV2ZW50VHlwZSA9
PSBIYW5kRXZlbnRUb3VjaGVkKSB7CisgICAgICAgICAgICBpZiAoIXBvaW50SW5mby0+cGF0aE1h
am9yUmFkaXVzKQorICAgICAgICAgICAgICAgIHBvaW50SW5mby0+cGF0aE1ham9yUmFkaXVzID0g
ZGVmYXVsdE1ham9yUmFkaXVzOworICAgICAgICAgICAgaWYgKCFwb2ludEluZm8tPnBhdGhQcmVz
c3VyZSkKKyAgICAgICAgICAgICAgICBwb2ludEluZm8tPnBhdGhQcmVzc3VyZSA9IGRlZmF1bHRQ
YXRoUHJlc3N1cmU7CisgICAgICAgICAgICBpZiAoIXBvaW50SW5mby0+cGF0aFByb3hpbWl0eSkK
KyAgICAgICAgICAgICAgICBwb2ludEluZm8tPnBhdGhQcm94aW1pdHkgPSBrR1NFdmVudFBhdGhJ
bmZvSW5Ub3VjaCB8IGtHU0V2ZW50UGF0aEluZm9JblJhbmdlOworICAgICAgICB9IGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRMaWZ0ZWQgfHwgZXZlbnRUeXBlID09IEhhbmRFdmVudENh
bmNlbGVkKSB7CisgICAgICAgICAgICBwb2ludEluZm8tPnBhdGhNYWpvclJhZGl1cyA9IDA7Cisg
ICAgICAgICAgICBwb2ludEluZm8tPnBhdGhQcmVzc3VyZSA9IDA7CisgICAgICAgICAgICBwb2lu
dEluZm8tPnBhdGhQcm94aW1pdHkgPSAwOworICAgICAgICB9CisKKyAgICAgICAgQ0dQb2ludCBw
b2ludCA9IHBvaW50SW5mby0+cG9pbnQ7CisgICAgICAgIHBvaW50ID0gQ0dQb2ludE1ha2Uocm91
bmRmKHBvaW50LngpLCByb3VuZGYocG9pbnQueSkpOworICAgICAgICAKKyAgICAgICAgUmV0YWlu
UHRyPElPSElERXZlbnRSZWY+IHN1YkV2ZW50ID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGln
aXRpemVyRmluZ2VyRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAgICAg
ICAgICBwb2ludEluZm8tPmlkZW50aWZpZXIsCisgICAgICAgICAgICBwb2ludEluZm8tPmlkZW50
aWZpZXIsCisgICAgICAgICAgICBldmVudE1hc2ssCisgICAgICAgICAgICBwb2ludC54LCBwb2lu
dC55LCAwLAorICAgICAgICAgICAgcG9pbnRJbmZvLT5wYXRoUHJlc3N1cmUsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgcG9pbnRJbmZvLT5wYXRoUHJveGltaXR5ICYga0dTRXZlbnRQYXRo
SW5mb0luUmFuZ2UsCisgICAgICAgICAgICBwb2ludEluZm8tPnBhdGhQcm94aW1pdHkgJiBrR1NF
dmVudFBhdGhJbmZvSW5Ub3VjaCwKKyAgICAgICAgICAgIGtJT0hJREV2ZW50T3B0aW9uTm9uZSkp
OworCisgICAgICAgIElPSElERXZlbnRTZXRGbG9hdFZhbHVlKHN1YkV2ZW50LmdldCgpLCBrSU9I
SURFdmVudEZpZWxkRGlnaXRpemVyTWFqb3JSYWRpdXMsIHBvaW50SW5mby0+cGF0aE1ham9yUmFk
aXVzKTsKKyAgICAgICAgSU9ISURFdmVudFNldEZsb2F0VmFsdWUoc3ViRXZlbnQuZ2V0KCksIGtJ
T0hJREV2ZW50RmllbGREaWdpdGl6ZXJNaW5vclJhZGl1cywgcG9pbnRJbmZvLT5wYXRoTWFqb3JS
YWRpdXMpOworCisgICAgICAgIElPSElERXZlbnRBcHBlbmRFdmVudChldmVudFJlZi5nZXQoKSwg
c3ViRXZlbnQuZ2V0KCksIDApOworICAgIH0KKworICAgIHJldHVybiBldmVudFJlZi5sZWFrUmVm
KCk7Cit9CisKKy0gKEJPT0wpX3NlbmRISURFdmVudDooSU9ISURFdmVudFJlZilldmVudFJlZgor
eworICAgIGlmICghX2lvU3lzdGVtQ2xpZW50KQorICAgICAgICBfaW9TeXN0ZW1DbGllbnQgPSBJ
T0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOworCisgICAg
aWYgKGV2ZW50UmVmKSB7CisgICAgICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBzdHJvbmdF
dmVudCA9IGV2ZW50UmVmOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGlj
YXRpb24gc2hhcmVkQXBwbGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOworICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHRJRCk7CisgICAgICAgICAgICBCS1NISURFdmVudFNldERpZ2l0aXpl
ckluZm8oc3Ryb25nRXZlbnQuZ2V0KCksIGNvbnRleHRJRCwgZmFsc2UsIGZhbHNlLCBOVUxMLCAw
LCAwKTsKKyAgICAgICAgICAgIFtbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gX2Vu
cXVldWVISURFdmVudDpzdHJvbmdFdmVudC5nZXQoKV07CisgICAgICAgIH0pOworICAgIH0KKyAg
ICByZXR1cm4gWUVTOworfQorCistIChCT09MKV9zZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxl
dGlvbkJsb2NrOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uQmxvY2sKK3sKKyAgICBhdXRvIGNh
bGxiYWNrSUQgPSBbX1dLVG91Y2hFdmVudEdlbmVyYXRvciBuZXh0RXZlbnRDYWxsYmFja0lEXTsK
KyAgICBbX2V2ZW50Q2FsbGJhY2tzIHNldE9iamVjdDpCbG9ja19jb3B5KGNvbXBsZXRpb25CbG9j
aykgZm9yS2V5OkAoY2FsbGJhY2tJRCldOworCisgICAgYXV0byBtYXJrZXJFdmVudCA9IGFkb3B0
Q0YoSU9ISURFdmVudENyZWF0ZVZlbmRvckRlZmluZWRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LAorICAgICAgICBtYWNoX2Fic29sdXRlX3RpbWUoKSwKKyAgICAgICAga0hJRFBhZ2VfVmVuZG9y
RGVmaW5lZFN0YXJ0ICsgMTAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAodWlu
dDhfdCopJmNhbGxiYWNrSUQsCisgICAgICAgIHNpemVvZihDRkluZGV4KSwKKyAgICAgICAga0lP
SElERXZlbnRPcHRpb25Ob25lKSk7CisgICAgCisgICAgaWYgKG1hcmtlckV2ZW50KSB7CisgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFttYXJrZXJFdmVu
dCA9IFdURk1vdmUobWFya2VyRXZlbnQpXSB7CisgICAgICAgICAgICBhdXRvIGNvbnRleHRJRCA9
IFtVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXS5rZXlXaW5kb3cuX2NvbnRleHRJZDsK
KyAgICAgICAgICAgIEFTU0VSVChjb250ZXh0SUQpOworICAgICAgICAgICAgQktTSElERXZlbnRT
ZXREaWdpdGl6ZXJJbmZvKG1hcmtlckV2ZW50LmdldCgpLCBjb250ZXh0SUQsIGZhbHNlLCBmYWxz
ZSwgTlVMTCwgMCwgMCk7CisgICAgICAgICAgICBbW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dIF9lbnF1ZXVlSElERXZlbnQ6bWFya2VyRXZlbnQuZ2V0KCldOworICAgICAgICB9KTsK
KyAgICB9CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClfdXBkYXRlVG91Y2hQb2ludHM6
KENHUG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAoreworICAgIEhhbmRFdmVu
dFR5cGUgaGFuZEV2ZW50VHlwZTsKKyAgICAKKyAgICAvLyBUaGUgaGFuZCBldmVudCB0eXBlIGlz
IGJhc2VkIG9uIHByZXZpb3VzIHN0YXRlLgorICAgIGlmICghX2FjdGl2ZVBvaW50Q291bnQpCisg
ICAgICAgIGhhbmRFdmVudFR5cGUgPSBIYW5kRXZlbnRUb3VjaGVkOworICAgIGVsc2UgaWYgKCFj
b3VudCkKKyAgICAgICAgaGFuZEV2ZW50VHlwZSA9IEhhbmRFdmVudExpZnRlZDsKKyAgICBlbHNl
IGlmIChjb3VudCA9PSBfYWN0aXZlUG9pbnRDb3VudCkKKyAgICAgICAgaGFuZEV2ZW50VHlwZSA9
IEhhbmRFdmVudE1vdmVkOworICAgIGVsc2UKKyAgICAgICAgaGFuZEV2ZW50VHlwZSA9IEhhbmRF
dmVudENob3JkQ2hhbmdlZDsKKyAgICAKKyAgICAvLyBVcGRhdGUgcHJldmlvdXMgY291bnQgZm9y
IG5leHQgZXZlbnQuCisgICAgX2FjdGl2ZVBvaW50Q291bnQgPSBjb3VudDsKKworICAgIC8vIFVw
ZGF0ZSBwb2ludCBsb2NhdGlvbnMuCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgX2FjdGl2ZVBvaW50c1tpXS5wb2ludCA9IHBvaW50c1tpXTsKKyAg
ICAKKyAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxm
IF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CisgICAgW3NlbGYgX3NlbmRI
SURFdmVudDpldmVudFJlZi5nZXQoKV07Cit9CisKKy0gKHZvaWQpdG91Y2hEb3duQXRQb2ludHM6
KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKK3sK
KyAgICB0b3VjaENvdW50ID0gc3RkOjptaW4odG91Y2hDb3VudCwgSElETWF4VG91Y2hDb3VudCk7
CisKKyAgICBfYWN0aXZlUG9pbnRDb3VudCA9IHRvdWNoQ291bnQ7CisKKyAgICBmb3IgKE5TVUlu
dGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IHRvdWNoQ291bnQ7ICsraW5kZXgpCisgICAgICAgIF9h
Y3RpdmVQb2ludHNbaW5kZXhdLnBvaW50ID0gbG9jYXRpb25zW2luZGV4XTsKKworICAgIFJldGFp
blB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElE
RXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKKyAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2
ZW50UmVmLmdldCgpXTsKK30KKworLSAodm9pZCl0b3VjaERvd246KENHUG9pbnQpbG9jYXRpb24g
dG91Y2hDb3VudDooTlNVSW50ZWdlcil0b3VjaENvdW50Cit7CisgICAgdG91Y2hDb3VudCA9IHN0
ZDo6bWluKHRvdWNoQ291bnQsIEhJRE1heFRvdWNoQ291bnQpOworCisgICAgQ0dQb2ludCBsb2Nh
dGlvbnNbdG91Y2hDb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRvdWNoQ291bnQ7ICsraW5kZXgpCisgICAgICAgIGxvY2F0aW9uc1tpbmRleF0gPSBsb2Nh
dGlvbjsKKyAgICAKKyAgICBbc2VsZiB0b3VjaERvd25BdFBvaW50czpsb2NhdGlvbnMgdG91Y2hD
b3VudDp0b3VjaENvdW50XTsKK30KKworLSAodm9pZCl0b3VjaERvd246KENHUG9pbnQpbG9jYXRp
b24KK3sKKyAgICBbc2VsZiB0b3VjaERvd25BdFBvaW50czombG9jYXRpb24gdG91Y2hDb3VudDox
XTsKK30KKworLSAodm9pZClsaWZ0VXBBdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNo
Q291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAoreworICAgIHRvdWNoQ291bnQgPSBzdGQ6Om1p
bih0b3VjaENvdW50LCBISURNYXhUb3VjaENvdW50KTsKKyAgICB0b3VjaENvdW50ID0gc3RkOjpt
aW4odG91Y2hDb3VudCwgX2FjdGl2ZVBvaW50Q291bnQpOworCisgICAgTlNVSW50ZWdlciBuZXdQ
b2ludENvdW50ID0gX2FjdGl2ZVBvaW50Q291bnQgLSB0b3VjaENvdW50OworCisgICAgZm9yIChO
U1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCB0b3VjaENvdW50OyArK2luZGV4KQorICAgICAg
ICBfYWN0aXZlUG9pbnRzW25ld1BvaW50Q291bnQgKyBpbmRleF0ucG9pbnQgPSBsb2NhdGlvbnNb
aW5kZXhdOworICAgIAorICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFk
b3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOworICAg
IFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOworICAgIAorICAgIF9hY3RpdmVQ
b2ludENvdW50ID0gbmV3UG9pbnRDb3VudDsKK30KKworLSAodm9pZClsaWZ0VXA6KENHUG9pbnQp
bG9jYXRpb24gdG91Y2hDb3VudDooTlNVSW50ZWdlcil0b3VjaENvdW50Cit7CisgICAgdG91Y2hD
b3VudCA9IHN0ZDo6bWluKHRvdWNoQ291bnQsIEhJRE1heFRvdWNoQ291bnQpOworCisgICAgQ0dQ
b2ludCBsb2NhdGlvbnNbdG91Y2hDb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXgg
PSAwOyBpbmRleCA8IHRvdWNoQ291bnQ7ICsraW5kZXgpCisgICAgICAgIGxvY2F0aW9uc1tpbmRl
eF0gPSBsb2NhdGlvbjsKKyAgICAKKyAgICBbc2VsZiBsaWZ0VXBBdFBvaW50czpsb2NhdGlvbnMg
dG91Y2hDb3VudDp0b3VjaENvdW50XTsKK30KKworLSAodm9pZClsaWZ0VXA6KENHUG9pbnQpbG9j
YXRpb24KK3sKKyAgICBbc2VsZiBsaWZ0VXA6bG9jYXRpb24gdG91Y2hDb3VudDoxXTsKK30KKwor
LSAodm9pZCltb3ZlVG9Qb2ludHM6KENHUG9pbnQqKW5ld0xvY2F0aW9ucyB0b3VjaENvdW50OihO
U1VJbnRlZ2VyKXRvdWNoQ291bnQgZHVyYXRpb246KE5TVGltZUludGVydmFsKXNlY29uZHMKK3sK
KyAgICB0b3VjaENvdW50ID0gc3RkOjptaW4odG91Y2hDb3VudCwgSElETWF4VG91Y2hDb3VudCk7
CisKKyAgICBDR1BvaW50IHN0YXJ0TG9jYXRpb25zW3RvdWNoQ291bnRdOworICAgIENHUG9pbnQg
bmV4dExvY2F0aW9uc1t0b3VjaENvdW50XTsKKworICAgIENGQWJzb2x1dGVUaW1lIHN0YXJ0VGlt
ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworICAgIENGVGltZUludGVydmFsIGVsYXBz
ZWQgPSAwOworCisgICAgaW50IGV2ZW50SW5kZXggPSAwOworICAgIHdoaWxlIChlbGFwc2VkIDwg
KHNlY29uZHMgLSBmaW5nZXJNb3ZlSW50ZXJ2YWwpKSB7CisgICAgICAgIGVsYXBzZWQgPSBzZWNv
bmRzU2luY2VBYnNvbHV0ZVRpbWUoc3RhcnRUaW1lKTsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwg
aW50ZXJ2YWwgPSBlbGFwc2VkIC8gc2Vjb25kczsKKyAgICAgICAgCisgICAgICAgIGZvciAoTlNV
SW50ZWdlciBpID0gMDsgaSA8IHRvdWNoQ291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKCFl
dmVudEluZGV4KQorICAgICAgICAgICAgICAgIHN0YXJ0TG9jYXRpb25zW2ldID0gX2FjdGl2ZVBv
aW50c1tpXS5wb2ludDsKKworICAgICAgICAgICAgbmV4dExvY2F0aW9uc1tpXSA9IGNhbGN1bGF0
ZU5leHRDdXJ2ZUxvY2F0aW9uKHN0YXJ0TG9jYXRpb25zW2ldLCBuZXdMb2NhdGlvbnNbaV0sIGlu
dGVydmFsKTsKKyAgICAgICAgfQorICAgICAgICBbc2VsZiBfdXBkYXRlVG91Y2hQb2ludHM6bmV4
dExvY2F0aW9ucyBjb3VudDp0b3VjaENvdW50XTsKKworICAgICAgICBkZWxheUJldHdlZW5Nb3Zl
KGV2ZW50SW5kZXgrKywgZWxhcHNlZCk7CisgICAgfQorCisgICAgW3NlbGYgX3VwZGF0ZVRvdWNo
UG9pbnRzOm5ld0xvY2F0aW9ucyBjb3VudDp0b3VjaENvdW50XTsKK30KKworLSAodm9pZCl0b3Vj
aERvd246KENHUG9pbnQpbG9jYXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKSh2b2lkKSlj
b21wbGV0aW9uQmxvY2sKK3sKKyAgICBbc2VsZiB0b3VjaERvd246bG9jYXRpb24gdG91Y2hDb3Vu
dDoxXTsKKyAgICBbc2VsZiBfc2VuZE1hcmtlckhJREV2ZW50V2l0aENvbXBsZXRpb25CbG9jazpj
b21wbGV0aW9uQmxvY2tdOworfQorCistICh2b2lkKWxpZnRVcDooQ0dQb2ludClsb2NhdGlvbiBj
b21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25CbG9jaworeworICAgIFtz
ZWxmIGxpZnRVcDpsb2NhdGlvbiB0b3VjaENvdW50OjFdOworICAgIFtzZWxmIF9zZW5kTWFya2Vy
SElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25CbG9ja107Cit9CisKKy0gKHZv
aWQpbW92ZVRvUG9pbnQ6KENHUG9pbnQpbG9jYXRpb24gZHVyYXRpb246KE5TVGltZUludGVydmFs
KXNlY29uZHMgY29tcGxldGlvbkJsb2NrOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uQmxvY2sK
K3sKKyAgICBDR1BvaW50IGxvY2F0aW9uc1sxXTsKKyAgICBsb2NhdGlvbnNbMF0gPSBsb2NhdGlv
bjsKKyAgICBbc2VsZiBtb3ZlVG9Qb2ludHM6bG9jYXRpb25zIHRvdWNoQ291bnQ6MSBkdXJhdGlv
bjpzZWNvbmRzXTsKKyAgICBbc2VsZiBfc2VuZE1hcmtlckhJREV2ZW50V2l0aENvbXBsZXRpb25C
bG9jazpjb21wbGV0aW9uQmxvY2tdOworfQorCistICh2b2lkKXJlY2VpdmVkSElERXZlbnQ6KElP
SElERXZlbnRSZWYpZXZlbnQKK3sKKyAgICBpZiAoSU9ISURFdmVudEdldFR5cGUoZXZlbnQpICE9
IGtJT0hJREV2ZW50VHlwZVZlbmRvckRlZmluZWQpCisgICAgICAgIHJldHVybjsKKworICAgIENG
SW5kZXggY2FsbGJhY2tJRCA9IElPSElERXZlbnRHZXRJbnRlZ2VyVmFsdWUoZXZlbnQsIGtJT0hJ
REV2ZW50RmllbGRWZW5kb3JEZWZpbmVkRGF0YSk7CisgICAgdm9pZCAoXmNvbXBsZXRpb25CbG9j
aykoKSA9IFtfZXZlbnRDYWxsYmFja3Mgb2JqZWN0Rm9yS2V5OkAoY2FsbGJhY2tJRCldOworICAg
IGlmIChjb21wbGV0aW9uQmxvY2spIHsKKyAgICAgICAgW19ldmVudENhbGxiYWNrcyByZW1vdmVP
YmplY3RGb3JLZXk6QChjYWxsYmFja0lEKV07CisgICAgICAgIGNvbXBsZXRpb25CbG9jaygpOwor
ICAgICAgICBCbG9ja19yZWxlYXNlKGNvbXBsZXRpb25CbG9jayk7CisgICAgfQorfQorCitAZW5k
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDZlYWIyYjg5ZjYzOWI1MjIwZWZk
NGM3YWRkMTJmMjdlMDgyN2ZmZC4uZGM4NzQ0ZWMzZjdjYjQ2N2ViMDUwYjNmMjY1NjRmNjQ3NTA2
MzQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMjYxLDYgKzEyNjEsOCBAQAogCQk5OUM4MUQ1QTFDMjBFN0UyMDA1QzRDODIgLyog
QXV0b21hdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTlDODFENTUxQzIwREZCRTAwNUM0QzgyIC8qIEF1dG9tYXRpb25DbGllbnQuaCAq
LzsgfTsKIAkJOTlDODFENUQxQzIxRjM4QjAwNUM0QzgyIC8qIEFQSUF1dG9tYXRpb25DbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5QzgxRDVC
MUMyMEU4MTcwMDVDNEM4MiAvKiBBUElBdXRvbWF0aW9uQ2xpZW50LmggKi87IH07CiAJCTk5RTcx
NEM1MUMxMjRBMDQwMDY2NUIzQSAvKiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxNEMxMUMxMjQ5RTYwMDY2
NUIzQSAvKiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5OUU3MTg5QTIxRjc5RDlFMDA1NUU5NzUgLyogX1dL
VG91Y2hFdmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk5RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2Vu
ZXJhdG9yLm1tICovOyB9OworCQk5OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hF
dmVudEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkI1
RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMy
NUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTAyQTcwODFFQzBFRUU5MDBEODFEODIgLyogY29tLm1h
Y3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1RTM5NDkx
RDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2lu
LnNiICovOyB9OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTA0NkU5RjIwNzky
NjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggKi87IH07CkBAIC0zODAzLDYgKzM4MDUsOCBAQAog
CQk5OUM4MUQ1QjFDMjBFODE3MDA1QzRDODIgLyogQVBJQXV0b21hdGlvbkNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElBdXRvbWF0aW9uQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5Q0E2NkM4MjAzNjY4MjIwMDc0RjM1RSAvKiBFbnRl
ckZ1bGxzY3JlZW4uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBF
bnRlckZ1bGxzY3JlZW4uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5RTcxNEMx
MUMxMjQ5RTYwMDY2NUIzQSAvKiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLQXV0b21hdGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk5RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2
ZW50R2VuZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
X1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUY2NDJEMjFGQUJFMzc4MDA5NjIxRTkgLyog
Q29vcmRpbmF0ZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29y
ZGluYXRlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzU5RDZDMUVG
Q0NDQjYwMDFFOEQwOSAvKiBDYWxsYmFja0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNTlE
NkQxRUZDREM2RDAwMUU4RDA5IC8qIE9wdGlvbmFsQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25hbENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU4MDMsNiArNTgwNyw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlD
NTQyNTZBRTE4QkVDMTYxMDBERTQxNzkgLyogZm9ybXMgKi8sCiAJCQkJQ0RDMjgzMUEyMDFCRDc1
NjAwRTZFNzQ1IC8qIGZ1bGxzY3JlZW4gKi8sCisJCQkJOTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1
IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLywKKwkJCQk5OUU3MTg5NjIxRjc5RDlEMDA1
NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLywKIAkJCQlBMTE1REM2RTE5MUQ4
MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyLmggKi8sCiAJCQkJQTExNURD
NkQxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5tbSAqLywKIAkJ
CQlBMTlERDNCRjFEMDdEMTY4MDBBQzgyM0IgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50
ZXJuYWwuaCAqLywKQEAgLTkyNTksNiArOTI2NSw3IEBACiAJCQkJMkRERjczMTUxOEU5NTA2MDAw
NEY1QTY2IC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFCMTZBRUExNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjlFQ0QwMTkyRjJDMkUwMDk4NEI3OCAvKiBSZW1v
dGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5
RTcxODlDMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUIxNkFERTE2NDg1OTg0MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjE2QUUyMTY0ODY1NkQwMDI5MEQ2
MiAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkYyNEEyRTE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODI1LDYgKzEwODMyLDcgQEAKIAkJ
CQkyRDkyQTc5NTIxMkI2QUQ0MDBGNDkzRkQgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUE0NzkyMzEyQTU5RkQ5MDA4MjM2QzMgLyog
UGx1Z2luUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQzQ0VCMTI0RkUzOEYw
MEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTk5RTcxODlBMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwNDNCNUQxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdp
blByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkx
MzQ0QzIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jb25maWcuaCBi
L1NvdXJjZS9XZWJLaXQvY29uZmlnLmgKaW5kZXggZDllOGQ2OTk1MWFhM2U3MWE2MGQ2ODUxZTY1
NWQ3MDBlNzFlOGQ3MS4uNjVkY2IzYjBmZjViYTdjM2Y4ZjM0ODJhYzBmOTNlN2RjMDcxNDg2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nv
bmZpZy5oCkBAIC03OSwzICs3OSw3IEBACiAjZW5kaWYKICNlbmRpZgogCisjZGVmaW5lIEVOQUJM
RV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TIFBMQVRGT1JNKElPU19GQU1JTFkpCisjZGVm
aW5lIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TIFBMQVRGT1JNKE1BQykgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisjZGVmaW5lIEVOQUJMRV9XRUJEUklWRVJf
S0VZQk9BUkRfSU5URVJBQ1RJT05TIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdQRSkKKyNkZWZpbmUgRU5BQkxFX1dFQkRSSVZFUl9BQ1RJT05TX0FQSSBFTkFC
TEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUyB8fCBFTkFCTEVfV0VCRFJJVkVSX01PVVNF
X0lOVEVSQUNUSU9OUyB8fCBFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUwo=
</data>
<flag name="review"
          id="376933"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>