<?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>183043</bug_id>
          
          <creation_ts>2018-02-22 09:39:30 -0800</creation_ts>
          <short_desc>[WinCairo] Add WebKit Shared/win event files for wincairo webkit</short_desc>
          <delta_ts>2018-04-09 18:34:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>
          <dependson>184296</dependson>
          <blocked>174003</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yousuke Kimoto">Yousuke.Kimoto</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1401441</commentid>
    <comment_count>0</comment_count>
    <who name="Yousuke Kimoto">Yousuke.Kimoto</who>
    <bug_when>2018-02-22 09:39:30 -0800</bug_when>
    <thetext>Add event files in Shared/Win for wincairo webkit.
In this ticket, the following files are implemented:
- WebKit/Shared/win/NativeWebKeyboardEventWin.cpp
- WebKit/Shared/win/NativeWebMouseEventWin.cpp
- WebKit/Shared/win/NativeWebTouchEventWin.cpp
- WebKit/Shared/win/NativeWebWheelEventWin.cpp
- WebKit/Shared/win/WebEventFactory.cpp
- WebKit/Shared/win/WebEventFactory.h

Also the following files are modified to add the above event files:
- WebKit/Shared/NativeWebKeyboardEvent.h
- WebKit/Shared/NativeWebMouseEvent.h
- WebKit/Shared/NativeWebTouchEvent.h
- WebKit/Shared/NativeWebWheelEvent.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401671</commentid>
    <comment_count>1</comment_count>
      <attachid>334511</attachid>
    <who name="Yousuke Kimoto">Yousuke.Kimoto</who>
    <bug_when>2018-02-23 01:09:15 -0800</bug_when>
    <thetext>Created attachment 334511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403048</commentid>
    <comment_count>2</comment_count>
      <attachid>334511</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-03-01 14:40:43 -0800</bug_when>
    <thetext>Comment on attachment 334511
Patch

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

This should be fine its just WPE and iOS are not compiling due to the #else being removed.

&gt; Source/WebKit/Shared/NativeWebKeyboardEvent.h:90
&gt; -#else
&gt; -    const void* nativeEvent() const { return nullptr; }
&gt; +#elif PLATFORM(WIN)
&gt; +    const MSG* nativeEvent() const { return &amp;m_nativeEvent; }
&gt;  #endif

WPE and ios are failing because the #else was removed

&gt; Source/WebKit/Shared/NativeWebMouseEvent.h:71
&gt;      const GdkEvent* nativeEvent() const { return m_nativeEvent.get(); }
&gt; -#else
&gt; -    const void* nativeEvent() const { return nullptr; }
&gt; +#elif PLATFORM(WIN)
&gt; +    const MSG* nativeEvent() const { return &amp;m_nativeEvent; }
&gt;  #endif

Same problem here

&gt; Source/WebKit/Shared/NativeWebWheelEvent.h:71
&gt; -#else
&gt; -    const void* nativeEvent() const { return nullptr; }
&gt; +#elif PLATFORM(WIN)
&gt; +    const MSG* nativeEvent() const { return &amp;m_nativeEvent; }
&gt;  #endif

Same problem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403078</commentid>
    <comment_count>3</comment_count>
      <attachid>334862</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-03-01 15:42:23 -0800</bug_when>
    <thetext>Created attachment 334862
Patch

Lets see if ios and wpe like this one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403229</commentid>
    <comment_count>4</comment_count>
      <attachid>334862</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-03-02 08:31:59 -0800</bug_when>
    <thetext>Comment on attachment 334862
Patch

I see nothing wrong in this patch but I am not familiar enough with this code to fully review the patch.
Maybe Per Arne could take a look?
Since it is related to touch events, Ryosuke or Wenson might be good people to talk to as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403241</commentid>
    <comment_count>5</comment_count>
      <attachid>334862</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-03-02 09:02:00 -0800</bug_when>
    <thetext>Comment on attachment 334862
Patch

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

Wow! Looks nice. Please consider my suggestions, but I think this is fine.

&gt; Source/WebKit/Shared/win/NativeWebKeyboardEventWin.cpp:38
&gt; +    , m_nativeEvent()

Does this auto-initialize the various MSG members to null values? Isn&apos;t this uninitialized crap at this point? Or does WinAPI now have a default constructor that does the right thing?

&gt; Source/WebKit/Shared/win/NativeWebKeyboardEventWin.cpp:43
&gt; +    m_nativeEvent.lParam = lParam;

What about &apos;time&apos; and &apos;pt&apos;? Aren&apos;t those uninitialized now? Maybe we never use them, but it&apos;s still a potential problem if we have code that inspects that data.

This might be cleaner if we had some kind of WebKit &apos;MSG&apos; initializer function, since you repeat this in a few places.

Then you could just do &quot;m_nativeEvent(hwnd, message, wParam, lParam)&quot; or &quot;m_nativeEvent(createNativeEvent(hwnd, ...)&quot;

&gt; Source/WebKit/Shared/win/NativeWebMouseEventWin.cpp:41
&gt; +    m_nativeEvent.lParam = lParam;

Repeated code

&gt; Source/WebKit/Shared/win/NativeWebWheelEventWin.cpp:41
&gt; +    m_nativeEvent.lParam = lParam;

Ditto initializations.

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:80
&gt; +        || ((timeStampSeconds - gLastClickTime) * 1000.0 &gt; ::GetDoubleClickTime());

I&apos;d suggest using &apos;std::abs&quot; here, so the code will work without casting if we ever build for 32-bit, or if Microsoft ever changes the definition of POINT.

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:400
&gt; +    static const float cScrollbarPixelsPerLine = 100.0f / 3.0f;

We should probably expose this from WebCore in some useful way, since we now have this hard-coded in two places.

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:406
&gt; +    WebWheelEvent::Granularity granularity  = WebWheelEvent::ScrollByPixelWheelEvent;

Looks like two spaces after granularity. I&apos;m surprised the syntax checker didn&apos;t complain!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403312</commentid>
    <comment_count>6</comment_count>
      <attachid>334862</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-03-02 11:15:59 -0800</bug_when>
    <thetext>Comment on attachment 334862
Patch

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

&gt;&gt; Source/WebKit/Shared/win/NativeWebKeyboardEventWin.cpp:43
&gt;&gt; +    m_nativeEvent.lParam = lParam;
&gt; 
&gt; What about &apos;time&apos; and &apos;pt&apos;? Aren&apos;t those uninitialized now? Maybe we never use them, but it&apos;s still a potential problem if we have code that inspects that data.
&gt; 
&gt; This might be cleaner if we had some kind of WebKit &apos;MSG&apos; initializer function, since you repeat this in a few places.
&gt; 
&gt; Then you could just do &quot;m_nativeEvent(hwnd, message, wParam, lParam)&quot; or &quot;m_nativeEvent(createNativeEvent(hwnd, ...)&quot;

There&apos;s actually something like that hanging out in Tools/DumpRenderTree/win/EventSender.cpp.

We could add something into WebEventFactory that would create the MSG.

&gt;&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:400
&gt;&gt; +    static const float cScrollbarPixelsPerLine = 100.0f / 3.0f;
&gt; 
&gt; We should probably expose this from WebCore in some useful way, since we now have this hard-coded in two places.

I started poking around a bit more and this code is present Source/WebCore/platform/win/WheelEventWin.cpp as well as Tools/DumpRenderTree/win/EventSender.cpp.

Is there any reason the WebEvent things aren&apos;t using PlatformEvents? I see GTK bolts some stuff onto PlatformKeyboardEvent specifically for WebKit(2) use. I&apos;m just wondering if we should maybe open a bug to refactor the PlatformEvents into something usable within WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403328</commentid>
    <comment_count>7</comment_count>
      <attachid>334862</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-02 12:02:23 -0800</bug_when>
    <thetext>Comment on attachment 334862
Patch

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

r=me as an API owner as well.

&gt; Source/WebKit/Shared/NativeWebWheelEvent.h:81
&gt; +    MSG m_nativeEvent;

You probably want to initialize MSG here.

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:110
&gt; +    if (::GetKeyState(VK_MENU) &amp; 0x8000)

Instead of keep having &amp; 0x8000 everywhere,
can we add an inline helper function like IsKeyInDownState(VM_MENU) / IsKeyStateDown(::GetKeyState(VK_MENU))?

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:123
&gt; +    if (::GetKeyState(VK_CONTROL) &amp; 0x8000)
&gt; +        modifiers |= WebEvent::ControlKey;
&gt; +    if (::GetKeyState(VK_SHIFT) &amp; 0x8000)
&gt; +        modifiers |= WebEvent::ShiftKey;
&gt; +    if (::GetKeyState(VK_MENU) &amp; 0x8000)
&gt; +        modifiers |= WebEvent::AltKey;

Ditto about all these checks.

&gt; Source/WebKit/Shared/win/WebEventFactory.cpp:456
&gt; +    WebEvent::Type type             = keyboardEventTypeForEvent(message);
&gt; +    String text                     = textFromEvent(wparam, type);
&gt; +    String unmodifiedText           = unmodifiedTextFromEvent(wparam, type);
&gt; +    String keyIdentifier            = keyIdentifierFromEvent(wparam, type);
&gt; +    int windowsVirtualKeyCode       = static_cast&lt;int&gt;(wparam);
&gt; +    int nativeVirtualKeyCode        = static_cast&lt;int&gt;(wparam);
&gt; +    int macCharCode                 = 0;
&gt; +    bool autoRepeat                 = HIWORD(lparam) &amp; KF_REPEAT;
&gt; +    bool isKeypad                   = isKeypadEvent(wparam, lparam, type);
&gt; +    bool isSystemKey                = isSystemKeyEvent(message);
&gt; +    WebEvent::Modifiers modifiers   = modifiersForCurrentKeyState();

Nit: Wrong indentation style. Never align assignment like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403605</commentid>
    <comment_count>8</comment_count>
    <who name="Yousuke Kimoto">Yousuke.Kimoto</who>
    <bug_when>2018-03-05 06:41:58 -0800</bug_when>
    <thetext>Thank you for your review.

(In reply to Brent Fulgham from comment #5)
&gt; Comment on attachment 334862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=334862&amp;action=review
&gt; &gt; Source/WebKit/Shared/win/NativeWebKeyboardEventWin.cpp:38
&gt; &gt; +    , m_nativeEvent()
&gt; 
&gt; Does this auto-initialize the various MSG members to null values? Isn&apos;t this
&gt; uninitialized crap at this point? Or does WinAPI now have a default
&gt; constructor that does the right thing?
At this point, I just expect that the member is just initialized but it is unnecessary.

&gt; Then you could just do &quot;m_nativeEvent(hwnd, message, wParam, lParam)&quot; or
&gt; &quot;m_nativeEvent(createNativeEvent(hwnd, ...)&quot;

I&apos;ll use this initialization style for NativeWeb*EventWin files.
 
&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:80
&gt; &gt; +        || ((timeStampSeconds - gLastClickTime) * 1000.0 &gt; ::GetDoubleClickTime());
&gt; 
&gt; I&apos;d suggest using &apos;std::abs&quot; here, so the code will work without casting if
&gt; we ever build for 32-bit, or if Microsoft ever changes the definition of
&gt; POINT.
will do.

&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:400
&gt; &gt; +    static const float cScrollbarPixelsPerLine = 100.0f / 3.0f;
&gt; 
&gt; We should probably expose this from WebCore in some useful way, since we now
&gt; have this hard-coded in two places.
As don said, PlatformEvent is a good place to define the value. I&apos;ll fix it.

&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:406
&gt; &gt; +    WebWheelEvent::Granularity granularity  = WebWheelEvent::ScrollByPixelWheelEvent;
&gt; 
&gt; Looks like two spaces after granularity. I&apos;m surprised the syntax checker
&gt; didn&apos;t complain!

Ah, it must be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403611</commentid>
    <comment_count>9</comment_count>
    <who name="Yousuke Kimoto">Yousuke.Kimoto</who>
    <bug_when>2018-03-05 06:48:52 -0800</bug_when>
    <thetext>&gt;What about &apos;time&apos; and &apos;pt&apos;? Aren&apos;t those uninitialized now? Maybe we never use them, but it&apos;s still a potential problem if we have code that inspects that data.
Also we never use those two parameters, then those must be initialized.

MSG is used to just keep &apos;hwnd&apos;, &apos;message&apos;, &apos;wParam&apos; and &apos;lParam&apos;. If MSG confuse other developers, I would like to define 4 members to keep them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403615</commentid>
    <comment_count>10</comment_count>
    <who name="Yousuke Kimoto">Yousuke.Kimoto</who>
    <bug_when>2018-03-05 06:54:54 -0800</bug_when>
    <thetext>Thank you for your review.

(In reply to Ryosuke Niwa from comment #7)
&gt; Comment on attachment 334862 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=334862&amp;action=review
&gt; 
&gt; r=me as an API owner as well.
&gt; 
&gt; &gt; Source/WebKit/Shared/NativeWebWheelEvent.h:81
&gt; &gt; +    MSG m_nativeEvent;
&gt; 
&gt; You probably want to initialize MSG here.
Four members of MSG are used, I think MSG confuse many developers. Since those are initialized at construction, I&apos;ll fix it as comment #8.

&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:110
&gt; &gt; +    if (::GetKeyState(VK_MENU) &amp; 0x8000)
&gt; 
&gt; Instead of keep having &amp; 0x8000 everywhere,
&gt; can we add an inline helper function like IsKeyInDownState(VM_MENU) /
&gt; IsKeyStateDown(::GetKeyState(VK_MENU))?
It is a good idea. will do.

&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:123
&gt; &gt; +    if (::GetKeyState(VK_CONTROL) &amp; 0x8000)
&gt; &gt; +        modifiers |= WebEvent::ControlKey;
&gt; &gt; +    if (::GetKeyState(VK_SHIFT) &amp; 0x8000)
&gt; &gt; +        modifiers |= WebEvent::ShiftKey;
&gt; &gt; +    if (::GetKeyState(VK_MENU) &amp; 0x8000)
&gt; &gt; +        modifiers |= WebEvent::AltKey;
&gt; 
&gt; Ditto about all these checks.
will do

&gt; &gt; Source/WebKit/Shared/win/WebEventFactory.cpp:456
&gt; &gt; +    WebEvent::Type type             = keyboardEventTypeForEvent(message);
&gt; &gt; +    String text                     = textFromEvent(wparam, type);
&gt; &gt; +    String unmodifiedText           = unmodifiedTextFromEvent(wparam, type);
&gt; &gt; +    String keyIdentifier            = keyIdentifierFromEvent(wparam, type);
&gt; &gt; +    int windowsVirtualKeyCode       = static_cast&lt;int&gt;(wparam);
&gt; &gt; +    int nativeVirtualKeyCode        = static_cast&lt;int&gt;(wparam);
&gt; &gt; +    int macCharCode                 = 0;
&gt; &gt; +    bool autoRepeat                 = HIWORD(lparam) &amp; KF_REPEAT;
&gt; &gt; +    bool isKeypad                   = isKeypadEvent(wparam, lparam, type);
&gt; &gt; +    bool isSystemKey                = isSystemKeyEvent(message);
&gt; &gt; +    WebEvent::Modifiers modifiers   = modifiersForCurrentKeyState();
&gt; 
&gt; Nit: Wrong indentation style. Never align assignment like this.
I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412820</commentid>
    <comment_count>11</comment_count>
      <attachid>337484</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-08 23:26:51 -0700</bug_when>
    <thetext>Created attachment 337484
Patch for land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413123</commentid>
    <comment_count>12</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-09 18:33:59 -0700</bug_when>
    <thetext>Committed r230461: &lt;https://trac.webkit.org/changeset/230461&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413124</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-09 18:34:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/39301770&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334511</attachid>
            <date>2018-02-23 01:09:15 -0800</date>
            <delta_ts>2018-03-01 15:42:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183043-20180223180915.patch</filename>
            <type>text/plain</type>
            <size>33743</size>
            <attacher name="Yousuke Kimoto">Yousuke.Kimoto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4OTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNkM2UxYjIyOTAwNTJmMDg1
NWZjNWM5ZjkyMDJkNzVmYzhhMGNhYjcuLjIwZjA1NmJiOGYyOThiNTg0MmNiYmFjODIwMDdmNzVj
MDdlZTE3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTgtMDItMjMgIFlvdXN1a2Ug
S2ltb3RvICA8eW91c3VrZS5raW1vdG9Ac29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBB
ZGQgV2ViS2l0IFNoYXJlZC93aW4gZXZlbnQgZmlsZXMgZm9yIHdpbmNhaXJvIHdlYmtpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMDQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50OjpuYXRpdmVFdmVudCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYk1v
dXNlRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6bmF0aXZl
RXZlbnQgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJUb3VjaEV2ZW50Lmg6Cisg
ICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6
TmF0aXZlV2ViV2hlZWxFdmVudDo6bmF0aXZlRXZlbnQgY29uc3QpOgorICAgICAgICAqIFNoYXJl
ZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KToKKyAg
ICAgICAgKiBTaGFyZWQvd2luL05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6TmF0aXZlV2ViTW91c2VFdmVudCk6
CisgICAgICAgICogU2hhcmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQ6Ok5hdGl2ZVdlYlRvdWNoRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC93aW4vTmF0aXZlV2ViV2hlZWxFdmVudFdpbi5jcHA6IEFk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2ZVdlYldoZWVs
RXZlbnQpOgorICAgICAgICAqIFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OnJlbGF0aXZlQ3Vyc29yUG9zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0Ojpwb2ludCk6CisgICAgICAgIChXZWJLaXQ6Omhvcml6b250YWxTY3JvbGxDaGFycyk6Cisg
ICAgICAgIChXZWJLaXQ6OnZlcnRpY2FsU2Nyb2xsTGluZXMpOgorICAgICAgICAoV2ViS2l0Ojpj
bGlja0NvdW50KToKKyAgICAgICAgKFdlYktpdDo6bW9kaWZpZXJzRm9yRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0Ojptb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUpOgorICAgICAgICAoV2ViS2l0
OjprZXlib2FyZEV2ZW50VHlwZUZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6aXNTeXN0ZW1L
ZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmlzS2V5cGFkRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0Ojp0ZXh0RnJvbUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6dW5tb2RpZmllZFRleHRGcm9t
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjprZXlJZGVudGlmaWVyRnJvbUV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJUb3VjaEV2ZW50KToKKyAg
ICAgICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oOiBBZGRlZC4KKwogMjAxOC0wMi0y
MSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIFdl
YkNvbnRlbnQgcHJvY2VzcyBzaG91bGQgbm90IHVzZSBOU1NjcmVlbiBpbiB0aGUgc2NyZWVuQXZh
aWxhYmxlUmVjdC9zY3JlZW5SZWN0IGltcGxlbWVudGF0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAppbmRleCBhYTZkMzhmYTE5ODk0MTI0M2Ez
NDJhZTBiOWJlYWEyZmNlZjRlMDAyLi40NzJiODEwOWU4MGZmMzNkY2IxYTMyMzRlNjEwZDUxMjMx
ZTgxMGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTUsNiArNTYsMTAgQEAgT0JKQ19DTEFTUyBXZWJFdmVudDsKIHN0cnVjdCB3cGVfaW5wdXRf
a2V5Ym9hcmRfZXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQgOiBwdWJsaWMgV2ViS2V5Ym9hcmRFdmVudCB7CkBAIC02OCw2ICs3Myw4
IEBAIHB1YmxpYzoKICAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KDo6V2ViRXZlbnQgKik7CiAj
ZWxpZiBQTEFURk9STShXUEUpCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChzdHJ1Y3Qgd3Bl
X2lucHV0X2tleWJvYXJkX2V2ZW50Kik7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNl
bmRpZgogCiAjaWYgVVNFKEFQUEtJVCkKQEAgLTc4LDggKzg1LDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmFrZUV2ZW50
Rm9yQ29tcG9zaXRpb247IH0KICNlbGlmIFBMQVRGT1JNKElPUykKICAgICA6OldlYkV2ZW50KiBu
YXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7IH0KLSNlbHNl
Ci0gICAgY29uc3Qgdm9pZCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY29uc3QgTVNHKiBuYXRpdmVFdmVudCgpIGNvbnN0
IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTkxLDYg
Kzk4LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb247CiAj
ZWxpZiBQTEFURk9STShJT1MpCiAgICAgUmV0YWluUHRyPDo6V2ViRXZlbnQ+IG1fbmF0aXZlRXZl
bnQ7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgTVNHIG1fbmF0aXZlRXZlbnQ7CiAjZW5kaWYK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZl
bnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAppbmRleCAx
YTFkNzAwYzEyMGM2MzA3NWQ3MmRhNjhlMDgxYmMyNmViZDJkMjdjLi45NzM3YTY4ZDZhMTMxOTUz
NDRlNzdlNGVhYWNkNmFmMzI2NjBiZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZl
V2ViTW91c2VFdmVudC5oCkBAIC00Miw2ICs0MiwxMSBAQCB0eXBlZGVmIHVuaW9uIF9HZGtFdmVu
dCBHZGtFdmVudDsKIHN0cnVjdCB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudDsKICNlbmRpZgogCisj
aWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBOYXRpdmVXZWJNb3VzZUV2ZW50IDogcHVibGljIFdlYk1v
dXNlRXZlbnQgewpAQCAtNTMsMTQgKzU4LDE2IEBAIHB1YmxpYzoKICAgICBOYXRpdmVXZWJNb3Vz
ZUV2ZW50KEdka0V2ZW50KiwgaW50KTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKICAgICBOYXRpdmVX
ZWJNb3VzZUV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudCosIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBOYXRpdmVXZWJNb3VzZUV2
ZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wpOwogI2VuZGlmCiAK
ICNpZiBVU0UoQVBQS0lUKQogICAgIE5TRXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIGNvbnN0
IEdka0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0
KCk7IH0KLSNlbHNlCi0gICAgY29uc3Qgdm9pZCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY29uc3QgTVNHKiBuYXRpdmVF
dmVudCgpIGNvbnN0IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9CiAjZW5kaWYKIAogcHJpdmF0
ZToKQEAgLTY4LDYgKzc1LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9u
YXRpdmVFdmVudDsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50
PiBtX25hdGl2ZUV2ZW50OworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIE1TRyBtX25hdGl2ZUV2
ZW50OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJUb3VjaEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJUb3VjaEV2
ZW50LmgKaW5kZXggODJmM2IyNGQ0MjMyOWQ3OGIxNjQyNzU0NzEwMGNhODQ5ZTEyNWZhNS4uYWMy
NmFlMTY5YzZmOWY1Yzg0ODI1YTU2MmJiYmNjODU0NGNiMDBjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViVG91Y2hFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYlRvdWNoRXZlbnQuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAj
ZWxpZiBQTEFURk9STShXUEUpCiAgICAgTmF0aXZlV2ViVG91Y2hFdmVudChzdHJ1Y3Qgd3BlX2lu
cHV0X3RvdWNoX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGNvbnN0IHN0
cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3KiBuYXRpdmVGYWxsYmFja1RvdWNoUG9pbnQo
KSBjb25zdCB7IHJldHVybiAmbV9mYWxsYmFja1RvdWNoUG9pbnQ7IH0KKyNlbGlmIFBMQVRGT1JN
KFdJTikKKyAgICBOYXRpdmVXZWJUb3VjaEV2ZW50KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCA4OGMzZWI2OGRh
ZDE1ZTkwZWMwNWEzMDZmZjJiZTJhMTI5M2IxNjc4Li42NGY3MzNiM2UxNWRiNWNhZWQ2YWE3ZTlk
OTY2NzFjNmFhMmE3NjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVX
ZWJXaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxF
dmVudC5oCkBAIC00Miw2ICs0MiwxMCBAQCB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVu
dDsKIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgTmF0aXZlV2ViV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJXaGVlbEV2ZW50IHsKQEAg
LTU0LDE0ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVu
dCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBo
YXNlKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVj
dCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEhXTkQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKICNpZiBVU0UoQVBQS0lUKQogICAgIE5TRXZl
bnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQog
I2VsaWYgUExBVEZPUk0oR1RLKQogICAgIEdka0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7IH0KLSNlbHNlCi0gICAgY29uc3Qgdm9pZCogbmF0
aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisjZWxpZiBQTEFURk9STShXSU4p
CisgICAgY29uc3QgTVNHKiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuICZtX25hdGl2ZUV2
ZW50OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTY5LDYgKzc1LDggQEAgcHJpdmF0ZToKICAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gbV9uYXRpdmVFdmVudDsKICNlbGlmIFBMQVRGT1JNKEdUSykK
ICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBtX25hdGl2ZUV2ZW50OworI2VsaWYgUExBVEZPUk0o
V0lOKQorICAgIE1TRyBtX25hdGl2ZUV2ZW50OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjVmMmNhNGI5YjEwMDhiN2FlMWQ0NjI4OTcyY2E4YjVkYmUzMjQxOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJLZXlib2FyZEV2
ZW50V2luLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAi
V2ViRXZlbnRGYWN0b3J5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRF
dmVudChIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKKyAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXli
b2FyZEV2ZW50KGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSkKKyAgICAsIG1fbmF0aXZl
RXZlbnQoKQoreworICAgIG1fbmF0aXZlRXZlbnQuaHduZCA9IGh3bmQ7CisgICAgbV9uYXRpdmVF
dmVudC5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBtX25hdGl2ZUV2ZW50LndQYXJhbSA9IHdQYXJh
bTsKKyAgICBtX25hdGl2ZUV2ZW50LmxQYXJhbSA9IGxQYXJhbTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2Vi
TW91c2VFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViTW91
c2VFdmVudFdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NkYmZiOWNlNmRhZDZhYmE4MGVmNjFmZGYyOGUy
MmM0MDUyZmYyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9O
YXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgor
CisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitO
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KEhXTkQgaHduZCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sIGRpZEFjdGl2YXRlV2Vi
VmlldykKKyAgICA6IFdlYk1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBkaWRBY3RpdmF0ZVdlYlZpZXcp
KQorICAgICwgbV9uYXRpdmVFdmVudCgpCit7CisgICAgbV9uYXRpdmVFdmVudC5od25kID0gaHdu
ZDsKKyAgICBtX25hdGl2ZUV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIG1fbmF0aXZlRXZl
bnQud1BhcmFtID0gd1BhcmFtOworICAgIG1fbmF0aXZlRXZlbnQubFBhcmFtID0gbFBhcmFtOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZGFiOWYyYjNmY2U0
N2JlYjhjZDU1YjY5ZjM0NjBhNGQwZDNjMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL05hdGl2ZVdlYlRvdWNoRXZlbnRXaW4uY3BwCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXRpdmVX
ZWJUb3VjaEV2ZW50LmgiCisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCisjaW5jbHVkZSAi
V2ViRXZlbnRGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitOYXRpdmVXZWJUb3Vj
aEV2ZW50OjpOYXRpdmVXZWJUb3VjaEV2ZW50KCkKKyAgICA6IFdlYlRvdWNoRXZlbnQoV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJUb3VjaEV2ZW50KCkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMzAwNjlkY2JlNGVjY2Q4MmU3YTcyNzE1NmE1OTgyMjU4ZGNlYWRhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL05hdGl2ZVdlYldoZWVsRXZlbnRXaW4uY3Bw
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCisKKyNpbmNsdWRlICJXZWJFdmVudEZhY3Rv
cnkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05hdGl2ZVdlYldoZWVsRXZlbnQ6Ok5hdGl2
ZVdlYldoZWVsRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUGFyYW0pCisgICAgOiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViV2hlZWxFdmVudChod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSkpCisgICAgLCBtX25h
dGl2ZUV2ZW50KCkKK3sKKyAgICBtX25hdGl2ZUV2ZW50Lmh3bmQgPSBod25kOworICAgIG1fbmF0
aXZlRXZlbnQubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgbV9uYXRpdmVFdmVudC53UGFyYW0gPSB3
UGFyYW07CisgICAgbV9uYXRpdmVFdmVudC5sUGFyYW0gPSBsUGFyYW07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2
ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yZTE3YjIzYTQxZmQ5ZGQzNTE3YWIxODQzYzcxNzZmYjA0MjkzZGY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFj
dG9yeS5jcHAKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8d2lu
ZG93c3guaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKworc3RhdGljIGlubGluZSBMUEFSQU0g
cmVsYXRpdmVDdXJzb3JQb3NpdGlvbihIV05EIGh3bmQpCit7CisgICAgUE9JTlQgcG9pbnQgPSB7
IC0xLCAtMSB9OworICAgIDo6R2V0Q3Vyc29yUG9zKCZwb2ludCk7CisgICAgOjpTY3JlZW5Ub0Ns
aWVudChod25kLCAmcG9pbnQpOworICAgIHJldHVybiBNQUtFTFBBUkFNKHBvaW50LngsIHBvaW50
LnkpOworfQorCitzdGF0aWMgaW5saW5lIFBPSU5UIHBvaW50KExQQVJBTSBsUGFyYW0pCit7Cisg
ICAgUE9JTlQgcG9pbnQgPSB7IEdFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBh
cmFtKSB9OworICAgIHJldHVybiBwb2ludDsKK30KKworc3RhdGljIGludCBob3Jpem9udGFsU2Ny
b2xsQ2hhcnMoKQoreworICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxDaGFyczsKKyAgICBpZiAoIXNj
cm9sbENoYXJzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTENI
QVJTLCAwLCAmc2Nyb2xsQ2hhcnMsIDApKQorICAgICAgICBzY3JvbGxDaGFycyA9IDE7CisgICAg
cmV0dXJuIHNjcm9sbENoYXJzOworfQorCitzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xsTGluZXMo
KQoreworICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxMaW5lczsKKyAgICBpZiAoIXNjcm9sbExpbmVz
ICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTExJTkVTLCAwLCAm
c2Nyb2xsTGluZXMsIDApKQorICAgICAgICBzY3JvbGxMaW5lcyA9IDM7CisgICAgcmV0dXJuIHNj
cm9sbExpbmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBjbGlja0NvdW50KFdlYkV2ZW50OjpU
eXBlIHR5cGUsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24sIGNvbnN0IFBPSU5UJiBwb3Np
dGlvbiwgZG91YmxlIHRpbWVTdGFtcFNlY29uZHMpCit7CisgICAgc3RhdGljIGludCBnTGFzdENs
aWNrQ291bnQ7CisgICAgc3RhdGljIGRvdWJsZSBnTGFzdENsaWNrVGltZTsKKyAgICBzdGF0aWMg
UE9JTlQgbGFzdENsaWNrUG9zaXRpb247CisgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQ6OkJ1dHRv
biBsYXN0Q2xpY2tCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworCisgICAgYm9v
bCBjYW5jZWxQcmV2aW91c0NsaWNrID0gKGFicyhsYXN0Q2xpY2tQb3NpdGlvbi54IC0gcG9zaXRp
b24ueCkgPiAoOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYRE9VQkxFQ0xLKSAvIDIpKQorICAgICAg
ICB8fCAoYWJzKGxhc3RDbGlja1Bvc2l0aW9uLnkgLSBwb3NpdGlvbi55KSA+ICg6OkdldFN5c3Rl
bU1ldHJpY3MoU01fQ1lET1VCTEVDTEspIC8gMikpCisgICAgICAgIHx8ICgodGltZVN0YW1wU2Vj
b25kcyAtIGdMYXN0Q2xpY2tUaW1lKSAqIDEwMDAuMCA+IDo6R2V0RG91YmxlQ2xpY2tUaW1lKCkp
OworCisgICAgaWYgKHR5cGUgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgeworICAgICAgICBpZiAo
IWNhbmNlbFByZXZpb3VzQ2xpY2sgJiYgKGJ1dHRvbiA9PSBsYXN0Q2xpY2tCdXR0b24pKQorICAg
ICAgICAgICAgKytnTGFzdENsaWNrQ291bnQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Z0xhc3RDbGlja0NvdW50ID0gMTsKKyAgICAgICAgICAgIGxhc3RDbGlja1Bvc2l0aW9uID0gcG9z
aXRpb247CisgICAgICAgIH0KKyAgICAgICAgZ0xhc3RDbGlja1RpbWUgPSB0aW1lU3RhbXBTZWNv
bmRzOworICAgICAgICBsYXN0Q2xpY2tCdXR0b24gPSBidXR0b247CisgICAgfSBlbHNlIGlmICh0
eXBlID09IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKKyAgICAgICAgaWYgKGNhbmNlbFByZXZpb3Vz
Q2xpY2spIHsKKyAgICAgICAgICAgIGdMYXN0Q2xpY2tDb3VudCA9IDA7CisgICAgICAgICAgICBs
YXN0Q2xpY2tQb3NpdGlvbi54ID0gMDsKKyAgICAgICAgICAgIGxhc3RDbGlja1Bvc2l0aW9uLnkg
PSAwOworICAgICAgICAgICAgZ0xhc3RDbGlja1RpbWUgPSAwOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGdMYXN0Q2xpY2tDb3VudDsKK30KKworc3RhdGljIGlubGluZSBXZWJFdmVu
dDo6TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckV2ZW50KFdQQVJBTSB3cGFyYW0pCit7CisgICAgdW5z
aWduZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAod3BhcmFtICYgTUtfQ09OVFJPTCkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmICh3cGFyYW0gJiBN
S19TSElGVCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKKyAgICBp
ZiAoOjpHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkKKyAgICAgICAgbW9kaWZpZXJzIHw9
IFdlYkV2ZW50OjpBbHRLZXk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2Rp
ZmllcnM+KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVy
cyBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVy
cyA9IDA7CisgICAgaWYgKDo6R2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiAweDgwMDApCisgICAg
ICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAoOjpHZXRLZXlT
dGF0ZShWS19TSElGVCkgJiAweDgwMDApCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6
U2hpZnRLZXk7CisgICAgaWYgKDo6R2V0S2V5U3RhdGUoVktfTUVOVSkgJiAweDgwMDApCisgICAg
ICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpOworfQorCitzdGF0aWMgaW5saW5lIFdl
YkV2ZW50OjpUeXBlIGtleWJvYXJkRXZlbnRUeXBlRm9yRXZlbnQoVUlOVCBtZXNzYWdlKQorewor
ICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKKyAgICBjYXNl
IFdNX0tFWURPV046CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6UmF3S2V5RG93bjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICBjYXNlIFdNX0tFWVVQOgorICAg
ICAgICByZXR1cm4gV2ViRXZlbnQ6OktleVVwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdN
X0lNRV9DSEFSOgorICAgIGNhc2UgV01fU1lTQ0hBUjoKKyAgICBjYXNlIFdNX0NIQVI6CisgICAg
ICAgIHJldHVybiBXZWJFdmVudDo6Q2hhcjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6
Q2hhcjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1N5c3RlbUtleUV2ZW50KFVJ
TlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX1NZU0tF
WURPV046CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICBjYXNlIFdNX1NZU0NIQVI6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIGlzS2V5cGFkRXZlbnQoV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAhPSBXZWJFdmVu
dDo6UmF3S2V5RG93biAmJiB0eXBlICE9IFdlYkV2ZW50OjpLZXlVcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoICh3UGFyYW0pIHsKKyAgICBjYXNlIFZLX05VTUxPQ0s6Cisg
ICAgY2FzZSBWS19OVU1QQUQwOgorICAgIGNhc2UgVktfTlVNUEFEMToKKyAgICBjYXNlIFZLX05V
TVBBRDI6CisgICAgY2FzZSBWS19OVU1QQUQzOgorICAgIGNhc2UgVktfTlVNUEFENDoKKyAgICBj
YXNlIFZLX05VTVBBRDU6CisgICAgY2FzZSBWS19OVU1QQUQ2OgorICAgIGNhc2UgVktfTlVNUEFE
NzoKKyAgICBjYXNlIFZLX05VTVBBRDg6CisgICAgY2FzZSBWS19OVU1QQUQ5OgorICAgIGNhc2Ug
VktfTVVMVElQTFk6CisgICAgY2FzZSBWS19BREQ6CisgICAgY2FzZSBWS19TRVBBUkFUT1I6Cisg
ICAgY2FzZSBWS19TVUJUUkFDVDoKKyAgICBjYXNlIFZLX0RFQ0lNQUw6CisgICAgY2FzZSBWS19E
SVZJREU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAg
ICByZXR1cm4gSElXT1JEKGxQYXJhbSkgJiBLRl9FWFRFTkRFRDsKKyAgICBjYXNlIFZLX0lOU0VS
VDoKKyAgICBjYXNlIFZLX0RFTEVURToKKyAgICBjYXNlIFZLX1BSSU9SOgorICAgIGNhc2UgVktf
TkVYVDoKKyAgICBjYXNlIFZLX0VORDoKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgY2FzZSBWS19M
RUZUOgorICAgIGNhc2UgVktfVVA6CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICBjYXNlIFZLX0RP
V046CisgICAgICAgIHJldHVybiAhKEhJV09SRChsUGFyYW0pICYgS0ZfRVhURU5ERUQpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJp
bmcgdGV4dEZyb21FdmVudChXUEFSQU0gd3BhcmFtLCBXZWJFdmVudDo6VHlwZSB0eXBlKQorewor
ICAgIGlmICh0eXBlICE9IFdlYkV2ZW50OjpDaGFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBVQ2hhciBjID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHdwYXJhbSk7CisgICAgcmV0dXJu
IFN0cmluZygmYywgMSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgdW5tb2RpZmllZFRleHRGcm9tRXZl
bnQoV1BBUkFNIHdwYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAh
PSBXZWJFdmVudDo6Q2hhcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgVUNoYXIg
YyA9IHN0YXRpY19jYXN0PFVDaGFyPih3cGFyYW0pOworICAgIHJldHVybiBTdHJpbmcoJmMsIDEp
OworfQorCitzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGcm9tRXZlbnQoV1BBUkFNIHdwYXJh
bSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBXZWJFdmVudDo6Q2hh
cikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgdW5zaWduZWQgc2hvcnQga2V5Q29k
ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih3cGFyYW0pOworICAgIHN3aXRjaCAoa2V5
Q29kZSkgeworICAgIGNhc2UgVktfTUVOVToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiQWx0Iik7
CisgICAgY2FzZSBWS19DT05UUk9MOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJDb250cm9sIik7
CisgICAgY2FzZSBWS19TSElGVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiU2hpZnQiKTsKKyAg
ICBjYXNlIFZLX0NBUElUQUw6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkNhcHNMb2NrIik7Cisg
ICAgY2FzZSBWS19MV0lOOgorICAgIGNhc2UgVktfUldJTjoKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygiV2luIik7CisgICAgY2FzZSBWS19DTEVBUjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiQ2xl
YXIiKTsKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHJldHVybiBTdHJpbmcoIkRvd24iKTsK
KyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRW5kIik7CisgICAgY2Fz
ZSBWS19SRVRVUk46CisgICAgICAgIHJldHVybiBTdHJpbmcoIkVudGVyIik7CisgICAgY2FzZSBW
S19FWEVDVVRFOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJFeGVjdXRlIik7CisgICAgY2FzZSBW
S19GMToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjEiKTsKKyAgICBjYXNlIFZLX0YyOgorICAg
ICAgICByZXR1cm4gU3RyaW5nKCJGMiIpOworICAgIGNhc2UgVktfRjM6CisgICAgICAgIHJldHVy
biBTdHJpbmcoIkYzIik7CisgICAgY2FzZSBWS19GNDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygi
RjQiKTsKKyAgICBjYXNlIFZLX0Y1OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGNSIpOworICAg
IGNhc2UgVktfRjY6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkY2Iik7CisgICAgY2FzZSBWS19G
NzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjciKTsKKyAgICBjYXNlIFZLX0Y4OgorICAgICAg
ICByZXR1cm4gU3RyaW5nKCJGOCIpOworICAgIGNhc2UgVktfRjk6CisgICAgICAgIHJldHVybiBT
dHJpbmcoIkY5Iik7CisgICAgY2FzZSBWS19GMTA6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYx
MSIpOworICAgIGNhc2UgVktfRjEyOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTIiKTsKKyAg
ICBjYXNlIFZLX0YxMzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjEzIik7CisgICAgY2FzZSBW
S19GMTQ6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYxNCIpOworICAgIGNhc2UgVktfRjE1Ogor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTUiKTsKKyAgICBjYXNlIFZLX0YxNjoKKyAgICAgICAg
cmV0dXJuIFN0cmluZygiRjE2Iik7CisgICAgY2FzZSBWS19GMTc6CisgICAgICAgIHJldHVybiBT
dHJpbmcoIkYxNyIpOworICAgIGNhc2UgVktfRjE4OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJG
MTgiKTsKKyAgICBjYXNlIFZLX0YxOToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjE5Iik7Cisg
ICAgY2FzZSBWS19GMjA6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYyMCIpOworICAgIGNhc2Ug
VktfRjIxOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMjEiKTsKKyAgICBjYXNlIFZLX0YyMjoK
KyAgICAgICAgcmV0dXJuIFN0cmluZygiRjIyIik7CisgICAgY2FzZSBWS19GMjM6CisgICAgICAg
IHJldHVybiBTdHJpbmcoIkYyMyIpOworICAgIGNhc2UgVktfRjI0OgorICAgICAgICByZXR1cm4g
U3RyaW5nKCJGMjQiKTsKKyAgICBjYXNlIFZLX0hFTFA6CisgICAgICAgIHJldHVybiBTdHJpbmco
IkhlbHAiKTsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkhvbWUi
KTsKKyAgICBjYXNlIFZLX0lOU0VSVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiSW5zZXJ0Iik7
CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJMZWZ0Iik7CisgICAg
Y2FzZSBWS19ORVhUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJQYWdlRG93biIpOworICAgIGNh
c2UgVktfUFJJT1I6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlBhZ2VVcCIpOworICAgIGNhc2Ug
VktfUEFVU0U6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlBhdXNlIik7CisgICAgY2FzZSBWS19T
TkFQU0hPVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiUHJpbnRTY3JlZW4iKTsKKyAgICBjYXNl
IFZLX1JJR0hUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJSaWdodCIpOworICAgIGNhc2UgVktf
U0NST0xMOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJTY3JvbGwiKTsKKyAgICBjYXNlIFZLX1NF
TEVDVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiU2VsZWN0Iik7CisgICAgY2FzZSBWS19VUDoK
KyAgICAgICAgcmV0dXJuIFN0cmluZygiVXAiKTsKKyAgICBjYXNlIFZLX0RFTEVURToKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygiVSswMDdGIik7IC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVj
b21lcyBVKzAwN0YuCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOworICAgIH0KK30KKworV2ViTW91c2VF
dmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgZGlkQWN0aXZhdGVX
ZWJWaWV3KQoreworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGU7CisgICAgV2ViTW91c2VFdmVudDo6
QnV0dG9uIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgIHN3aXRjaCAobWVz
c2FnZSkgeworICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6
Ok1vdXNlTW92ZTsKKyAgICAgICAgaWYgKHdQYXJhbSAmIE1LX0xCVVRUT04pCisgICAgICAgICAg
ICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmICh3
UGFyYW0gJiBNS19NQlVUVE9OKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6
TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmICh3UGFyYW0gJiBNS19SQlVUVE9OKQorICAg
ICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV01fTU9VU0VMRUFWRToKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpN
b3VzZU1vdmU7CisgICAgICAgIGlmICh3UGFyYW0gJiBNS19MQlVUVE9OKQorICAgICAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAod1Bh
cmFtICYgTUtfTUJVVFRPTikKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAod1BhcmFtICYgTUtfUkJVVFRPTikKKyAgICAg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworCisgICAgICAgIC8v
IFNldCB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiAocmVsYXRpdmUgdG8gdGhlIGNsaWVudCBh
cmVhIG9mIHRoZQorICAgICAgICAvLyBjdXJyZW50IHdpbmRvdykgc2luY2Ugbm9uZSBpcyBzcGVj
aWZpZWQgZm9yIHRoaXMgZXZlbnQuCisgICAgICAgIGxQYXJhbSA9IHJlbGF0aXZlQ3Vyc29yUG9z
aXRpb24oaFduZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTEJVVFRPTkRPV046Cisg
ICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNl
RG93bjsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX01CVVRUT05E
QkxDTEs6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VEb3duOworICAgICAgICBidXR0
b24gPSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgorICAgICAgICB0
eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTEJVVFRPTlVQOgor
ICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIGJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTUJVVFRP
TlVQOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIGJ1dHRvbiA9
IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
TV9SQlVUVE9OVVA6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB0eXBlID0g
V2ViRXZlbnQ6OktleURvd247CisgICAgfQorCisgICAgUE9JTlQgcG9zaXRpb24gPSBwb2ludChs
UGFyYW0pOworICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgOjpDbGll
bnRUb1NjcmVlbihoV25kLCAmZ2xvYmFsUG9zaXRpb24pOworCisgICAgZG91YmxlIHRpbWVzdGFt
cCA9IDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMTsgLy8gOjpHZXRUaWNrQ291bnQgcmV0dXJucyBt
aWxsaXNlY29uZHMgKENocm9tZSB1c2VzIEdldE1lc3NhZ2VUaW1lKCkgLyAxMDAwLjApCisKKyAg
ICBpbnQgY2xpY2tDb3VudCA9IFdlYktpdDo6Y2xpY2tDb3VudCh0eXBlLCBidXR0b24sIHBvc2l0
aW9uLCB0aW1lc3RhbXApOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9k
aWZpZXJzRm9yRXZlbnQod1BhcmFtKTsKKworICAgIHJldHVybiBXZWJNb3VzZUV2ZW50KHR5cGUs
IGJ1dHRvbiwgMCwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAwLCAwLCAwLCBjbGlja0NvdW50
LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSwgZGlkQWN0aXZhdGVXZWJWaWV3KTsKK30KKwor
V2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAg
Ly8gVGFrZW4gZnJvbSBXZWJDb3JlCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGNTY3JvbGxiYXJQ
aXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4wZjsKKworICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9u
ID0gcG9pbnQobFBhcmFtKTsKKyAgICBQT0lOVCBwb3NpdGlvbiA9IGdsb2JhbFBvc2l0aW9uOwor
ICAgIDo6U2NyZWVuVG9DbGllbnQoaFduZCwgJnBvc2l0aW9uKTsKKworICAgIFdlYldoZWVsRXZl
bnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5ICA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4
ZWxXaGVlbEV2ZW50OworCisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBtb2Rp
ZmllcnNGb3JFdmVudCh3UGFyYW0pOworCisgICAgaW50IGRlbHRhWCA9IDA7CisgICAgaW50IGRl
bHRhWSA9IDA7CisgICAgaW50IHdoZWVsVGlja3NYID0gMDsKKyAgICBpbnQgd2hlZWxUaWNrc1kg
PSAwOworCisgICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJhbSkg
LyBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOworICAgIGJvb2wgaXNNb3VzZUhXaGVl
bCA9IChtZXNzYWdlID09IFdNX01PVVNFSFdIRUVMKTsKKyAgICBpZiAoaXNNb3VzZUhXaGVlbCkg
eworICAgICAgICB3aGVlbFRpY2tzWCA9IGRlbHRhOworICAgICAgICB3aGVlbFRpY2tzWSA9IDA7
CisgICAgICAgIGRlbHRhID0gLWRlbHRhOworICAgIH0gZWxzZSB7CisgICAgICAgIHdoZWVsVGlj
a3NYID0gMDsKKyAgICAgICAgd2hlZWxUaWNrc1kgPSBkZWx0YTsKKyAgICB9CisgICAgaWYgKGlz
TW91c2VIV2hlZWwgfHwgKG1vZGlmaWVycyAmIFdlYkV2ZW50OjpTaGlmdEtleSkpIHsKKyAgICAg
ICAgZGVsdGFYID0gZGVsdGEgKiBzdGF0aWNfY2FzdDxmbG9hdD4oaG9yaXpvbnRhbFNjcm9sbENo
YXJzKCkpICogY1Njcm9sbGJhclBpeGVsc1BlckxpbmU7CisgICAgICAgIGRlbHRhWSA9IDA7Cisg
ICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZl
bnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgZGVsdGFZID0g
ZGVsdGE7CisgICAgICAgIGludCB2ZXJ0aWNhbE11bHRpcGxpZXIgPSB2ZXJ0aWNhbFNjcm9sbExp
bmVzKCk7CisgICAgICAgIGlmICh2ZXJ0aWNhbE11bHRpcGxpZXIgPT0gV0hFRUxfUEFHRVNDUk9M
TCkKKyAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQYWdl
V2hlZWxFdmVudDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBncmFudWxhcml0eSA9IFdl
YldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworICAgICAgICAgICAgZGVsdGFZ
ICo9IHN0YXRpY19jYXN0PGZsb2F0Pih2ZXJ0aWNhbE11bHRpcGxpZXIpICogY1Njcm9sbGJhclBp
eGVsc1BlckxpbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVu
dChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgRmxvYXRTaXplKGRl
bHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51
bGFyaXR5LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK1dlYktleWJvYXJkRXZl
bnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQgaHduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQoreworICAgIFdlYkV2ZW50
OjpUeXBlIHR5cGUgICAgICAgICAgICAgPSBrZXlib2FyZEV2ZW50VHlwZUZvckV2ZW50KG1lc3Nh
Z2UpOworICAgIFN0cmluZyB0ZXh0ICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0RnJvbUV2ZW50
KHdwYXJhbSwgdHlwZSk7CisgICAgU3RyaW5nIHVubW9kaWZpZWRUZXh0ICAgICAgICAgICA9IHVu
bW9kaWZpZWRUZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CisgICAgU3RyaW5nIGtleUlkZW50
aWZpZXIgICAgICAgICAgICA9IGtleUlkZW50aWZpZXJGcm9tRXZlbnQod3BhcmFtLCB0eXBlKTsK
KyAgICBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih3
cGFyYW0pOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHdwYXJhbSk7CisgICAgaW50IG1hY0NoYXJDb2RlICAgICAgICAgICAgICAgICA9IDA7
CisgICAgYm9vbCBhdXRvUmVwZWF0ICAgICAgICAgICAgICAgICA9IEhJV09SRChscGFyYW0pICYg
S0ZfUkVQRUFUOworICAgIGJvb2wgaXNLZXlwYWQgICAgICAgICAgICAgICAgICAgPSBpc0tleXBh
ZEV2ZW50KHdwYXJhbSwgbHBhcmFtLCB0eXBlKTsKKyAgICBib29sIGlzU3lzdGVtS2V5ICAgICAg
ICAgICAgICAgID0gaXNTeXN0ZW1LZXlFdmVudChtZXNzYWdlKTsKKyAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyAgID0gbW9kaWZpZXJzRm9yQ3VycmVudEtleVN0YXRlKCk7CisKKyAg
ICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwga2V5
SWRlbnRpZmllciwgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwg
bWFjQ2hhckNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBpc1N5c3RlbUtleSwgbW9kaWZpZXJz
LCBXYWxsVGltZTo6bm93KCkpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK1dlYlRv
dWNoRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJUb3VjaEV2ZW50KGNvbnN0IEdka0V2
ZW50KiBldmVudCwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2ludD4mJiB0b3VjaFBvaW50cykK
K3sKKyAgICByZXR1cm4gV2ViVG91Y2hFdmVudCgpOworfQorI2VuZGlmIC8vIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
d2luL1dlYkV2ZW50RmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYWQ0N2VjMmEyZDBjOGQ4NmYyNTU1
Y2M3N2QwMWFjYTk5ZTNjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJFdmVudC5oIgorCisjaW5jbHVkZSA8d2luZG93
cy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KEhXTkQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgZGlkQWN0aXZhdGVXZWJWaWV3KTsK
KyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KEhXTkQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOworICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNy
ZWF0ZVdlYktleWJvYXJkRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBzdGF0aWMgV2ViVG91Y2hFdmVudCBjcmVh
dGVXZWJUb3VjaEV2ZW50KCk7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334862</attachid>
            <date>2018-03-01 15:42:23 -0800</date>
            <delta_ts>2018-04-08 23:26:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183043.diff</filename>
            <type>text/plain</type>
            <size>33934</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMWI0MmQzNmI5ZGEuLmVlYTJmMzEyYTI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQ2IEBACisyMDE4LTAzLTAxICBZb3VzdWtlIEtpbW90byA8eW91c3VrZS5raW1vdG9Ac29ueS5j
b20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBBZGQgV2ViS2l0IFNoYXJlZC93aW4gZXZlbnQgZmls
ZXMgZm9yIHdpbmNhaXJvIHdlYmtpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50OjpuYXRpdmVFdmVudCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYk1v
dXNlRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViTW91c2VFdmVudDo6bmF0aXZl
RXZlbnQgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJUb3VjaEV2ZW50Lmg6Cisg
ICAgICAgICogU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6
TmF0aXZlV2ViV2hlZWxFdmVudDo6bmF0aXZlRXZlbnQgY29uc3QpOgorICAgICAgICAqIFNoYXJl
ZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6TmF0
aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICog
U2hhcmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oLgorICAgICAgICAoV2ViS2l0OjpO
YXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3VzZUV2ZW50KToKKyAgICAgICAgKiBTaGFy
ZWQvd2luL05hdGl2ZVdlYlRvdWNoRXZlbnRXaW4uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9OYXRpdmVXZWJUb3VjaEV2ZW50LmguCisgICAgICAgIChXZWJLaXQ6Ok5hdGl2
ZVdlYlRvdWNoRXZlbnQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC93
aW4vTmF0aXZlV2ViV2hlZWxFdmVudFdpbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2Vi
V2hlZWxFdmVudDo6TmF0aXZlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL3dpbi9X
ZWJFdmVudEZhY3RvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6cmVsYXRpdmVDdXJz
b3JQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnBvaW50KToKKyAgICAgICAgKFdlYktpdDo6
aG9yaXpvbnRhbFNjcm9sbENoYXJzKToKKyAgICAgICAgKFdlYktpdDo6dmVydGljYWxTY3JvbGxM
aW5lcyk6CisgICAgICAgIChXZWJLaXQ6OmNsaWNrQ291bnQpOgorICAgICAgICAoV2ViS2l0Ojpt
b2RpZmllcnNGb3JFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyc0ZvckN1cnJlbnRL
ZXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmtleWJvYXJkRXZlbnRUeXBlRm9yRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0Ojppc1N5c3RlbUtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6aXNL
ZXlwYWRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OnRleHRGcm9tRXZlbnQpOgorICAgICAgICAo
V2ViS2l0Ojp1bm1vZGlmaWVkVGV4dEZyb21FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmtleUlk
ZW50aWZpZXJGcm9tRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNy
ZWF0ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYlRvdWNoRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0
b3J5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZl
bnQuaC4KKwogMjAxOC0wMy0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ3Jhc2ggd2hlbiB1cGRhdGluZyBjYWNoZSBlbnRyeSBhZnRlciB2YWxpZGF0aW9u
IGluIGFwcHMgdGhhdCB1c2VzIGNsYXNzIEEgZmlsZSBwcm90ZWN0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdp
bi5jbWFrZQppbmRleCBkZmYwMWJkNzY0Ni4uNDEzOThmODI2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdp
bi5jbWFrZQpAQCAtMTksNiArMTksMTIgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBQbGF0Zm9ybS93aW4vTW9kdWxlV2luLmNwcAogICAgIFBsYXRmb3JtL3dpbi9TaGFyZWRNZW1v
cnlXaW4uY3BwCiAKKyAgICBTaGFyZWQvd2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3Bw
CisgICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcAorICAgIFNoYXJlZC93
aW4vTmF0aXZlV2ViVG91Y2hFdmVudFdpbi5jcHAKKyAgICBTaGFyZWQvd2luL05hdGl2ZVdlYldo
ZWVsRXZlbnRXaW4uY3BwCisgICAgU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwCisKICAg
ICBTdG9yYWdlUHJvY2Vzcy93aW4vU3RvcmFnZVByb2Nlc3NNYWluV2luLmNwcAogCiAgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXggYWE2ZDM4ZmEx
OTguLjY0YThmMzE0NTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTUsNiArNTYsMTAgQEAgT0JKQ19DTEFTUyBXZWJFdmVudDsKIHN0cnVjdCB3
cGVfaW5wdXRfa2V5Ym9hcmRfZXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQgOiBwdWJsaWMgV2ViS2V5Ym9hcmRFdmVudCB7CkBAIC02
OCw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KDo6V2ViRXZl
bnQgKik7CiAjZWxpZiBQTEFURk9STShXUEUpCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChz
dHJ1Y3Qgd3BlX2lucHV0X2tleWJvYXJkX2V2ZW50Kik7CisjZWxpZiBQTEFURk9STShXSU4pCisg
ICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBB
UkFNKTsKICNlbmRpZgogCiAjaWYgVVNFKEFQUEtJVCkKQEAgLTc4LDYgKzg1LDggQEAgcHVibGlj
OgogICAgIGJvb2wgaXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb247IH0KICNlbGlmIFBMQVRGT1JNKElPUykKICAgICA6Oldl
YkV2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7
IH0KKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBjb25zdCBNU0cqIG5hdGl2ZUV2ZW50KCkgY29u
c3QgeyByZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0KICNlbHNlCiAgICAgY29uc3Qgdm9pZCogbmF0
aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKQEAgLTkxLDYgKzEw
MCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Zha2VFdmVudEZvckNvbXBvc2l0aW9uOwogI2Vs
aWYgUExBVEZPUk0oSU9TKQogICAgIFJldGFpblB0cjw6OldlYkV2ZW50PiBtX25hdGl2ZUV2ZW50
OworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIE1TRyBtX25hdGl2ZUV2ZW50OwogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKaW5kZXggMWEx
ZDcwMGMxMjAuLjk5YzU5ZDI5NzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9O
YXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2Vi
TW91c2VFdmVudC5oCkBAIC00Miw2ICs0MiwxMCBAQCB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBH
ZGtFdmVudDsKIHN0cnVjdCB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudDsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgTmF0aXZlV2ViTW91c2VFdmVudCA6IHB1YmxpYyBXZWJNb3VzZUV2
ZW50IHsKQEAgLTUzLDEyICs1NywxNiBAQCBwdWJsaWM6CiAgICAgTmF0aXZlV2ViTW91c2VFdmVu
dChHZGtFdmVudCosIGludCk7CiAjZWxpZiBQTEFURk9STShXUEUpCiAgICAgTmF0aXZlV2ViTW91
c2VFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3BvaW50ZXJfZXZlbnQqLCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3Rvcik7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgTmF0aXZlV2ViTW91c2VFdmVudChI
V05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sKTsKICNlbmRpZgogCiAjaWYg
VVNFKEFQUEtJVCkKICAgICBOU0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmF0aXZlRXZlbnQuZ2V0KCk7IH0KICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBjb25zdCBHZGtF
dmVudCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUV2ZW50LmdldCgpOyB9
CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgY29uc3QgTVNHKiBuYXRpdmVFdmVudCgpIGNvbnN0
IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9CiAjZWxzZQogICAgIGNvbnN0IHZvaWQqIG5hdGl2
ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCkBAIC02OCw2ICs3Niw4
IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fbmF0aXZlRXZlbnQ7CiAjZWxp
ZiBQTEFURk9STShHVEspCiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gbV9uYXRpdmVFdmVudDsK
KyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBNU0cgbV9uYXRpdmVFdmVudDsKICNlbmRpZgogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViVG91Y2hFdmVudC5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViVG91Y2hFdmVudC5oCmluZGV4IDgyZjNi
MjRkNDIzLi5hYzI2YWUxNjljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0
aXZlV2ViVG91Y2hFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYlRv
dWNoRXZlbnQuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShXUEUp
CiAgICAgTmF0aXZlV2ViVG91Y2hFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50Kiwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91
Y2hfZXZlbnRfcmF3KiBuYXRpdmVGYWxsYmFja1RvdWNoUG9pbnQoKSBjb25zdCB7IHJldHVybiAm
bV9mYWxsYmFja1RvdWNoUG9pbnQ7IH0KKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBOYXRpdmVX
ZWJUb3VjaEV2ZW50KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCA4OGMzZWI2OGRhZC4uOGJkZjVlNzAwOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKQEAgLTQyLDYgKzQy
LDEwIEBAIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owogc3RydWN0IHdwZV9pbnB1
dF9heGlzX2V2ZW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOYXRpdmVXZWJX
aGVlbEV2ZW50IDogcHVibGljIFdlYldoZWVsRXZlbnQgewpAQCAtNTQsMTIgKzU4LDE2IEBAIHB1
YmxpYzoKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEdka0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6
UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVudHVtUGhhc2UpOwogI2VsaWYgUExBVEZP
Uk0oV1BFKQogICAgIE5hdGl2ZVdlYldoZWVsRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2
ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAg
IE5hdGl2ZVdlYldoZWVsRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7
CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQpCiAgICAgTlNFdmVudCogbmF0aXZlRXZlbnQoKSBj
b25zdCB7IHJldHVybiBtX25hdGl2ZUV2ZW50LmdldCgpOyB9CiAjZWxpZiBQTEFURk9STShHVEsp
CiAgICAgR2RrRXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVu
dC5nZXQoKTsgfQorI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIGNvbnN0IE1TRyogbmF0aXZlRXZl
bnQoKSBjb25zdCB7IHJldHVybiAmbV9uYXRpdmVFdmVudDsgfQogI2Vsc2UKICAgICBjb25zdCB2
b2lkKiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgpAQCAt
NjksNiArNzcsOCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxOU0V2ZW50PiBtX25hdGl2ZUV2
ZW50OwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IG1fbmF0
aXZlRXZlbnQ7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgTVNHIG1fbmF0aXZlRXZlbnQ7CiAj
ZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYjVmMmNhNGI5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJv
YXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05hdGl2ZVdlYktleWJvYXJk
RXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCisgICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChod25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSkpCisgICAgLCBtX25hdGl2ZUV2ZW50KCkKK3sKKyAgICBtX25hdGl2ZUV2ZW50Lmh3
bmQgPSBod25kOworICAgIG1fbmF0aXZlRXZlbnQubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgbV9u
YXRpdmVFdmVudC53UGFyYW0gPSB3UGFyYW07CisgICAgbV9uYXRpdmVFdmVudC5sUGFyYW0gPSBs
UGFyYW07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvd2luL05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43Y2RiZmI5Y2U2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcApAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TmF0aXZlV2ViTW91c2VFdmVudC5oIgorCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitOYXRpdmVXZWJNb3VzZUV2ZW50OjpOYXRpdmVXZWJNb3Vz
ZUV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
cmFtLCBib29sIGRpZEFjdGl2YXRlV2ViVmlldykKKyAgICA6IFdlYk1vdXNlRXZlbnQoV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtLCBkaWRBY3RpdmF0ZVdlYlZpZXcpKQorICAgICwgbV9uYXRpdmVFdmVudCgpCit7CisgICAg
bV9uYXRpdmVFdmVudC5od25kID0gaHduZDsKKyAgICBtX25hdGl2ZUV2ZW50Lm1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIG1fbmF0aXZlRXZlbnQud1BhcmFtID0gd1BhcmFtOworICAgIG1fbmF0aXZl
RXZlbnQubFBhcmFtID0gbFBhcmFtOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWRhYjlmMmIzZmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViVG91Y2hFdmVu
dFdpbi5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYlRvdWNoRXZlbnQuaCIKKworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK05hdGl2ZVdlYlRvdWNoRXZlbnQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQoKQorICAg
IDogV2ViVG91Y2hFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYlRvdWNoRXZlbnQoKSkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL05hdGl2ZVdlYldo
ZWVsRXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL05hdGl2ZVdlYldoZWVs
RXZlbnRXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzAw
NjlkY2JlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRp
dmVXZWJXaGVlbEV2ZW50V2luLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgorCisj
aW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitOYXRp
dmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorICAgIDogV2ViV2hlZWxFdmVudChX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoaHduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pKQorICAgICwgbV9uYXRpdmVFdmVudCgpCit7CisgICAgbV9uYXRpdmVFdmVudC5o
d25kID0gaHduZDsKKyAgICBtX25hdGl2ZUV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIG1f
bmF0aXZlRXZlbnQud1BhcmFtID0gd1BhcmFtOworICAgIG1fbmF0aXZlRXZlbnQubFBhcmFtID0g
bFBhcmFtOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjJlMTdiMjNhNDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxiYXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlib2FyZENv
ZGVzLmg+CisjaW5jbHVkZSA8d2luZG93c3guaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKwor
c3RhdGljIGlubGluZSBMUEFSQU0gcmVsYXRpdmVDdXJzb3JQb3NpdGlvbihIV05EIGh3bmQpCit7
CisgICAgUE9JTlQgcG9pbnQgPSB7IC0xLCAtMSB9OworICAgIDo6R2V0Q3Vyc29yUG9zKCZwb2lu
dCk7CisgICAgOjpTY3JlZW5Ub0NsaWVudChod25kLCAmcG9pbnQpOworICAgIHJldHVybiBNQUtF
TFBBUkFNKHBvaW50LngsIHBvaW50LnkpOworfQorCitzdGF0aWMgaW5saW5lIFBPSU5UIHBvaW50
KExQQVJBTSBsUGFyYW0pCit7CisgICAgUE9JTlQgcG9pbnQgPSB7IEdFVF9YX0xQQVJBTShsUGFy
YW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKSB9OworICAgIHJldHVybiBwb2ludDsKK30KKworc3Rh
dGljIGludCBob3Jpem9udGFsU2Nyb2xsQ2hhcnMoKQoreworICAgIHN0YXRpYyBVTE9ORyBzY3Jv
bGxDaGFyczsKKyAgICBpZiAoIXNjcm9sbENoYXJzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZv
KFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTLCAwLCAmc2Nyb2xsQ2hhcnMsIDApKQorICAgICAgICBz
Y3JvbGxDaGFycyA9IDE7CisgICAgcmV0dXJuIHNjcm9sbENoYXJzOworfQorCitzdGF0aWMgaW50
IHZlcnRpY2FsU2Nyb2xsTGluZXMoKQoreworICAgIHN0YXRpYyBVTE9ORyBzY3JvbGxMaW5lczsK
KyAgICBpZiAoIXNjcm9sbExpbmVzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRX
SEVFTFNDUk9MTExJTkVTLCAwLCAmc2Nyb2xsTGluZXMsIDApKQorICAgICAgICBzY3JvbGxMaW5l
cyA9IDM7CisgICAgcmV0dXJuIHNjcm9sbExpbmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBj
bGlja0NvdW50KFdlYkV2ZW50OjpUeXBlIHR5cGUsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0
b24sIGNvbnN0IFBPSU5UJiBwb3NpdGlvbiwgZG91YmxlIHRpbWVTdGFtcFNlY29uZHMpCit7Cisg
ICAgc3RhdGljIGludCBnTGFzdENsaWNrQ291bnQ7CisgICAgc3RhdGljIGRvdWJsZSBnTGFzdENs
aWNrVGltZTsKKyAgICBzdGF0aWMgUE9JTlQgbGFzdENsaWNrUG9zaXRpb247CisgICAgc3RhdGlj
IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBsYXN0Q2xpY2tCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpM
ZWZ0QnV0dG9uOworCisgICAgYm9vbCBjYW5jZWxQcmV2aW91c0NsaWNrID0gKGFicyhsYXN0Q2xp
Y2tQb3NpdGlvbi54IC0gcG9zaXRpb24ueCkgPiAoOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYRE9V
QkxFQ0xLKSAvIDIpKQorICAgICAgICB8fCAoYWJzKGxhc3RDbGlja1Bvc2l0aW9uLnkgLSBwb3Np
dGlvbi55KSA+ICg6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1lET1VCTEVDTEspIC8gMikpCisgICAg
ICAgIHx8ICgodGltZVN0YW1wU2Vjb25kcyAtIGdMYXN0Q2xpY2tUaW1lKSAqIDEwMDAuMCA+IDo6
R2V0RG91YmxlQ2xpY2tUaW1lKCkpOworCisgICAgaWYgKHR5cGUgPT0gV2ViRXZlbnQ6Ok1vdXNl
RG93bikgeworICAgICAgICBpZiAoIWNhbmNlbFByZXZpb3VzQ2xpY2sgJiYgKGJ1dHRvbiA9PSBs
YXN0Q2xpY2tCdXR0b24pKQorICAgICAgICAgICAgKytnTGFzdENsaWNrQ291bnQ7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgZ0xhc3RDbGlja0NvdW50ID0gMTsKKyAgICAgICAgICAgIGxh
c3RDbGlja1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgZ0xhc3RDbGlj
a1RpbWUgPSB0aW1lU3RhbXBTZWNvbmRzOworICAgICAgICBsYXN0Q2xpY2tCdXR0b24gPSBidXR0
b247CisgICAgfSBlbHNlIGlmICh0eXBlID09IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKKyAgICAg
ICAgaWYgKGNhbmNlbFByZXZpb3VzQ2xpY2spIHsKKyAgICAgICAgICAgIGdMYXN0Q2xpY2tDb3Vu
dCA9IDA7CisgICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvbi54ID0gMDsKKyAgICAgICAgICAg
IGxhc3RDbGlja1Bvc2l0aW9uLnkgPSAwOworICAgICAgICAgICAgZ0xhc3RDbGlja1RpbWUgPSAw
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdMYXN0Q2xpY2tDb3VudDsKK30KKwor
c3RhdGljIGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckV2ZW50KFdQQVJB
TSB3cGFyYW0pCit7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAod3BhcmFt
ICYgTUtfQ09OVFJPTCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5
OworICAgIGlmICh3cGFyYW0gJiBNS19TSElGVCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2
ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoOjpHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkK
KyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpBbHRLZXk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoKQorewor
ICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKDo6R2V0S2V5U3RhdGUoVktfQ09O
VFJPTCkgJiAweDgwMDApCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJvbEtl
eTsKKyAgICBpZiAoOjpHZXRLZXlTdGF0ZShWS19TSElGVCkgJiAweDgwMDApCisgICAgICAgIG1v
ZGlmaWVycyB8PSBXZWJFdmVudDo6U2hpZnRLZXk7CisgICAgaWYgKDo6R2V0S2V5U3RhdGUoVktf
TUVOVSkgJiAweDgwMDApCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5Owor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpOwor
fQorCitzdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpUeXBlIGtleWJvYXJkRXZlbnRUeXBlRm9yRXZl
bnQoVUlOVCBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01f
U1lTS0VZRE9XTjoKKyAgICBjYXNlIFdNX0tFWURPV046CisgICAgICAgIHJldHVybiBXZWJFdmVu
dDo6UmF3S2V5RG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAg
ICBjYXNlIFdNX0tFWVVQOgorICAgICAgICByZXR1cm4gV2ViRXZlbnQ6OktleVVwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX0lNRV9DSEFSOgorICAgIGNhc2UgV01fU1lTQ0hBUjoKKyAg
ICBjYXNlIFdNX0NIQVI6CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6Q2hhcjsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBXZWJFdmVudDo6Q2hhcjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1N5c3RlbUtleUV2ZW50KFVJTlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2Up
IHsKKyAgICBjYXNlIFdNX1NZU0tFWURPV046CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICBj
YXNlIFdNX1NZU0NIQVI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzS2V5cGFkRXZlbnQo
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAg
ICBpZiAodHlwZSAhPSBXZWJFdmVudDo6UmF3S2V5RG93biAmJiB0eXBlICE9IFdlYkV2ZW50OjpL
ZXlVcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh3UGFyYW0pIHsKKyAg
ICBjYXNlIFZLX05VTUxPQ0s6CisgICAgY2FzZSBWS19OVU1QQUQwOgorICAgIGNhc2UgVktfTlVN
UEFEMToKKyAgICBjYXNlIFZLX05VTVBBRDI6CisgICAgY2FzZSBWS19OVU1QQUQzOgorICAgIGNh
c2UgVktfTlVNUEFENDoKKyAgICBjYXNlIFZLX05VTVBBRDU6CisgICAgY2FzZSBWS19OVU1QQUQ2
OgorICAgIGNhc2UgVktfTlVNUEFENzoKKyAgICBjYXNlIFZLX05VTVBBRDg6CisgICAgY2FzZSBW
S19OVU1QQUQ5OgorICAgIGNhc2UgVktfTVVMVElQTFk6CisgICAgY2FzZSBWS19BREQ6CisgICAg
Y2FzZSBWS19TRVBBUkFUT1I6CisgICAgY2FzZSBWS19TVUJUUkFDVDoKKyAgICBjYXNlIFZLX0RF
Q0lNQUw6CisgICAgY2FzZSBWS19ESVZJREU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgVktfUkVUVVJOOgorICAgICAgICByZXR1cm4gSElXT1JEKGxQYXJhbSkgJiBLRl9FWFRFTkRF
RDsKKyAgICBjYXNlIFZLX0lOU0VSVDoKKyAgICBjYXNlIFZLX0RFTEVURToKKyAgICBjYXNlIFZL
X1BSSU9SOgorICAgIGNhc2UgVktfTkVYVDoKKyAgICBjYXNlIFZLX0VORDoKKyAgICBjYXNlIFZL
X0hPTUU6CisgICAgY2FzZSBWS19MRUZUOgorICAgIGNhc2UgVktfVVA6CisgICAgY2FzZSBWS19S
SUdIVDoKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHJldHVybiAhKEhJV09SRChsUGFyYW0p
ICYgS0ZfRVhURU5ERUQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBTdHJpbmcgdGV4dEZyb21FdmVudChXUEFSQU0gd3BhcmFtLCBXZWJF
dmVudDo6VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlICE9IFdlYkV2ZW50OjpDaGFyKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBVQ2hhciBjID0gc3RhdGljX2Nhc3Q8VUNoYXI+
KHdwYXJhbSk7CisgICAgcmV0dXJuIFN0cmluZygmYywgMSk7Cit9CisKK3N0YXRpYyBTdHJpbmcg
dW5tb2RpZmllZFRleHRGcm9tRXZlbnQoV1BBUkFNIHdwYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlw
ZSkKK3sKKyAgICBpZiAodHlwZSAhPSBXZWJFdmVudDo6Q2hhcikKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgVUNoYXIgYyA9IHN0YXRpY19jYXN0PFVDaGFyPih3cGFyYW0pOworICAg
IHJldHVybiBTdHJpbmcoJmMsIDEpOworfQorCitzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJG
cm9tRXZlbnQoV1BBUkFNIHdwYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAo
dHlwZSA9PSBXZWJFdmVudDo6Q2hhcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
dW5zaWduZWQgc2hvcnQga2V5Q29kZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih3cGFy
YW0pOworICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAgIGNhc2UgVktfTUVOVToKKyAgICAgICAg
cmV0dXJuIFN0cmluZygiQWx0Iik7CisgICAgY2FzZSBWS19DT05UUk9MOgorICAgICAgICByZXR1
cm4gU3RyaW5nKCJDb250cm9sIik7CisgICAgY2FzZSBWS19TSElGVDoKKyAgICAgICAgcmV0dXJu
IFN0cmluZygiU2hpZnQiKTsKKyAgICBjYXNlIFZLX0NBUElUQUw6CisgICAgICAgIHJldHVybiBT
dHJpbmcoIkNhcHNMb2NrIik7CisgICAgY2FzZSBWS19MV0lOOgorICAgIGNhc2UgVktfUldJTjoK
KyAgICAgICAgcmV0dXJuIFN0cmluZygiV2luIik7CisgICAgY2FzZSBWS19DTEVBUjoKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygiQ2xlYXIiKTsKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHJl
dHVybiBTdHJpbmcoIkRvd24iKTsKKyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgcmV0dXJuIFN0
cmluZygiRW5kIik7CisgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgIHJldHVybiBTdHJpbmco
IkVudGVyIik7CisgICAgY2FzZSBWS19FWEVDVVRFOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJF
eGVjdXRlIik7CisgICAgY2FzZSBWS19GMToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjEiKTsK
KyAgICBjYXNlIFZLX0YyOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMiIpOworICAgIGNhc2Ug
VktfRjM6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYzIik7CisgICAgY2FzZSBWS19GNDoKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygiRjQiKTsKKyAgICBjYXNlIFZLX0Y1OgorICAgICAgICByZXR1
cm4gU3RyaW5nKCJGNSIpOworICAgIGNhc2UgVktfRjY6CisgICAgICAgIHJldHVybiBTdHJpbmco
IkY2Iik7CisgICAgY2FzZSBWS19GNzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjciKTsKKyAg
ICBjYXNlIFZLX0Y4OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGOCIpOworICAgIGNhc2UgVktf
Rjk6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkY5Iik7CisgICAgY2FzZSBWS19GMTA6CisgICAg
ICAgIHJldHVybiBTdHJpbmcoIkYxMSIpOworICAgIGNhc2UgVktfRjEyOgorICAgICAgICByZXR1
cm4gU3RyaW5nKCJGMTIiKTsKKyAgICBjYXNlIFZLX0YxMzoKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygiRjEzIik7CisgICAgY2FzZSBWS19GMTQ6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYxNCIp
OworICAgIGNhc2UgVktfRjE1OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTUiKTsKKyAgICBj
YXNlIFZLX0YxNjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjE2Iik7CisgICAgY2FzZSBWS19G
MTc6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYxNyIpOworICAgIGNhc2UgVktfRjE4OgorICAg
ICAgICByZXR1cm4gU3RyaW5nKCJGMTgiKTsKKyAgICBjYXNlIFZLX0YxOToKKyAgICAgICAgcmV0
dXJuIFN0cmluZygiRjE5Iik7CisgICAgY2FzZSBWS19GMjA6CisgICAgICAgIHJldHVybiBTdHJp
bmcoIkYyMCIpOworICAgIGNhc2UgVktfRjIxOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMjEi
KTsKKyAgICBjYXNlIFZLX0YyMjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjIyIik7CisgICAg
Y2FzZSBWS19GMjM6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYyMyIpOworICAgIGNhc2UgVktf
RjI0OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMjQiKTsKKyAgICBjYXNlIFZLX0hFTFA6Cisg
ICAgICAgIHJldHVybiBTdHJpbmcoIkhlbHAiKTsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAg
IHJldHVybiBTdHJpbmcoIkhvbWUiKTsKKyAgICBjYXNlIFZLX0lOU0VSVDoKKyAgICAgICAgcmV0
dXJuIFN0cmluZygiSW5zZXJ0Iik7CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICByZXR1cm4g
U3RyaW5nKCJMZWZ0Iik7CisgICAgY2FzZSBWS19ORVhUOgorICAgICAgICByZXR1cm4gU3RyaW5n
KCJQYWdlRG93biIpOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIHJldHVybiBTdHJpbmco
IlBhZ2VVcCIpOworICAgIGNhc2UgVktfUEFVU0U6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlBh
dXNlIik7CisgICAgY2FzZSBWS19TTkFQU0hPVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiUHJp
bnRTY3JlZW4iKTsKKyAgICBjYXNlIFZLX1JJR0hUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJS
aWdodCIpOworICAgIGNhc2UgVktfU0NST0xMOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJTY3Jv
bGwiKTsKKyAgICBjYXNlIFZLX1NFTEVDVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiU2VsZWN0
Iik7CisgICAgY2FzZSBWS19VUDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiVXAiKTsKKyAgICBj
YXNlIFZLX0RFTEVURToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiVSswMDdGIik7IC8vIFN0YW5k
YXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwN0YuCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOwor
ICAgIH0KK30KKworV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNl
RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0sIGJvb2wgZGlkQWN0aXZhdGVXZWJWaWV3KQoreworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGU7
CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0
dG9uOworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAg
ICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAgaWYgKHdQYXJhbSAmIE1L
X0xCVVRUT04pCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9u
OworICAgICAgICBlbHNlIGlmICh3UGFyYW0gJiBNS19NQlVUVE9OKQorICAgICAgICAgICAgYnV0
dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmICh3UGFy
YW0gJiBNS19SQlVUVE9OKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6Umln
aHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTU9VU0VMRUFWRToKKyAgICAg
ICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZU1vdmU7CisgICAgICAgIGlmICh3UGFyYW0gJiBNS19M
QlVUVE9OKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsK
KyAgICAgICAgZWxzZSBpZiAod1BhcmFtICYgTUtfTUJVVFRPTikKKyAgICAgICAgICAgIGJ1dHRv
biA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAod1BhcmFt
ICYgTUtfUkJVVFRPTikKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0
QnV0dG9uOworCisgICAgICAgIC8vIFNldCB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiAocmVs
YXRpdmUgdG8gdGhlIGNsaWVudCBhcmVhIG9mIHRoZQorICAgICAgICAvLyBjdXJyZW50IHdpbmRv
dykgc2luY2Ugbm9uZSBpcyBzcGVjaWZpZWQgZm9yIHRoaXMgZXZlbnQuCisgICAgICAgIGxQYXJh
bSA9IHJlbGF0aXZlQ3Vyc29yUG9zaXRpb24oaFduZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fTEJVVFRPTkRPV046CisgICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgorICAgICAgICB0
eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6TGVmdEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoK
KyAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91
c2VEb3duOworICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9SQlVU
VE9OREJMQ0xLOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fTEJVVFRPTlVQOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7Cisg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fTUJVVFRPTlVQOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNl
VXA7CisgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9SQlVUVE9OVVA6CisgICAgICAgIHR5cGUgPSBXZWJFdmVu
dDo6TW91c2VVcDsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB0eXBlID0gV2ViRXZlbnQ6OktleURvd247CisgICAgfQorCisgICAgUE9J
TlQgcG9zaXRpb24gPSBwb2ludChsUGFyYW0pOworICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9uID0g
cG9zaXRpb247CisgICAgOjpDbGllbnRUb1NjcmVlbihoV25kLCAmZ2xvYmFsUG9zaXRpb24pOwor
CisgICAgZG91YmxlIHRpbWVzdGFtcCA9IDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMTsgLy8gOjpH
ZXRUaWNrQ291bnQgcmV0dXJucyBtaWxsaXNlY29uZHMgKENocm9tZSB1c2VzIEdldE1lc3NhZ2VU
aW1lKCkgLyAxMDAwLjApCisKKyAgICBpbnQgY2xpY2tDb3VudCA9IFdlYktpdDo6Y2xpY2tDb3Vu
dCh0eXBlLCBidXR0b24sIHBvc2l0aW9uLCB0aW1lc3RhbXApOworICAgIFdlYkV2ZW50OjpNb2Rp
ZmllcnMgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQod1BhcmFtKTsKKworICAgIHJldHVy
biBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1dHRvbiwgMCwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9u
LCAwLCAwLCAwLCBjbGlja0NvdW50LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSwgZGlkQWN0
aXZhdGVXZWJWaWV3KTsKK30KKworV2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYldoZWVsRXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUGFyYW0pCit7CisgICAgLy8gVGFrZW4gZnJvbSBXZWJDb3JlCisgICAgc3RhdGljIGNv
bnN0IGZsb2F0IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4wZjsKKworICAg
IFBPSU5UIGdsb2JhbFBvc2l0aW9uID0gcG9pbnQobFBhcmFtKTsKKyAgICBQT0lOVCBwb3NpdGlv
biA9IGdsb2JhbFBvc2l0aW9uOworICAgIDo6U2NyZWVuVG9DbGllbnQoaFduZCwgJnBvc2l0aW9u
KTsKKworICAgIFdlYldoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5ICA9IFdlYldo
ZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAgV2ViRXZlbnQ6Ok1vZGlm
aWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudCh3UGFyYW0pOworCisgICAgaW50IGRl
bHRhWCA9IDA7CisgICAgaW50IGRlbHRhWSA9IDA7CisgICAgaW50IHdoZWVsVGlja3NYID0gMDsK
KyAgICBpbnQgd2hlZWxUaWNrc1kgPSAwOworCisgICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxf
REVMVEFfV1BBUkFNKHdQYXJhbSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOwor
ICAgIGJvb2wgaXNNb3VzZUhXaGVlbCA9IChtZXNzYWdlID09IFdNX01PVVNFSFdIRUVMKTsKKyAg
ICBpZiAoaXNNb3VzZUhXaGVlbCkgeworICAgICAgICB3aGVlbFRpY2tzWCA9IGRlbHRhOworICAg
ICAgICB3aGVlbFRpY2tzWSA9IDA7CisgICAgICAgIGRlbHRhID0gLWRlbHRhOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHdoZWVsVGlja3NYID0gMDsKKyAgICAgICAgd2hlZWxUaWNrc1kgPSBkZWx0
YTsKKyAgICB9CisgICAgaWYgKGlzTW91c2VIV2hlZWwgfHwgKG1vZGlmaWVycyAmIFdlYkV2ZW50
OjpTaGlmdEtleSkpIHsKKyAgICAgICAgZGVsdGFYID0gZGVsdGEgKiBzdGF0aWNfY2FzdDxmbG9h
dD4oaG9yaXpvbnRhbFNjcm9sbENoYXJzKCkpICogY1Njcm9sbGJhclBpeGVsc1BlckxpbmU7Cisg
ICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hlZWxFdmVudDo6
U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVsdGFYID0g
MDsKKyAgICAgICAgZGVsdGFZID0gZGVsdGE7CisgICAgICAgIGludCB2ZXJ0aWNhbE11bHRpcGxp
ZXIgPSB2ZXJ0aWNhbFNjcm9sbExpbmVzKCk7CisgICAgICAgIGlmICh2ZXJ0aWNhbE11bHRpcGxp
ZXIgPT0gV0hFRUxfUEFHRVNDUk9MTCkKKyAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViV2hl
ZWxFdmVudDo6U2Nyb2xsQnlQYWdlV2hlZWxFdmVudDsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBncmFudWxhcml0eSA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
OworICAgICAgICAgICAgZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0Pih2ZXJ0aWNhbE11bHRp
cGxpZXIpICogY1Njcm9sbGJhclBpeGVsc1BlckxpbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQ
b3NpdGlvbiwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdoZWVsVGlja3NY
LCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSk7
Cit9CisKK1dlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBh
cmFtKQoreworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgICAgICAgICAgICAgPSBrZXlib2FyZEV2
ZW50VHlwZUZvckV2ZW50KG1lc3NhZ2UpOworICAgIFN0cmluZyB0ZXh0ICAgICAgICAgICAgICAg
ICAgICAgPSB0ZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CisgICAgU3RyaW5nIHVubW9kaWZp
ZWRUZXh0ICAgICAgICAgICA9IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7
CisgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgICAgICAgICAgICA9IGtleUlkZW50aWZpZXJGcm9t
RXZlbnQod3BhcmFtLCB0eXBlKTsKKyAgICBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlICAgICAg
ID0gc3RhdGljX2Nhc3Q8aW50Pih3cGFyYW0pOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29k
ZSAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CisgICAgaW50IG1hY0NoYXJDb2Rl
ICAgICAgICAgICAgICAgICA9IDA7CisgICAgYm9vbCBhdXRvUmVwZWF0ICAgICAgICAgICAgICAg
ICA9IEhJV09SRChscGFyYW0pICYgS0ZfUkVQRUFUOworICAgIGJvb2wgaXNLZXlwYWQgICAgICAg
ICAgICAgICAgICAgPSBpc0tleXBhZEV2ZW50KHdwYXJhbSwgbHBhcmFtLCB0eXBlKTsKKyAgICBi
b29sIGlzU3lzdGVtS2V5ICAgICAgICAgICAgICAgID0gaXNTeXN0ZW1LZXlFdmVudChtZXNzYWdl
KTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyAgID0gbW9kaWZpZXJzRm9yQ3Vy
cmVudEtleVN0YXRlKCk7CisKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0
LCB1bm1vZGlmaWVkVGV4dCwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBu
YXRpdmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hhckNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBp
c1N5c3RlbUtleSwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOworfQorCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKK1dlYlRvdWNoRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJU
b3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQ
b2ludD4mJiB0b3VjaFBvaW50cykKK3sKKyAgICByZXR1cm4gV2ViVG91Y2hFdmVudCgpOworfQor
I2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YWFkNDdlYzJhMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuaApAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkV2ZW50Lmgi
CisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJFdmVudEZhY3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0
ZVdlYk1vdXNlRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCBk
aWRBY3RpdmF0ZVdlYlZpZXcpOworICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldo
ZWVsRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CisgICAgc3RhdGlj
IFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChIV05ELCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSwgTFBBUkFNKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0YXRp
YyBXZWJUb3VjaEV2ZW50IGNyZWF0ZVdlYlRvdWNoRXZlbnQoKTsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337484</attachid>
            <date>2018-04-08 23:26:51 -0700</date>
            <delta_ts>2018-04-08 23:26:51 -0700</delta_ts>
            <desc>Patch for land</desc>
            <filename>bug-183043-20180409152650.patch</filename>
            <type>text/plain</type>
            <size>34519</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFjZGJhNDVkOTMwMjIyYzBj
ZjI5OWY3OGU4OTRjZDg4MTEzYmY1MTAuLmU5ZjEwZTAzOGJhZTZjY2ZkYWNkNzVhYTVhMWYxYzIz
Y2NkMDNkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTgtMDQtMDggIFlvdXN1a2Ug
S2ltb3RvIDx5b3VzdWtlLmtpbW90b0Bzb255LmNvbT4gYW5kIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBBZGQgV2ViS2l0IFNo
YXJlZC93aW4gZXZlbnQgZmlsZXMgZm9yIHdpbmNhaXJvIHdlYmtpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMDQzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Om5hdGl2
ZUV2ZW50IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oOgor
ICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJNb3VzZUV2ZW50OjpuYXRpdmVFdmVudCBjb25zdCk6
CisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYlRvdWNoRXZlbnQuaDoKKyAgICAgICAgKiBTaGFy
ZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVl
bEV2ZW50OjpuYXRpdmVFdmVudCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL3dpbi9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50V2luLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQv
TmF0aXZlV2ViTW91c2VFdmVudC5oLgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvd2luL05h
dGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmguCisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYk1vdXNl
RXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC93aW4vTmF0aXZl
V2ViVG91Y2hFdmVudFdpbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL05h
dGl2ZVdlYlRvdWNoRXZlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6TmF0aXZlV2ViVG91Y2hFdmVu
dDo6TmF0aXZlV2ViVG91Y2hFdmVudCk6CisgICAgICAgICogU2hhcmVkL3dpbi9OYXRpdmVXZWJX
aGVlbEV2ZW50V2luLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZl
V2ViTW91c2VFdmVudC5oLgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50OjpO
YXRpdmVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9y
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpyZWxhdGl2ZUN1cnNvclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6cG9pbnQpOgorICAgICAgICAoV2ViS2l0Ojpob3Jpem9udGFsU2Ny
b2xsQ2hhcnMpOgorICAgICAgICAoV2ViS2l0Ojp2ZXJ0aWNhbFNjcm9sbExpbmVzKToKKyAgICAg
ICAgKFdlYktpdDo6Y2xpY2tDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OklzS2V5SW5Eb3duU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0Ojptb2RpZmllcnNGb3JFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6Om1vZGlmaWVyc0ZvckN1cnJlbnRLZXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmtleWJv
YXJkRXZlbnRUeXBlRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojppc1N5c3RlbUtleUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6aXNLZXlwYWRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OnRl
eHRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojp1bm1vZGlmaWVkVGV4dEZyb21FdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OmtleUlkZW50aWZpZXJGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYlRvdWNoRXZlbnQpOgorICAgICAgICAq
IFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlTmF0
aXZlRXZlbnQpOgorCiAyMDE4LTA0LTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlp
QHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV0gV2ViS2l0IHNob3VsZCBsaW5rIHRvIFdlYkNv
cmUgYXMgYSBQUklWQVRFIGxpYnJhcnkgaWYgV2ViQ29yZSBpcyBhIHN0YXRpYyBsaWJyYXJ5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBhNTA4MDYzZjQyODY3YjE3M2E2NTk2MjI1MDJkZDBk
MmZiZDFlNDU3Li44NDFkNGE3MDFkNTg4YmYyNzc3MTYzZjVjN2FmMjQ5NjgyNzYxM2YwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTE5LDYgKzE5LDEyIEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHAKICAgICBQbGF0Zm9ybS93
aW4vU2hhcmVkTWVtb3J5V2luLmNwcAogCisgICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50V2luLmNwcAorICAgIFNoYXJlZC93aW4vTmF0aXZlV2ViTW91c2VFdmVudFdpbi5jcHAK
KyAgICBTaGFyZWQvd2luL05hdGl2ZVdlYlRvdWNoRXZlbnRXaW4uY3BwCisgICAgU2hhcmVkL3dp
bi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcAorICAgIFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0
b3J5LmNwcAorCiAgICAgU3RvcmFnZVByb2Nlc3Mvd2luL1N0b3JhZ2VQcm9jZXNzTWFpbldpbi5j
cHAKIAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2lu
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCmlu
ZGV4IGFhNmQzOGZhMTk4OTQxMjQzYTM0MmFlMGI5YmVhYTJmY2VmNGUwMDIuLjY0YThmMzE0NTQz
ODM3ODVlYzE1YzYyMmRlZDI5OTg1ZWFlMzQ5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NiwxMCBAQCBPQkpDX0NMQVNTIFdlYkV2
ZW50Owogc3RydWN0IHdwZV9pbnB1dF9rZXlib2FyZF9ldmVudDsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBXZWJLZXlib2Fy
ZEV2ZW50IHsKQEAgLTY4LDYgKzczLDggQEAgcHVibGljOgogICAgIE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQoOjpXZWJFdmVudCAqKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKICAgICBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfa2V5Ym9hcmRfZXZlbnQqKTsKKyNlbGlmIFBM
QVRGT1JNKFdJTikKKyAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEhXTkQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKICNpZiBVU0UoQVBQS0lUKQpAQCAtNzgsNiAr
ODUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zha2VFdmVudEZvckNvbXBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9mYWtlRXZlbnRGb3JDb21wb3NpdGlvbjsgfQogI2VsaWYgUExBVEZPUk0o
SU9TKQogICAgIDo6V2ViRXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRp
dmVFdmVudC5nZXQoKTsgfQorI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIGNvbnN0IE1TRyogbmF0
aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiAmbV9uYXRpdmVFdmVudDsgfQogI2Vsc2UKICAgICBj
b25zdCB2b2lkKiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRp
ZgpAQCAtOTEsNiArMTAwLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fZmFrZUV2ZW50Rm9yQ29t
cG9zaXRpb247CiAjZWxpZiBQTEFURk9STShJT1MpCiAgICAgUmV0YWluUHRyPDo6V2ViRXZlbnQ+
IG1fbmF0aXZlRXZlbnQ7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgTVNHIG1fbmF0aXZlRXZl
bnQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2
ZVdlYk1vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZl
bnQuaAppbmRleCAxYTFkNzAwYzEyMGM2MzA3NWQ3MmRhNjhlMDgxYmMyNmViZDJkMjdjLi40YjU1
MGFiOGI5NzFmM2UxYWQzMmE1YzQwZjE1NzcxYWQwOTk1NGM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oCkBAIC00Miw2ICs0MiwxMSBAQCB0eXBlZGVmIHVu
aW9uIF9HZGtFdmVudCBHZGtFdmVudDsKIHN0cnVjdCB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudDsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRp
ZgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOYXRpdmVXZWJNb3VzZUV2ZW50IDog
cHVibGljIFdlYk1vdXNlRXZlbnQgewpAQCAtNTMsMTIgKzU4LDE2IEBAIHB1YmxpYzoKICAgICBO
YXRpdmVXZWJNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50KTsKICNlbGlmIFBMQVRGT1JNKFdQRSkK
ICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KHN0cnVjdCB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudCos
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBOYXRp
dmVXZWJNb3VzZUV2ZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wp
OwogI2VuZGlmCiAKICNpZiBVU0UoQVBQS0lUKQogICAgIE5TRXZlbnQqIG5hdGl2ZUV2ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQogI2VsaWYgUExBVEZPUk0oR1RL
KQogICAgIGNvbnN0IEdka0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0
aXZlRXZlbnQuZ2V0KCk7IH0KKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBjb25zdCBNU0cqIG5h
dGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0KICNlbHNlCiAgICAg
Y29uc3Qgdm9pZCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5k
aWYKQEAgLTY4LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9u
YXRpdmVFdmVudDsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50
PiBtX25hdGl2ZUV2ZW50OworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIE1TRyBtX25hdGl2ZUV2
ZW50OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRp
dmVXZWJUb3VjaEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJUb3VjaEV2
ZW50LmgKaW5kZXggODJmM2IyNGQ0MjMyOWQ3OGIxNjQyNzU0NzEwMGNhODQ5ZTEyNWZhNS4uYWMy
NmFlMTY5YzZmOWY1Yzg0ODI1YTU2MmJiYmNjODU0NGNiMDBjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViVG91Y2hFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL05hdGl2ZVdlYlRvdWNoRXZlbnQuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAj
ZWxpZiBQTEFURk9STShXUEUpCiAgICAgTmF0aXZlV2ViVG91Y2hFdmVudChzdHJ1Y3Qgd3BlX2lu
cHV0X3RvdWNoX2V2ZW50KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGNvbnN0IHN0
cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3KiBuYXRpdmVGYWxsYmFja1RvdWNoUG9pbnQo
KSBjb25zdCB7IHJldHVybiAmbV9mYWxsYmFja1RvdWNoUG9pbnQ7IH0KKyNlbGlmIFBMQVRGT1JN
KFdJTikKKyAgICBOYXRpdmVXZWJUb3VjaEV2ZW50KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCA4OGMzZWI2OGRh
ZDE1ZTkwZWMwNWEzMDZmZjJiZTJhMTI5M2IxNjc4Li44YmRmNWU3MDA4ZWJkNGZhNmMyNDJhOTg5
NmU0NDMxODUyNWVmNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVX
ZWJXaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViV2hlZWxF
dmVudC5oCkBAIC00Miw2ICs0MiwxMCBAQCB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVu
dDsKIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgTmF0aXZlV2ViV2hlZWxFdmVudCA6IHB1YmxpYyBXZWJXaGVlbEV2ZW50IHsKQEAg
LTU0LDEyICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgTmF0aXZlV2ViV2hlZWxFdmVudChHZGtFdmVu
dCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21lbnR1bVBo
YXNlKTsKICNlbGlmIFBMQVRGT1JNKFdQRSkKICAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KHN0cnVj
dCB3cGVfaW5wdXRfYXhpc19ldmVudCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyAgICBOYXRpdmVXZWJXaGVlbEV2ZW50KEhXTkQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKICNpZiBVU0UoQVBQS0lUKQogICAgIE5TRXZl
bnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQog
I2VsaWYgUExBVEZPUk0oR1RLKQogICAgIEdka0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7IH0KKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBj
b25zdCBNU0cqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0K
ICNlbHNlCiAgICAgY29uc3Qgdm9pZCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CiAjZW5kaWYKQEAgLTY5LDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8
TlNFdmVudD4gbV9uYXRpdmVFdmVudDsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBHVW5pcXVl
UHRyPEdka0V2ZW50PiBtX25hdGl2ZUV2ZW50OworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIE1T
RyBtX25hdGl2ZUV2ZW50OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQx
N2EzOGU0ZDMxNTUzNjFhMDJlMzQ5MjY2MTIzMWQ1NjIwYjZlOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJLZXlib2FyZEV2ZW50V2luLmNwcApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0
b3J5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChIV05EIGh3
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKKyAgICA6IFdl
YktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGh3
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoY3JlYXRl
TmF0aXZlRXZlbnQoaHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9O
YXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRp
dmVXZWJNb3VzZUV2ZW50V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDJjOTNiZGFjNWM1YTZmMDJjYmJj
MjI4OWRkZDZhMmJmODAzZDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2
ZW50LmgiCisKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK05hdGl2ZVdlYk1vdXNlRXZlbnQ6Ok5hdGl2ZVdlYk1vdXNlRXZlbnQoSFdORCBod25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgZGlkQWN0
aXZhdGVXZWJWaWV3KQorICAgIDogV2ViTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYk1vdXNlRXZlbnQoaHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGRpZEFjdGl2YXRl
V2ViVmlldykpCisgICAgLCBtX25hdGl2ZUV2ZW50KGNyZWF0ZU5hdGl2ZUV2ZW50KGh3bmQsIG1l
c3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViVG91Y2hFdmVudFdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2ViVG91Y2hFdmVudFdpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWRhYjlmMmIzZmNlNDdiZWI4Y2Q1NWI2OWYzNDYwYTRkMGQzYzA4OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9OYXRpdmVXZWJUb3Vj
aEV2ZW50V2luLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViVG91Y2hFdmVudC5oIgorCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKworI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworTmF0aXZlV2ViVG91Y2hFdmVudDo6TmF0aXZlV2ViVG91Y2hFdmVudCgp
CisgICAgOiBXZWJUb3VjaEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViVG91Y2hFdmVu
dCgpKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShU
T1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZl
V2ViV2hlZWxFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vTmF0aXZlV2Vi
V2hlZWxFdmVudFdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjcwM2IxYTkwOGEzZTJiYzc2NjI4M2Q2OGEz
OWVlMmM4YTA5MzMyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dp
bi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5o
IgorCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitOYXRpdmVXZWJXaGVlbEV2ZW50OjpOYXRpdmVXZWJXaGVlbEV2ZW50KEhXTkQgaHduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorICAgIDogV2ViV2hlZWxF
dmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoaHduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0pKQorICAgICwgbV9uYXRpdmVFdmVudChjcmVhdGVOYXRpdmVFdmVudCho
d25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYTQ2NjNkNjA4MDkzMDk4ZDQ5ZjY1Y2EzMDVjODQxMTQ0MTljYzNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAK
QEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1L
ZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93
c0tleWJvYXJkQ29kZXMuaD4KKyNpbmNsdWRlIDx3aW5kb3dzeC5oPgorI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIGlubGluZSBMUEFSQU0gcmVsYXRpdmVDdXJzb3JQb3NpdGlvbihIV05E
IGh3bmQpCit7CisgICAgUE9JTlQgcG9pbnQgPSB7IC0xLCAtMSB9OworICAgIDo6R2V0Q3Vyc29y
UG9zKCZwb2ludCk7CisgICAgOjpTY3JlZW5Ub0NsaWVudChod25kLCAmcG9pbnQpOworICAgIHJl
dHVybiBNQUtFTFBBUkFNKHBvaW50LngsIHBvaW50LnkpOworfQorCitzdGF0aWMgaW5saW5lIFBP
SU5UIHBvaW50KExQQVJBTSBsUGFyYW0pCit7CisgICAgUE9JTlQgcG9pbnQgPSB7IEdFVF9YX0xQ
QVJBTShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKSB9OworICAgIHJldHVybiBwb2ludDsK
K30KKworc3RhdGljIGludCBob3Jpem9udGFsU2Nyb2xsQ2hhcnMoKQoreworICAgIHN0YXRpYyBV
TE9ORyBzY3JvbGxDaGFyczsKKyAgICBpZiAoIXNjcm9sbENoYXJzICYmICE6OlN5c3RlbVBhcmFt
ZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTLCAwLCAmc2Nyb2xsQ2hhcnMsIDApKQor
ICAgICAgICBzY3JvbGxDaGFycyA9IDE7CisgICAgcmV0dXJuIHNjcm9sbENoYXJzOworfQorCitz
dGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xsTGluZXMoKQoreworICAgIHN0YXRpYyBVTE9ORyBzY3Jv
bGxMaW5lczsKKyAgICBpZiAoIXNjcm9sbExpbmVzICYmICE6OlN5c3RlbVBhcmFtZXRlcnNJbmZv
KFNQSV9HRVRXSEVFTFNDUk9MTExJTkVTLCAwLCAmc2Nyb2xsTGluZXMsIDApKQorICAgICAgICBz
Y3JvbGxMaW5lcyA9IDM7CisgICAgcmV0dXJuIHNjcm9sbExpbmVzOworfQorCitzdGF0aWMgaW5s
aW5lIGludCBjbGlja0NvdW50KFdlYkV2ZW50OjpUeXBlIHR5cGUsIFdlYk1vdXNlRXZlbnQ6OkJ1
dHRvbiBidXR0b24sIGNvbnN0IFBPSU5UJiBwb3NpdGlvbiwgZG91YmxlIHRpbWVTdGFtcFNlY29u
ZHMpCit7CisgICAgc3RhdGljIGludCBnTGFzdENsaWNrQ291bnQ7CisgICAgc3RhdGljIGRvdWJs
ZSBnTGFzdENsaWNrVGltZTsKKyAgICBzdGF0aWMgUE9JTlQgbGFzdENsaWNrUG9zaXRpb247Cisg
ICAgc3RhdGljIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBsYXN0Q2xpY2tCdXR0b24gPSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uOworCisgICAgYm9vbCBjYW5jZWxQcmV2aW91c0NsaWNrID0gKHN0
ZDo6YWJzKGxhc3RDbGlja1Bvc2l0aW9uLnggLSBwb3NpdGlvbi54KSA+ICg6OkdldFN5c3RlbU1l
dHJpY3MoU01fQ1hET1VCTEVDTEspIC8gMikpCisgICAgICAgIHx8IChzdGQ6OmFicyhsYXN0Q2xp
Y2tQb3NpdGlvbi55IC0gcG9zaXRpb24ueSkgPiAoOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZRE9V
QkxFQ0xLKSAvIDIpKQorICAgICAgICB8fCAoKHRpbWVTdGFtcFNlY29uZHMgLSBnTGFzdENsaWNr
VGltZSkgKiAxMDAwLjAgPiA6OkdldERvdWJsZUNsaWNrVGltZSgpKTsKKworICAgIGlmICh0eXBl
ID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKKyAgICAgICAgaWYgKCFjYW5jZWxQcmV2aW91c0Ns
aWNrICYmIChidXR0b24gPT0gbGFzdENsaWNrQnV0dG9uKSkKKyAgICAgICAgICAgICsrZ0xhc3RD
bGlja0NvdW50OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGdMYXN0Q2xpY2tDb3VudCA9
IDE7CisgICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICB9
CisgICAgICAgIGdMYXN0Q2xpY2tUaW1lID0gdGltZVN0YW1wU2Vjb25kczsKKyAgICAgICAgbGFz
dENsaWNrQnV0dG9uID0gYnV0dG9uOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBXZWJFdmVudDo6
TW91c2VNb3ZlKSB7CisgICAgICAgIGlmIChjYW5jZWxQcmV2aW91c0NsaWNrKSB7CisgICAgICAg
ICAgICBnTGFzdENsaWNrQ291bnQgPSAwOworICAgICAgICAgICAgbGFzdENsaWNrUG9zaXRpb24u
eCA9IDA7CisgICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvbi55ID0gMDsKKyAgICAgICAgICAg
IGdMYXN0Q2xpY2tUaW1lID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBnTGFz
dENsaWNrQ291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBJc0tleUluRG93blN0YXRlKGlu
dCB2aykKK3sKKyAgICByZXR1cm4gOjpHZXRLZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMDsKK30K
Kworc3RhdGljIGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckV2ZW50KFdQ
QVJBTSB3cGFyYW0pCit7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAod3Bh
cmFtICYgTUtfQ09OVFJPTCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9s
S2V5OworICAgIGlmICh3cGFyYW0gJiBNS19TSElGVCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdl
YkV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoSXNLZXlJbkRvd25TdGF0ZShWS19NRU5VKSkKKyAg
ICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpBbHRLZXk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
V2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoKQoreworICAg
IHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKElzS2V5SW5Eb3duU3RhdGUoVktfQ09O
VFJPTCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJvbEtleTsKKyAgICBp
ZiAoSXNLZXlJbkRvd25TdGF0ZShWS19TSElGVCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJF
dmVudDo6U2hpZnRLZXk7CisgICAgaWYgKElzS2V5SW5Eb3duU3RhdGUoVktfTUVOVSkpCisgICAg
ICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpOworfQorCitzdGF0aWMgaW5saW5lIFdl
YkV2ZW50OjpUeXBlIGtleWJvYXJkRXZlbnRUeXBlRm9yRXZlbnQoVUlOVCBtZXNzYWdlKQorewor
ICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKKyAgICBjYXNl
IFdNX0tFWURPV046CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6UmF3S2V5RG93bjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICBjYXNlIFdNX0tFWVVQOgorICAg
ICAgICByZXR1cm4gV2ViRXZlbnQ6OktleVVwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdN
X0lNRV9DSEFSOgorICAgIGNhc2UgV01fU1lTQ0hBUjoKKyAgICBjYXNlIFdNX0NIQVI6CisgICAg
ICAgIHJldHVybiBXZWJFdmVudDo6Q2hhcjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJFdmVudDo6
Q2hhcjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1N5c3RlbUtleUV2ZW50KFVJ
TlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX1NZU0tF
WURPV046CisgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICBjYXNlIFdNX1NZU0NIQVI6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIGlzS2V5cGFkRXZlbnQoV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAhPSBXZWJFdmVu
dDo6UmF3S2V5RG93biAmJiB0eXBlICE9IFdlYkV2ZW50OjpLZXlVcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoICh3UGFyYW0pIHsKKyAgICBjYXNlIFZLX05VTUxPQ0s6Cisg
ICAgY2FzZSBWS19OVU1QQUQwOgorICAgIGNhc2UgVktfTlVNUEFEMToKKyAgICBjYXNlIFZLX05V
TVBBRDI6CisgICAgY2FzZSBWS19OVU1QQUQzOgorICAgIGNhc2UgVktfTlVNUEFENDoKKyAgICBj
YXNlIFZLX05VTVBBRDU6CisgICAgY2FzZSBWS19OVU1QQUQ2OgorICAgIGNhc2UgVktfTlVNUEFE
NzoKKyAgICBjYXNlIFZLX05VTVBBRDg6CisgICAgY2FzZSBWS19OVU1QQUQ5OgorICAgIGNhc2Ug
VktfTVVMVElQTFk6CisgICAgY2FzZSBWS19BREQ6CisgICAgY2FzZSBWS19TRVBBUkFUT1I6Cisg
ICAgY2FzZSBWS19TVUJUUkFDVDoKKyAgICBjYXNlIFZLX0RFQ0lNQUw6CisgICAgY2FzZSBWS19E
SVZJREU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAg
ICByZXR1cm4gSElXT1JEKGxQYXJhbSkgJiBLRl9FWFRFTkRFRDsKKyAgICBjYXNlIFZLX0lOU0VS
VDoKKyAgICBjYXNlIFZLX0RFTEVURToKKyAgICBjYXNlIFZLX1BSSU9SOgorICAgIGNhc2UgVktf
TkVYVDoKKyAgICBjYXNlIFZLX0VORDoKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgY2FzZSBWS19M
RUZUOgorICAgIGNhc2UgVktfVVA6CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICBjYXNlIFZLX0RP
V046CisgICAgICAgIHJldHVybiAhKEhJV09SRChsUGFyYW0pICYgS0ZfRVhURU5ERUQpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJp
bmcgdGV4dEZyb21FdmVudChXUEFSQU0gd3BhcmFtLCBXZWJFdmVudDo6VHlwZSB0eXBlKQorewor
ICAgIGlmICh0eXBlICE9IFdlYkV2ZW50OjpDaGFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBVQ2hhciBjID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHdwYXJhbSk7CisgICAgcmV0dXJu
IFN0cmluZygmYywgMSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgdW5tb2RpZmllZFRleHRGcm9tRXZl
bnQoV1BBUkFNIHdwYXJhbSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAh
PSBXZWJFdmVudDo6Q2hhcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgVUNoYXIg
YyA9IHN0YXRpY19jYXN0PFVDaGFyPih3cGFyYW0pOworICAgIHJldHVybiBTdHJpbmcoJmMsIDEp
OworfQorCitzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGcm9tRXZlbnQoV1BBUkFNIHdwYXJh
bSwgV2ViRXZlbnQ6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBXZWJFdmVudDo6Q2hh
cikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgdW5zaWduZWQgc2hvcnQga2V5Q29k
ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih3cGFyYW0pOworICAgIHN3aXRjaCAoa2V5
Q29kZSkgeworICAgIGNhc2UgVktfTUVOVToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiQWx0Iik7
CisgICAgY2FzZSBWS19DT05UUk9MOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJDb250cm9sIik7
CisgICAgY2FzZSBWS19TSElGVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiU2hpZnQiKTsKKyAg
ICBjYXNlIFZLX0NBUElUQUw6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkNhcHNMb2NrIik7Cisg
ICAgY2FzZSBWS19MV0lOOgorICAgIGNhc2UgVktfUldJTjoKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygiV2luIik7CisgICAgY2FzZSBWS19DTEVBUjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiQ2xl
YXIiKTsKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHJldHVybiBTdHJpbmcoIkRvd24iKTsK
KyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRW5kIik7CisgICAgY2Fz
ZSBWS19SRVRVUk46CisgICAgICAgIHJldHVybiBTdHJpbmcoIkVudGVyIik7CisgICAgY2FzZSBW
S19FWEVDVVRFOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJFeGVjdXRlIik7CisgICAgY2FzZSBW
S19GMToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjEiKTsKKyAgICBjYXNlIFZLX0YyOgorICAg
ICAgICByZXR1cm4gU3RyaW5nKCJGMiIpOworICAgIGNhc2UgVktfRjM6CisgICAgICAgIHJldHVy
biBTdHJpbmcoIkYzIik7CisgICAgY2FzZSBWS19GNDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygi
RjQiKTsKKyAgICBjYXNlIFZLX0Y1OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGNSIpOworICAg
IGNhc2UgVktfRjY6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkY2Iik7CisgICAgY2FzZSBWS19G
NzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjciKTsKKyAgICBjYXNlIFZLX0Y4OgorICAgICAg
ICByZXR1cm4gU3RyaW5nKCJGOCIpOworICAgIGNhc2UgVktfRjk6CisgICAgICAgIHJldHVybiBT
dHJpbmcoIkY5Iik7CisgICAgY2FzZSBWS19GMTA6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYx
MSIpOworICAgIGNhc2UgVktfRjEyOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTIiKTsKKyAg
ICBjYXNlIFZLX0YxMzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjEzIik7CisgICAgY2FzZSBW
S19GMTQ6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYxNCIpOworICAgIGNhc2UgVktfRjE1Ogor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJGMTUiKTsKKyAgICBjYXNlIFZLX0YxNjoKKyAgICAgICAg
cmV0dXJuIFN0cmluZygiRjE2Iik7CisgICAgY2FzZSBWS19GMTc6CisgICAgICAgIHJldHVybiBT
dHJpbmcoIkYxNyIpOworICAgIGNhc2UgVktfRjE4OgorICAgICAgICByZXR1cm4gU3RyaW5nKCJG
MTgiKTsKKyAgICBjYXNlIFZLX0YxOToKKyAgICAgICAgcmV0dXJuIFN0cmluZygiRjE5Iik7Cisg
ICAgY2FzZSBWS19GMjA6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkYyMCIpOworICAgIGNhc2Ug
VktfRjIxOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJGMjEiKTsKKyAgICBjYXNlIFZLX0YyMjoK
KyAgICAgICAgcmV0dXJuIFN0cmluZygiRjIyIik7CisgICAgY2FzZSBWS19GMjM6CisgICAgICAg
IHJldHVybiBTdHJpbmcoIkYyMyIpOworICAgIGNhc2UgVktfRjI0OgorICAgICAgICByZXR1cm4g
U3RyaW5nKCJGMjQiKTsKKyAgICBjYXNlIFZLX0hFTFA6CisgICAgICAgIHJldHVybiBTdHJpbmco
IkhlbHAiKTsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAgIHJldHVybiBTdHJpbmcoIkhvbWUi
KTsKKyAgICBjYXNlIFZLX0lOU0VSVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiSW5zZXJ0Iik7
CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJMZWZ0Iik7CisgICAg
Y2FzZSBWS19ORVhUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJQYWdlRG93biIpOworICAgIGNh
c2UgVktfUFJJT1I6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlBhZ2VVcCIpOworICAgIGNhc2Ug
VktfUEFVU0U6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlBhdXNlIik7CisgICAgY2FzZSBWS19T
TkFQU0hPVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiUHJpbnRTY3JlZW4iKTsKKyAgICBjYXNl
IFZLX1JJR0hUOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJSaWdodCIpOworICAgIGNhc2UgVktf
U0NST0xMOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJTY3JvbGwiKTsKKyAgICBjYXNlIFZLX1NF
TEVDVDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiU2VsZWN0Iik7CisgICAgY2FzZSBWS19VUDoK
KyAgICAgICAgcmV0dXJuIFN0cmluZygiVXAiKTsKKyAgICBjYXNlIFZLX0RFTEVURToKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygiVSswMDdGIik7IC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVj
b21lcyBVKzAwN0YuCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOworICAgIH0KK30KKworV2ViTW91c2VF
dmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wgZGlkQWN0aXZhdGVX
ZWJWaWV3KQoreworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGU7CisgICAgV2ViTW91c2VFdmVudDo6
QnV0dG9uIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgIHN3aXRjaCAobWVz
c2FnZSkgeworICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6
Ok1vdXNlTW92ZTsKKyAgICAgICAgaWYgKHdQYXJhbSAmIE1LX0xCVVRUT04pCisgICAgICAgICAg
ICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmICh3
UGFyYW0gJiBNS19NQlVUVE9OKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6
TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmICh3UGFyYW0gJiBNS19SQlVUVE9OKQorICAg
ICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV01fTU9VU0VMRUFWRToKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpN
b3VzZU1vdmU7CisgICAgICAgIGlmICh3UGFyYW0gJiBNS19MQlVUVE9OKQorICAgICAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAod1Bh
cmFtICYgTUtfTUJVVFRPTikKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAod1BhcmFtICYgTUtfUkJVVFRPTikKKyAgICAg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworCisgICAgICAgIC8v
IFNldCB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiAocmVsYXRpdmUgdG8gdGhlIGNsaWVudCBh
cmVhIG9mIHRoZQorICAgICAgICAvLyBjdXJyZW50IHdpbmRvdykgc2luY2Ugbm9uZSBpcyBzcGVj
aWZpZWQgZm9yIHRoaXMgZXZlbnQuCisgICAgICAgIGxQYXJhbSA9IHJlbGF0aXZlQ3Vyc29yUG9z
aXRpb24oaFduZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTEJVVFRPTkRPV046Cisg
ICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNl
RG93bjsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX01CVVRUT05E
QkxDTEs6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VEb3duOworICAgICAgICBidXR0
b24gPSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgorICAgICAgICB0
eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTEJVVFRPTlVQOgor
ICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIGJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTUJVVFRP
TlVQOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIGJ1dHRvbiA9
IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
TV9SQlVUVE9OVVA6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB0eXBlID0g
V2ViRXZlbnQ6OktleURvd247CisgICAgfQorCisgICAgUE9JTlQgcG9zaXRpb24gPSBwb2ludChs
UGFyYW0pOworICAgIFBPSU5UIGdsb2JhbFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgOjpDbGll
bnRUb1NjcmVlbihoV25kLCAmZ2xvYmFsUG9zaXRpb24pOworCisgICAgZG91YmxlIHRpbWVzdGFt
cCA9IDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMTsgLy8gOjpHZXRUaWNrQ291bnQgcmV0dXJucyBt
aWxsaXNlY29uZHMgKENocm9tZSB1c2VzIEdldE1lc3NhZ2VUaW1lKCkgLyAxMDAwLjApCisKKyAg
ICBpbnQgY2xpY2tDb3VudCA9IFdlYktpdDo6Y2xpY2tDb3VudCh0eXBlLCBidXR0b24sIHBvc2l0
aW9uLCB0aW1lc3RhbXApOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9k
aWZpZXJzRm9yRXZlbnQod1BhcmFtKTsKKworICAgIHJldHVybiBXZWJNb3VzZUV2ZW50KHR5cGUs
IGJ1dHRvbiwgMCwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAwLCAwLCAwLCBjbGlja0NvdW50
LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSwgZGlkQWN0aXZhdGVXZWJWaWV3KTsKK30KKwor
V2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAg
UE9JTlQgZ2xvYmFsUG9zaXRpb24gPSBwb2ludChsUGFyYW0pOworICAgIFBPSU5UIHBvc2l0aW9u
ID0gZ2xvYmFsUG9zaXRpb247CisgICAgOjpTY3JlZW5Ub0NsaWVudChoV25kLCAmcG9zaXRpb24p
OworCisgICAgV2ViV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBXZWJXaGVl
bEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKKworICAgIFdlYkV2ZW50OjpNb2RpZmll
cnMgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQod1BhcmFtKTsKKworICAgIGludCBkZWx0
YVggPSAwOworICAgIGludCBkZWx0YVkgPSAwOworICAgIGludCB3aGVlbFRpY2tzWCA9IDA7Cisg
ICAgaW50IHdoZWVsVGlja3NZID0gMDsKKworICAgIGZsb2F0IGRlbHRhID0gR0VUX1dIRUVMX0RF
TFRBX1dQQVJBTSh3UGFyYW0pIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdIRUVMX0RFTFRBKTsKKyAg
ICBib29sIGlzTW91c2VIV2hlZWwgPSAobWVzc2FnZSA9PSBXTV9NT1VTRUhXSEVFTCk7CisgICAg
aWYgKGlzTW91c2VIV2hlZWwpIHsKKyAgICAgICAgd2hlZWxUaWNrc1ggPSBkZWx0YTsKKyAgICAg
ICAgd2hlZWxUaWNrc1kgPSAwOworICAgICAgICBkZWx0YSA9IC1kZWx0YTsKKyAgICB9IGVsc2Ug
eworICAgICAgICB3aGVlbFRpY2tzWCA9IDA7CisgICAgICAgIHdoZWVsVGlja3NZID0gZGVsdGE7
CisgICAgfQorICAgIGlmIChpc01vdXNlSFdoZWVsIHx8IChtb2RpZmllcnMgJiBXZWJFdmVudDo6
U2hpZnRLZXkpKSB7CisgICAgICAgIGRlbHRhWCA9IGRlbHRhICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGhvcml6b250YWxTY3JvbGxDaGFycygpKSAqIFdlYkNvcmU6OmNTY3JvbGxiYXJQaXhlbHNQZXJM
aW5lOworICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICBncmFudWxhcml0eSA9IFdlYldoZWVs
RXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIGRl
bHRhWCA9IDA7CisgICAgICAgIGRlbHRhWSA9IGRlbHRhOworICAgICAgICBpbnQgdmVydGljYWxN
dWx0aXBsaWVyID0gdmVydGljYWxTY3JvbGxMaW5lcygpOworICAgICAgICBpZiAodmVydGljYWxN
dWx0aXBsaWVyID09IFdIRUVMX1BBR0VTQ1JPTEwpCisgICAgICAgICAgICBncmFudWxhcml0eSA9
IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQ7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hl
ZWxFdmVudDsKKyAgICAgICAgICAgIGRlbHRhWSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4odmVydGlj
YWxNdWx0aXBsaWVyKSAqIFdlYkNvcmU6OmNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBw
b3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSksIEZsb2F0
U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCBX
YWxsVGltZTo6bm93KCkpOworfQorCitXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdw
YXJhbSwgTFBBUkFNIGxwYXJhbSkKK3sKKyAgICBXZWJFdmVudDo6VHlwZSB0eXBlID0ga2V5Ym9h
cmRFdmVudFR5cGVGb3JFdmVudChtZXNzYWdlKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRleHRGcm9t
RXZlbnQod3BhcmFtLCB0eXBlKTsKKyAgICBTdHJpbmcgdW5tb2RpZmllZFRleHQgPSB1bm1vZGlm
aWVkVGV4dEZyb21FdmVudCh3cGFyYW0sIHR5cGUpOworICAgIFN0cmluZyBrZXlJZGVudGlmaWVy
ID0ga2V5SWRlbnRpZmllckZyb21FdmVudCh3cGFyYW0sIHR5cGUpOworICAgIGludCB3aW5kb3dz
VmlydHVhbEtleUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CisgICAgaW50IG5hdGl2
ZVZpcnR1YWxLZXlDb2RlID0gc3RhdGljX2Nhc3Q8aW50Pih3cGFyYW0pOworICAgIGludCBtYWND
aGFyQ29kZSA9IDA7CisgICAgYm9vbCBhdXRvUmVwZWF0ID0gSElXT1JEKGxwYXJhbSkgJiBLRl9S
RVBFQVQ7CisgICAgYm9vbCBpc0tleXBhZCA9IGlzS2V5cGFkRXZlbnQod3BhcmFtLCBscGFyYW0s
IHR5cGUpOworICAgIGJvb2wgaXNTeXN0ZW1LZXkgPSBpc1N5c3RlbUtleUV2ZW50KG1lc3NhZ2Up
OworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yQ3VycmVu
dEtleVN0YXRlKCk7CisKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCB1
bm1vZGlmaWVkVGV4dCwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBuYXRp
dmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hhckNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBpc1N5
c3RlbUtleSwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOworfQorCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK1dlYlRvdWNoRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJUb3Vj
aEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2lu
dD4mJiB0b3VjaFBvaW50cykKK3sKKyAgICByZXR1cm4gV2ViVG91Y2hFdmVudCgpOworfQorI2Vu
ZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllMjZj
MGU3YTY0Mzk0ZTlkZDk1YzQxZjk3MmRmZDBkYmIwNDNhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJFdmVudC5oIgor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkV2
ZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2Vi
TW91c2VFdmVudChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sIGRpZEFj
dGl2YXRlV2ViVmlldyk7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxF
dmVudChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKKyAgICBzdGF0aWMgV2Vi
S2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNLCBMUEFSQU0pOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgc3RhdGljIFdl
YlRvdWNoRXZlbnQgY3JlYXRlV2ViVG91Y2hFdmVudCgpOworI2VuZGlmCit9OworCitpbmxpbmUg
TVNHIGNyZWF0ZU5hdGl2ZUV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKSB7IHJldHVybiB7IGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtIH07IH0KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>