<?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>78675</bug_id>
          
          <creation_ts>2012-02-15 00:43:29 -0800</creation_ts>
          <short_desc>[Qt][WK2] Manage graphics buffers in the web process</short_desc>
          <delta_ts>2012-04-11 06:24:00 -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>Layout and Rendering</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>ahf</cc>
    
    <cc>andersca</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>ostap73</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556991</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-15 00:43:29 -0800</bug_when>
    <thetext>Some platforms allow for efficient graphics buffers, like IO buffers on Mac and EGL pixmaps. We should use that when possible instead of SHM, and still use SHM as a fallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597969</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-07 07:30:58 -0700</bug_when>
    <thetext>The plan right now is to contribute this in two patches:
1. Instead of using a ShareableBitmap for each update, use a big ShareableBitmap that&apos;s divided to smaller updates, like an atlas.
2. Create a GraphicsSurface class that supports software/hardware rendering and fast (DMA) copying, to be implemented differently for different platforms - first implementation with IOSurfaces for Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598013</commentid>
    <comment_count>2</comment_count>
      <attachid>136142</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-07 18:38:19 -0700</bug_when>
    <thetext>Created attachment 136142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598346</commentid>
    <comment_count>3</comment_count>
      <attachid>136241</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 09:40:52 -0700</bug_when>
    <thetext>Created attachment 136241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598392</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 10:22:09 -0700</bug_when>
    <thetext>andersca, this adds some #ifdef protected functionality to ShareableBitmap, where it seemed the most natural. If this is unsavory, I can go about it a different way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598460</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-04-09 11:25:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; andersca, this adds some #ifdef protected functionality to ShareableBitmap, where it seemed the most natural. If this is unsavory, I can go about it a different way.

Yeah I don&apos;t think ShareableBitmap should be overloaded to handle surfaces as well. I&apos;d rather like to see a separate ShareableSurface class. (In fact, we used to have something like this in WebKit2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598462</commentid>
    <comment_count>6</comment_count>
      <attachid>136241</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 11:32:36 -0700</bug_when>
    <thetext>Comment on attachment 136241
Patch

OK, based on andersca&apos;s comments I&apos;ll add a ShareableSurface class that can have ShareableBitmap as a fallback-backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599009</commentid>
    <comment_count>7</comment_count>
      <attachid>136398</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 22:13:04 -0700</bug_when>
    <thetext>Created attachment 136398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599116</commentid>
    <comment_count>8</comment_count>
      <attachid>136398</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-10 02:49:49 -0700</bug_when>
    <thetext>Comment on attachment 136398
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        TextureMapperGL had to be modified to use GL_UNSIGNED_INT_8_8_8_8_REV

This is for Mac only? or general... could be clarified

&gt; Source/WebCore/platform/graphics/surfaces/GraphicsSurface.cpp:52
&gt; +    int stride = 0;
&gt; +    char* bits = platformLock(rect, stride, lockOptions);

It is not obvious that the stride is being set by the platformLock... why not make it a pointer so you would do &amp;stride ?

&gt; Source/WebCore/platform/graphics/surfaces/GraphicsSurface.h:31
&gt; +#if USE(GRAPHICS_SURFACE)
&gt; +#if OS(DARWIN)

I would add a newline between those two... one is for the whole file.

&gt; Source/WebCore/platform/graphics/surfaces/GraphicsSurface.h:35
&gt; +#endif
&gt; +namespace WebCore {

also here

&gt; Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:3
&gt; +/*
&gt; + Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
&gt; +

Are you sure that the split you have between GraphicsSurfaceQt and GraphicsSurfaceMac will be the same for all platforms?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:67
&gt; +    virtual bool isOpenGLBacked() const { return false; }

isBackedByOpenGL?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:390
&gt; +#if OS(DARWIN)
&gt; +#define DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
&gt; +#else
&gt; +#define DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE GL_UNSIGNED_BYTE
&gt; +#endif

I wonder where it makes the most sense to put this

&gt; Source/WebKit2/Shared/ShareableSurface.cpp:83
&gt; +PassRefPtr&lt;ShareableSurface&gt; ShareableSurface::create(const IntSize&amp; size, ShareableBitmap::Flags flags, BackingType preferredBacking)

This backing sounds weird to me, but that might just be me. BackignStore? Backend?

Also when would you prefer the Bitmap backend? And if you want the Bitmap one it needs to be enforced right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599118</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-10 02:51:15 -0700</bug_when>
    <thetext>Zeno can you have a look at the mac specific code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599134</commentid>
    <comment_count>10</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-04-10 04:00:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Zeno can you have a look at the mac specific code?

sure. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599171</commentid>
    <comment_count>11</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-04-10 05:18:28 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Zeno can you have a look at the mac specific code?
&gt; 
&gt; sure. :)

The mac specific code looks good to me. Nothing i can nitpick on. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599212</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-10 06:11:17 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        TextureMapperGL had to be modified to use GL_UNSIGNED_INT_8_8_8_8_REV
&gt; 
&gt; This is for Mac only? or general... could be clarified
Yes, for now. Might need to change pixel-formats for other platforms as we add more GraphicsSurface implementations.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/GraphicsSurface.cpp:52
&gt; &gt; +    int stride = 0;
&gt; &gt; +    char* bits = platformLock(rect, stride, lockOptions);
&gt; 
&gt; It is not obvious that the stride is being set by the platformLock... why not make it a pointer so you would do &amp;stride ?
OK

&gt; Are you sure that the split you have between GraphicsSurfaceQt and GraphicsSurfaceMac will be the same for all platforms?

In general, platformLock gives us a pointer (that would be the case on other platforms), and Qt makes it into a GraphicsContext by wrapping that pointer in a QImage. If we find exceptions to that, we can add them as an exceptions

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:67
&gt; &gt; +    virtual bool isOpenGLBacked() const { return false; }
&gt; 
&gt; isBackedByOpenGL?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:390
&gt; &gt; +#if OS(DARWIN)
&gt; &gt; +#define DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
&gt; &gt; +#else
&gt; &gt; +#define DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE GL_UNSIGNED_BYTE
&gt; &gt; +#endif
&gt; 
&gt; I wonder where it makes the most sense to put this
&gt; Also when would you prefer the Bitmap backend? And if you want the Bitmap one it needs to be enforced right?
It is enforced. See ShareableSurface::create; We skip trying to create a GraphicsSurface if the backing-type is bitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599235</commentid>
    <comment_count>13</comment_count>
      <attachid>136447</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-10 06:57:03 -0700</bug_when>
    <thetext>Created attachment 136447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599239</commentid>
    <comment_count>14</comment_count>
      <attachid>136447</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-10 07:06:34 -0700</bug_when>
    <thetext>Comment on attachment 136447
Patch

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

&gt; Source/WebKit2/Shared/SurfaceUpdateInfo.h:47
&gt; +    float updateScaleFactor;

I think we can remove update* from these, they are part of SurfaceUpdateInfo. Maybe newScaleFactor makes more sense</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599247</commentid>
    <comment_count>15</comment_count>
      <attachid>136451</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-10 07:17:49 -0700</bug_when>
    <thetext>Created attachment 136451
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599673</commentid>
    <comment_count>16</comment_count>
      <attachid>136451</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 14:53:04 -0700</bug_when>
    <thetext>Comment on attachment 136451
Patch for landing

Clearing flags on attachment: 136451

Committed r113773: &lt;http://trac.webkit.org/changeset/113773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599674</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 14:53:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600027</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-10 22:05:03 -0700</bug_when>
    <thetext>Reopen, because it broke the Qt Mac build:
../../../../Source/WebCore/platform/graphics/surfaces/GraphicsSurface.h: In constructor ‘WebCore::GraphicsSurface::GraphicsSurface(const WebCore::IntSize&amp;, int)’:
../../../../Source/WebCore/platform/graphics/surfaces/GraphicsSurface.h:95: warning: ‘WebCore::GraphicsSurface::m_size’ will be initialized after
../../../../Source/WebCore/platform/graphics/surfaces/GraphicsSurface.h:85: warning:   ‘int WebCore::GraphicsSurface::m_flags’
../../../../Source/WebCore/platform/graphics/surfaces/GraphicsSurface.cpp:62: warning:   when initialized here
g++ -c -Wall -Wextra -Wreturn-type -fno-strict-aliasing -Wchar-subscripts -Wformat-security -Wreturn-type -Wno-unused-parameter -Wno-sign-compare -Wno-switch -Wno-switch-enum -Wundef -Wmissing-noreturn -Winit-self -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DWTF_USE_GRAPHICS_SURFACE=1 -DWTF_USE_QT4_UNICODE=1 -DENABLE_SVG_FONTS=0 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_GAMEPAD=0 -DENABLE_SQL_DATABASE=1 -DENABLE_ICONDATABASE=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_FILE_SYSTEM=0 -DENABLE_QUOTA=0 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_FILTERS=1 -DENABLE_CSS_FILTERS=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SHADOW_DOM=0 -DENABLE_WORKERS=1 -DENABLE_DETAILS=1 -DENABLE_METER_TAG=1 -DENABLE_MHTML=0 -DENABLE_MICRODATA=0 -DENABLE_PROGRESS_TAG=1 -DENABLE_BLOB=1 -DENABLE_LEGACY_NOTIFICATIONS=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_INPUT_TYPE_COLOR=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_SCRIPTED_SPEECH=0 -DENABLE_INSPECTOR=1 -DENABLE_3D_RENDERING=1 -DENABLE_WEB_AUDIO=0 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=0 -DENABLE_MEDIA_STREAM=0 -DENABLE_VIDEO_TRACK=0 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_ANIMATION_API=0 -DENABLE_TOUCH_ADJUSTMENT=1 -DENABLE_FAST_MOBILE_SCROLLING=1 -DENABLE_PAGE_VISIBILITY_API=1 -DWTF_USE_QT_IMAGE_DECODER=1 -DENABLE_FTPDIR=1 -DENABLE_SVG=1 -DENABLE_DATALIST=1 -DWTF_USE_TILED_BACKING_STORE=1 -DENABLE_NETSCAPE_PLUGIN_API=1 -DPLUGIN_ARCHITECTURE_UNSUPPORTED=1 -DHAVE_QSTYLE=1 -DENABLE_WEBGL=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_XSLT=1 -DENABLE_GEOLOCATION=1 -DENABLE_ORIENTATION_EVENTS=1 -DENABLE_DEVICE_ORIENTATION=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_GESTURE_EVENTS=1 -DENABLE_VIDEO=1 -DWTF_USE_QTKIT=1 -DENABLE_FULLSCREEN_API=0 -DHAVE_QQUICK1=1 -DWTF_USE_TEXTURE_MAPPER=1 -DWTF_USE_TEXTURE_MAPPER_GL=1 -DQT_MAKEDLL -DNSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES -DWTF_USE_TEXTURE_MAPPER_GL -DQT_OPENGL_SHIMS=1 -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -DBUILDING_QT__=1 -DNDEBUG -DBUILDING_WebCore -DBUILDING_WEBKIT -DQT_ASCII_CAST_WARNINGS -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_XMLPATTERNS_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.8.0/mkspecs/macx-g++ -I../../../../Source/WebCore -I/usr/local/Trolltech/Qt-4.8.0/lib/QtCore.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtCore -I/usr/local/Trolltech/Qt-4.8.0/lib/QtNetwork.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtNetwork -I/usr/local/Trolltech/Qt-4.8.0/lib/QtGui.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtGui -I/usr/local/Trolltech/Qt-4.8.0/lib/QtOpenGL.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtOpenGL -I/usr/local/Trolltech/Qt-4.8.0/lib/QtXmlPatterns.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtXmlPatterns -I/usr/local/Trolltech/Qt-4.8.0/lib/QtSql.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.8.0/include/QtSql -I/usr/local/Trolltech/Qt-4.8.0/include -I/usr/local/qt-mobility-1.2.0/include/QtSensors -I/usr/local/qt-mobility-1.2.0/include/QtLocation -I. -I../../../../Source/WebCore -I../../../../Source/WebCore/Modules/filesystem -I../../../../Source/WebCore/Modules/geolocation -I../../../../Source/WebCore/Modules/indexeddb -I../../../../Source/WebCore/Modules/webaudio -I../../../../Source/WebCore/Modules/webdatabase -I../../../../Source/WebCore/Modules/websockets -I../../../../Source/WebCore/accessibility -I../../../../Source/WebCore/bindings -I../../../../Source/WebCore/bindings/generic -I../../../../Source/WebCore/bridge -I../../../../Source/WebCore/bridge/qt -I../../../../Source/WebCore/css -I../../../../Source/WebCore/dom -I../../../../Source/WebCore/dom/default -I../../../../Source/WebCore/editing -I../../../../Source/WebCore/fileapi -I../../../../Source/WebCore/history -I../../../../Source/WebCore/html -I../../../../Source/WebCore/html/canvas -I../../../../Source/WebCore/html/parser -I../../../../Source/WebCore/html/shadow -I../../../../Source/WebCore/html/track -I../../../../Source/WebCore/inspector -I../../../../Source/WebCore/loader -I../../../../Source/WebCore/loader/appcache -I../../../../Source/WebCore/loader/archive -I../../../../Source/WebCore/loader/cache -I../../../../Source/WebCore/loader/icon -I../../../../Source/WebCore/mathml -I../../../../Source/WebCore/notifications -I../../../../Source/WebCore/page -I../../../../Source/WebCore/page/animation -I../../../../Source/WebCore/page/qt -I../../../../Source/WebCore/page/scrolling -I../../../../Source/WebCore/platform -I../../../../Source/WebCore/platform/animation -I../../../../Source/WebCore/platform/audio -I../../../../Source/WebCore/platform/graphics -I../../../../Source/WebCore/platform/graphics/filters -I../../../../Source/WebCore/platform/graphics/filters/arm -I../../../../Source/WebCore/platform/graphics/opengl -I../../../../Source/WebCore/platform/graphics/qt -I../../../../Source/WebCore/platform/graphics/surfaces -I../../../../Source/WebCore/platform/graphics/texmap -I../../../../Source/WebCore/platform/graphics/transforms -I../../../../Source/WebCore/platform/image-decoders -I../../../../Source/WebCore/platform/leveldb -I../../../../Source/WebCore/platform/mock -I../../../../Source/WebCore/platform/network -I../../../../Source/WebCore/platform/network/qt -I../../../../Source/WebCore/platform/qt -I../../../../Source/WebCore/platform/sql -I../../../../Source/WebCore/platform/text -I../../../../Source/WebCore/platform/text/transcoder -I../../../../Source/WebCore/plugins -I../../../../Source/WebCore/rendering -I../../../../Source/WebCore/rendering/mathml -I../../../../Source/WebCore/rendering/style -I../../../../Source/WebCore/rendering/svg -I../../../../Source/WebCore/storage -I../../../../Source/WebCore/svg -I../../../../Source/WebCore/svg/animation -I../../../../Source/WebCore/svg/graphics -I../../../../Source/WebCore/svg/graphics/filters -I../../../../Source/WebCore/svg/properties -I../../../../Source/WebCore/testing -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WebCore/websockets -I../../../../Source/WebCore/workers -I../../../../Source/WebCore/xml -I../../../../Source/WebCore/xml/parser -I../../../../Source/ThirdParty -I../../../../Source/WebCore/bridge/jsc -I../../../../Source/WebCore/bindings/js -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WebCore/bindings/js/specialization -I../../../../Source/WebCore/bridge/c -I../../../../Source/WebCore/testing/js -Igenerated -I../../../../Source/WebCore/platform/mac -I../../../../Source/WebCore/platform/graphics/mac -I/usr/local/Trolltech/Qt-4.8.0/src/3rdparty/sqlite/ -I../../../../Source/WTF/wtf/qt/compat -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WebCore/../WebKitLibraries/ -I../../../../Source/WebCore/platform/mac -I../../../../Source/WebCore/platform/graphics/gpu -I../../../../Source/ThirdParty/ANGLE/src -I../../../../Source/ThirdParty/ANGLE/include -I/System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers -I../../../../Source -I../include -I../../../../Source/JavaScriptCore -I../../../../Source -I../../../../Source/WTF -I../../../../Source/JavaScriptCore/assembler -I../../../../Source/JavaScriptCore/bytecode -I../../../../Source/JavaScriptCore/bytecompiler -I../../../../Source/JavaScriptCore/heap -I../../../../Source/JavaScriptCore/dfg -I../../../../Source/JavaScriptCore/debugger -I../../../../Source/JavaScriptCore/interpreter -I../../../../Source/JavaScriptCore/jit -I../../../../Source/JavaScriptCore/llint -I../../../../Source/JavaScriptCore/parser -I../../../../Source/JavaScriptCore/profiler -I../../../../Source/JavaScriptCore/runtime -I../../../../Source/JavaScriptCore/tools -I../../../../Source/JavaScriptCore/yarr -I../../../../Source/JavaScriptCore/API -I../../../../Source/JavaScriptCore/ForwardingHeaders -I../JavaScriptCore/generated -I../../../../Source -I../../../../Source/WTF -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WTF/gobject -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WTF/qt -I/buildbot/lion-qt-release/lion-qt-intel-release/build/Source/WTF/unicode -I../../../../Source/WTF/wtf -I/usr/local/qt-mobility-1.2.0/include -I/usr/local/qt-mobility-1.2.0/include/QtMobility -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I../../../../Source/WebCore -I. -F/usr/local/Trolltech/Qt-4.8.0/lib -o obj/release/PerspectiveTransformOperation.o ../../../../Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp
../../../../Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp: In member function ‘WTF::PassOwnPtr&lt;WebCore::GraphicsContext&gt; WebCore::GraphicsSurface::platformBeginPaint(const WebCore::IntSize&amp;, char*, int)’:
../../../../Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:42: error: no matching function for call to ‘QImage::QImage(uchar*, int, int, int&amp;, QImage::Format&amp;, void ()(void*), WebCore::GraphicsSurface* const)’
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:139: note: candidates are: QImage::QImage(const QImage&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:136: note:                 QImage::QImage(const char*, const char*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:134: note:                 QImage::QImage(const QString&amp;, const char*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:132: note:                 QImage::QImage(const char* const*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:129: note:                 QImage::QImage(const uchar*, int, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:128: note:                 QImage::QImage(uchar*, int, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:127: note:                 QImage::QImage(const uchar*, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:126: note:                 QImage::QImage(uchar*, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:125: note:                 QImage::QImage(int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:124: note:                 QImage::QImage(const QSize&amp;, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:123: note:                 QImage::QImage()
../../../../Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp: In member function ‘WTF::PassRefPtr&lt;WebCore::Image&gt; WebCore::GraphicsSurface::createReadOnlyImage(const WebCore::IntRect&amp;)’:
../../../../Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:54: error: no matching function for call to ‘QImage::QImage(uchar*, int, int, int&amp;, QImage::Format&amp;, void ()(void*), WebCore::GraphicsSurface* const)’
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:139: note: candidates are: QImage::QImage(const QImage&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:136: note:                 QImage::QImage(const char*, const char*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:134: note:                 QImage::QImage(const QString&amp;, const char*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:132: note:                 QImage::QImage(const char* const*)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:129: note:                 QImage::QImage(const uchar*, int, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:128: note:                 QImage::QImage(uchar*, int, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:127: note:                 QImage::QImage(const uchar*, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:126: note:                 QImage::QImage(uchar*, int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:125: note:                 QImage::QImage(int, int, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:124: note:                 QImage::QImage(const QSize&amp;, QImage::Format)
/usr/local/Trolltech/Qt-4.8.0/include/QtGui/qimage.h:123: note:                 QImage::QImage()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600207</commentid>
    <comment_count>19</comment_count>
      <attachid>136660</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-11 05:17:51 -0700</bug_when>
    <thetext>Created attachment 136660
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600220</commentid>
    <comment_count>20</comment_count>
      <attachid>136660</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 06:23:54 -0700</bug_when>
    <thetext>Comment on attachment 136660
Patch for landing

Clearing flags on attachment: 136660

Committed r113853: &lt;http://trac.webkit.org/changeset/113853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600221</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 06:24:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136142</attachid>
            <date>2012-04-07 18:38:19 -0700</date>
            <delta_ts>2012-04-09 09:40:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78675-20120407183818.patch</filename>
            <type>text/plain</type>
            <size>34728</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWEzMWMyMWIzMjgyOTBk
MDBlZjE5OWE3MmZhOGIyM2RhZjA1YmNhNi4uMjYxZjMxNTQ1NTBlZDE1M2YyMDQwMmE3YmFjODNh
NjM4M2YwY2ZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBD
cmVhdGVkIHRoZSBHcmFwaGljc1N1cmZhY2UgY2xhc3MsIHdpdGggYW4gaW1wbGVtZW50YXRpb24g
Zm9yIE1hYywgdG8gYmUgdXNlZCBvbmx5IGluCisgICAgICAgIHRoZSBRdCBwb3J0IGZvciBub3cg
d2hlbiBydW5uaW5nIG9uIGEgTWFjLgorICAgICAgICBHcmFwaGljc1N1cmZhY2UgaXMgYSB3cmFw
cGVyIGZvciBhIHBsYXRmb3JtLXNwZWNpZmljIHN1cmZhY2UgaW1wbGVtZW50YXRpb24sIHdoaWNo
IGFsbG93cworICAgICAgICBjcmVhdGluZyBhIGJ1ZmZlciB3aGljaCBjYW4gYmUgZWZmaWNpZW50
bHkgcmVuZGVyZWQgdG8gYW5kIGZyb20gd2l0aCBib3RoIHNvZnR3YXJlIGFuZAorICAgICAgICBo
YXJkd2FyZS4KKworICAgICAgICBCZWNhdXNlIGltcGxlbWVudGF0aW9ucyBhcmUgdmVyeSBkZXBl
bmRhbnQgb24gdGhlIHBsYXRmb3JtLCB0aGUgaW50ZXJmYWNlIGFsbG93cyBvbmx5IGEKKyAgICAg
ICAgc2xpZ2h0bHkgaGlnaGVyLWxldmVsIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBHcmFwaGlj
c0NvbnRleHQgaW50byB0aGUgc3VyZmFjZSwgYW5kIGZvcgorICAgICAgICBjb3B5aW5nIGZyb20g
dGhlIHN1cmZhY2UgaW50byBhIEdMIHRleHR1cmUuIEZ1dHVyZSBhZGRpdGlvbnMgd2lsbCBpbmNs
dWRlIHJlbmRlcmluZyB3aXRoCisgICAgICAgIEdMIGRpcmVjdGx5IGludG8gdGhlIEdyYXBoaWNz
U3VyZmFjZSwgdG8gc3VwcG9ydCBjcm9zcy1wcm9jZXNzIEdyYXBoaWNzQ29udGV4dDNELgorCisg
ICAgICAgIFRvIGFsbG93IGZhc3QgY29weWluZyB0byB0ZXh0dXJlcyBvbiBNYWMsIFRleHR1cmVN
YXBwZXJHTCBoYXMgYmVlbiBtb2RpZmllZCB0byBzdXBwb3J0CisgICAgICAgIGNvbXBhdGlibGUg
YSBwaXhlbCBmb3JtYXQgZm9yIGNyZWF0ZWQgdGV4dHVyZXMuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3Jh
cGhpY3NTdXJmYWNlTWFjLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisKKzIwMTItMDQtMDcgIE5vJ2FtIFJvc2VudGhh
bCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0syXSBFbmFibGUgdXNp
bmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRhdGVzCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQyNAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggZWJhNDFhODczNDg2NDA2NWQyMjIyNmRiOWFhZjJiMDEzYTA5ZjBjNC4uNWRiZDE4NTk2
YTBiZTNmODZlZmYzMmQ3NTQ5NzI1MGQ2NjBjNTc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQz
IEBACiAyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CiAKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3
ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgU2hhcmVhYmxlQml0bWFwIHRvIGJlIGJhY2tlZCBi
eSBhIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIFNoYXJlYWJsZUJp
dG1hcCB3aXRoIHRoZSBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSBmbGFnLCBhIGNvbXBhdGlibGUK
KyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIHdpbGwgYmUgY3JlYXRlZC4gSWYgYSBHcmFwaGljc1N1
cmZhY2UgaXMgbm90IHN1Y2Nlc3NmdWxseSBjcmVhdGVkLAorICAgICAgICBhIHJlZ3VsYXIgU2hh
cmVkTWVtb3J5LWJhY2tlZCBTaGFyZWRCaXRtYXAgaXMgY3JlYXRlZCBpbnN0ZWFkLgorCisgICAg
ICAgIEFsbG93IExheWVyQmFja2luZ1N0b3JlIHRvIHVwZGF0ZSB0ZXh0dXJlcyBkaXJlY3RseSBm
cm9tIHRoZSBHcmFwaGljc1N1cmZhY2UsIGluc3RlYWQgb2YKKyAgICAgICAgY29weWluZyBwaXhl
bHMgdmlhIHVwZGF0ZUNvbnRlbnRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlV2l0aFN1cmZhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoK
KyAgICAgICAgKEhhbmRsZSk6CisgICAgICAgIChTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogU2hh
cmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZl
cnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisKKzIwMTItMDQtMDcgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0sy
XSBFbmFibGUgdXNpbmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRh
dGVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQy
NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCAxODg2M2JjODUyYmViZDEyYjk1NzI0YzNiNWM0OTUwMmVkYTAx
OGY5Li40NGNjMWQ4YmUxNDEyNTMyNTU4YTVjOTUwMDc2MTEzNGE1M2ExZTUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTExMDUsNiArMTEwNSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NWR0dseXBoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcCBcCkBAIC0yMjM4LDYgKzIyNDAsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1RpbGVkQmFja2luZ1N0b3JlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50LmggXApAQCAtNDA2OSw2ICs0MDcyLDEzIEBAIGNvbnRhaW5zKENPTkZJRywg
b3BlbmdsLXNoaW1zKSB7CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitj
b250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgbWFjIHsKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcAorICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycworICAgIH0KK30KKwogIyBNYWtlIHN1
cmUgdGhlIGRlcml2ZWQgc291cmNlcyBhcmUgYnVpbHQKIGluY2x1ZGUoRGVyaXZlZFNvdXJjZXMu
cHJpKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGY3NjFjZTk4MWJkZDY0OWIwYzU0ZWU2NzJlOTJkMGQy
MTA0ZWM3Y2YuLmNkYWViNzMyNzg0N2Y5MjMzN2QzODJlMmUyZTIxYzg1MjVlMTkwMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCkBAIC02MCw2ICs2MCw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0gXAogICAgICQkU09VUkNFX0RJUi9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wgXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFw
aGljcy9xdCBcCisgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIFwK
ICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyBcCiAgICAgJCRTT1VSQ0VfRElSL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzIFwKQEAgLTE5NCw2ICsxOTUsNyBAQCBjb250YWlucyhDT05G
SUcsIHRleG1hcCkgewogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJf
R0w9MQogICAgICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IExJQlMgKz0gLWxF
R0wKICAgICB9CisgICAgbWFjOiBMSUJTICs9IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdv
cmsgQ29yZUZvdW5kYXRpb24KIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9URVhUVVJF
X01BUFBFUl9HTD0xKXxjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dy
YXBoaWNzU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk3ZmYwNTRhZDljMWEwYmYzOWRjMzAxZDAy
ZjUwY2FkOGIwM2U4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK3sKKyAgICBS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3Vy
ZmFjZShzaXplLCBmbGFncykpOworICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9r
ZW4pKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZs
YWdzIGZsYWdzKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgaWYgKCFzdXJmYWNl
LT5wbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncykpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKwordWludDMyX3Qg
R3JhcGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRXhw
b3J0KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6
OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMp
Cit7CisgICAgaW50IHN0cmlkZSA9IDA7CisgICAgY2hhciogYml0cyA9IHBsYXRmb3JtTG9jayhy
ZWN0LCBzdHJpZGUsIGxvY2tPcHRpb25zKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBn
cmFwaGljc0NvbnRleHQgPSBwbGF0Zm9ybUJlZ2luUGFpbnQocmVjdC5zaXplKCksIGJpdHMsIHN0
cmlkZSk7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NTdXJmYWNlOjpjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSwgdGFy
Z2V0UmVjdCwgb2Zmc2V0KTsKK30KKworR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX3BsYXRmb3JtU3VyZmFjZSgwKQorICAgICwgbV90
ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQoreworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE1YjU5MDBkY2RjYTcyZjA0NjYyYTU3MDA0MjMwZDNiMjJj
ODNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc1N1cmZhY2VfaAor
I2RlZmluZSBHcmFwaGljc1N1cmZhY2VfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlBh
c3NPd25QdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgi
CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBPUyhEQVJXSU4pCit0eXBlZGVmIHN0
cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwordHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZW5kaWYKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NTdXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NTdXJmYWNlPiB7
CitwdWJsaWM6CisgICAgZW51bSBGbGFnIHsKKyAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDB4MDEs
CisgICAgICAgIFN1cHBvcnRzU29mdHdhcmVXcml0ZSA9IDB4MDIsCisgICAgICAgIFN1cHBvcnRz
U29mdHdhcmVSZWFkID0gMHgwNCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlVGFyZ2V0ID0gMHgw
OCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlU291cmNlID0gMHgxMCwKKyAgICAgICAgU3VwcG9y
dHNDb3B5VG9UZXh0dXJlID0gMHgyMCwKKyAgICAgICAgU3VwcG9ydHNDb3B5RnJvbVRleHR1cmUg
PSAweDQwLAorICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAweDgwCisgICAgfTsKKworICAgIGVu
dW0gTG9ja09wdGlvbiB7CisgICAgICAgIFJldGFpblBpeGVscyA9IDB4MDEsCisgICAgICAgIFJl
YWRPbmx5ID0gMHgwMgorICAgIH07CisKKyAgICB0eXBlZGVmIGludCBGbGFnczsKKyAgICB0eXBl
ZGVmIGludCBMb2NrT3B0aW9uczsKKworICAgIEZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFnczsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIHBsYXRmb3JtU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOyB9CisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgdWlu
dDMyX3QgdG9rZW4pOworICAgIHZvaWQgY29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNvdXJjZU9mZnNldCk7CisgICAgdWludDMyX3QgZXhwb3J0VG9rZW4oKTsKKyAgICBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9ja09w
dGlvbnMpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRT
aXplJiwgRmxhZ3MpOworICAgIGJvb2wgcGxhdGZvcm1JbXBvcnQodWludDMyX3QpOworICAgIHVp
bnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CisgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKwor
ICAgIGNoYXIqIHBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiwgaW50JiBzdHJpZGUsIExvY2tP
cHRpb25zKTsKKyAgICB2b2lkIHBsYXRmb3JtVW5sb2NrKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNv
cHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+IHBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJbnRTaXplJiwgY2hhciogYml0cywgaW50IHN0
cmlkZSk7CisKK3Byb3RlY3RlZDoKKyAgICBMb2NrT3B0aW9ucyBtX2xvY2tPcHRpb25zOworICAg
IEZsYWdzIG1fZmxhZ3M7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NTdXJmYWNlKGNvbnN0IElu
dFNpemUmLCBGbGFncyk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBzdGF0aWMgdm9pZCBkaWRS
ZWxlYXNlSW1hZ2Uodm9pZCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSW50U2l6ZSBtX3Np
emU7CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAg
dWludDMyX3QgbV90ZXh0dXJlOworICAgIHVpbnQzMl90IG1fZmJvOworfTsKKworfQorI2VuZGlm
IC8vIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjZW5kaWYgLy8gR3JhcGhpY3NTdXJmYWNlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21h
Yy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY3NGRi
ODRkOWQyZDVkNzI0NGRiYTkzODhlZTAxNzIxYWNmZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZh
Y2VNYWMuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFj
ZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpICYmIE9TKERBUldJTikKKyNpbmNsdWRl
IDxDRk51bWJlci5oPgorI2luY2x1ZGUgPENHTENvbnRleHQuaD4KKyNpbmNsdWRlIDxDR0xDdXJy
ZW50Lmg+CisjaW5jbHVkZSA8Q0dMSU9TdXJmYWNlLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lP
U3VyZmFjZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordWludDMyX3QgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZUdldElEKG1f
cGxhdGZvcm1TdXJmYWNlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9T
dXJmYWNlUmVmIGhhbmRsZSkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgR0x1aW50
IGZvcm1hdCA9IEdMX0JHUkE7CisgICAgR0x1aW50IHR5cGUgPSBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVY7CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBDR0xD
b250ZXh0T2JqIGNvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTGludCBwcmV2VGV4dHVyZTsKKyAgICBH
TGJvb2xlYW4gd2FzRW5hYmxlZCA9IGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsICZwcmV2VGV4
dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIpOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBDR0xF
cnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY29udGV4dCwgR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgSU9TdXJmYWNlR2V0V2lkdGgoaGFuZGxlKSwg
SU9TdXJmYWNlR2V0SGVpZ2h0KGhhbmRsZSksIGZvcm1hdCwgdHlwZSwgaGFuZGxlLCAwKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgICAgIHRleHR1cmUgPSAwOworICAgIH0KKworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCBwcmV2VGV4dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAg
ICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJl
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRS
SUJfQklUUyk7CisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0
ZVRleHR1cmUobV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIGlmICghbV9mYm8pCisgICAgICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIDApOworICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xFbmFibGUodGFyZ2V0KTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgaWQp
OworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDAs
IDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIDApOworICAg
IGdsUG9wQXR0cmliKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sKKyAgICB1bnNpZ25lZCBwaXhl
bEZvcm1hdCA9ICdCR1JBJzsKKyAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OworICAg
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKworICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3Bl
cnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOworICAg
IGlmICghYnl0ZXNQZXJSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVk
IGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NT
aXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CisgICAgaWYgKCFhbGxvY1NpemUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IHZvaWQgKmtleXNbN107CisgICAgY29uc3Qgdm9p
ZCAqdmFsdWVzWzddOworICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7CisgICAgdmFsdWVz
WzBdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICBr
ZXlzWzFdID0ga0lPU3VyZmFjZUhlaWdodDsKKyAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICBrZXlzWzJdID0ga0lPU3VyZmFj
ZVBpeGVsRm9ybWF0OworICAgIHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckludFR5cGUsICZwaXhlbEZvcm1hdCk7CisgICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1Bl
ckVsZW1lbnQ7CisgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50
VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1Bl
clJvdzsKKyAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlw
ZSwgJmJ5dGVzUGVyUm93KTsKKyAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKKyAg
ICB2YWx1ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9j
U2l6ZSk7CisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2JhbDsKKyAgICB2YWx1ZXNbNl0g
PSAoZmxhZ3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFu
VHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKKworICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDc7IGkrKykKKyAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7
CisKKyAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKyAgICBy
ZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsKK30KKworYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtSW1wb3J0KHVpbnQzMl90IHRva2VuKQoreworICAgIG1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlTG9va3VwKHRva2VuKTsKKyAgICByZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsK
K30KKworc3RhdGljIGludCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhpbnQgbG9ja09wdGlvbnMpCit7
CisgICAgaW50IG9wdGlvbnMgPSAwOworICAgIGlmIChsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3Vy
ZmFjZTo6UmVhZE9ubHkpCisgICAgICAgIG9wdGlvbnMgfD0ga0lPU3VyZmFjZUxvY2tSZWFkT25s
eTsKKyAgICBpZiAoIShsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3VyZmFjZTo6UmV0YWluUGl4ZWxz
KSkKKyAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja0F2b2lkU3luYzsKKyAgICByZXR1
cm4gb3B0aW9uczsKK30KKworc3RhdGljIGludCBpb1N1cmZhY2VVbmxvY2tPcHRpb25zKGludCBs
b2NrT3B0aW9ucykKK3sKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAgaWYgKGxvY2tPcHRpb25z
ICYgR3JhcGhpY3NTdXJmYWNlOjpSZWFkT25seSkKKyAgICAgICAgb3B0aW9ucyB8PSAoa0lPU3Vy
ZmFjZUxvY2tBdm9pZFN5bmMgfCBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5KTsKKyAgICByZXR1cm4g
b3B0aW9uczsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2soY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50JiBzdHJpZGUsIExvY2tPcHRpb25zIGxvY2tPcHRpb25zKQorewor
ICAgIG1fbG9ja09wdGlvbnMgPSBsb2NrT3B0aW9uczsKKyAgICBJT1N1cmZhY2VMb2NrKG1fcGxh
dGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7Cisg
ICAgc3RyaWRlID0gSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3cobV9wbGF0Zm9ybVN1cmZhY2UpOwor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJl
c3MobV9wbGF0Zm9ybVN1cmZhY2UpKTsKKyAgICByZXR1cm4gYmFzZSArIHN0cmlkZSAqIHJlY3Qu
eSgpICsgcmVjdC54KCkgKiA0OworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1V
bmxvY2soKQoreworICAgIElPU3VyZmFjZVVubG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJm
YWNlVW5sb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSAmICh+a0lPU3VyZmFjZUxvY2tBdm9pZFN5
bmMpLCAwKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7
CisgICAgaWYgKG1fZmJvKQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8p
OworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX3BsYXRmb3JtU3VyZmFjZSkpOwor
fQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZjBjYTJhMTU3NWFiMWRiOWRmMjJlMDNlMDRhMWFkMmRiZTUyMDBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3Jh
cGhpY3NTdXJmYWNlUXQuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkgJiYgUExBVEZPUk0oUVQp
CisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQYWludGVyPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6ZGlkUmVsZWFzZUltYWdlKHZvaWQqIGRhdGEp
Cit7CisgICAgR3JhcGhpY3NTdXJmYWNlKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NT
dXJmYWNlKj4oZGF0YSk7CisgICAgc3VyZmFjZS0+cGxhdGZvcm1VbmxvY2soKTsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBh
aW50KGNvbnN0IEludFNpemUmIHNpemUsIGNoYXIqIGJpdHMsIGludCBzdHJpZGUpCit7CisgICAg
UUltYWdlOjpGb3JtYXQgZm9ybWF0ID0gKGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhKSA/IFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfUkdCMzI7CisK
KyAgICAvLyBUaGUgaW1hZ2UgYW5kIHBhaW50ZXIgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBy
ZXR1cm5lZCBHcmFwaGljc0NvbnRleHQgaXMgcmVsZWFzZWQuCisgICAgUUltYWdlKiBpbWFnZSA9
IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGJpdHMpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIHN0cmlkZSwgZm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2UsIHRoaXMpOwor
ICAgIFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyKGltYWdlKTsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0KHBhaW50ZXIpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRha2VPd25lcnNoaXBPZlBs
YXRmb3JtQ29udGV4dCgpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwor
fQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDAyMzFkNjc5YmU2OTg1ZjYz
NWMzNDlhNzcwMDhjMjE1YzdjOWVjYmYuLmNkMjY0ZTAzOTEwMDU3N2NkZDZhN2UyMjk4MGUyNzFh
MzFlOWMxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC00MDQsNyArNDA0LDExIEBAIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiAgICAgICAgIEdMX0NNRChnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKQog
ICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSkKICAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpCisj
aWYgT1MoREFSV0lOKQorICAgICAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQo
KSwgMCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCAwKSkKKyNlbHNlCiAg
ICAgICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90
ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAwKSkKKyNlbmRpZgogICAgIH0KIAogICAgIG1fc3VyZmFjZU5lZWRz
UmVzZXQgPSB0cnVlOwpAQCAtNDQ2LDcgKzQ1MCwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dAogICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAv
IDQpOwogICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0
LnkoKSk7CiAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9m
ZnNldC54KCkpOworI2lmIE9TKERBUldJTikKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVj
dC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfSU5U
XzhfOF84XzhfUkVWLCAoY29uc3QgY2hhciopZGF0YSkpCisjZWxzZQogICAgIEdMX0NNRChnbFRl
eFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisjZW5kaWYKICAgICBnbFBpeGVs
U3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsKICAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19TS0lQX1JPV1MsIDApOwogICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElY
RUxTLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRt
YXAuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAKaW5kZXgg
N2RlMTUxZWIyNjgwODAxMTdmYzAyNjUyYWEzYmE5NzUzZjdiMDcxOC4uMzJkMzZmNmRhMmRhNTZj
MzBiNTU0NGM1NTc0MGRkYWE4M2E0OTcxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJl
YWJsZUJpdG1hcC5jcHAKQEAgLTM2LDYgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5kbGUoKQogICAgIDogbV9mbGFncygwKQorI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgICwgbV9ncmFwaGljc1N1cmZhY2VUb2tlbigwKQorI2Vu
ZGlmCiB7CiB9CiAKQEAgLTQ0LDYgKzQ3LDkgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKICAgICBl
bmNvZGVyLT5lbmNvZGUobV9oYW5kbGUpOwogICAgIGVuY29kZXItPmVuY29kZShtX3NpemUpOwog
ICAgIGVuY29kZXItPmVuY29kZShtX2ZsYWdzKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyAgICBlbmNvZGVyLT5lbmNvZGUobV9ncmFwaGljc1N1cmZhY2VUb2tlbik7CisjZW5kaWYKIH0K
IAogYm9vbCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCkBAIC01NCw2ICs2MCwxMCBAQCBib29s
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBIYW5kbGUmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShoYW5kbGUubV9mbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9n
cmFwaGljc1N1cmZhY2VUb2tlbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC03MCwxMyArODAsMTggQEAgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZs
YWdzIGYKIAogUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlU2hhcmVhYmxlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQogeworI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IGNyZWF0ZVdpdGhTdXJmYWNlKHNpemUsIGZsYWdzKTsKKyAgICBpZiAoYml0bWFwKQorICAgICAg
ICByZXR1cm4gYml0bWFwOworI2VuZGlmCiAgICAgc2l6ZV90IG51bUJ5dGVzID0gbnVtQnl0ZXNG
b3JTaXplKHNpemUpOwogCiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUobnVtQnl0ZXMpOwogICAgIGlmICghc2hhcmVkTWVtb3J5KQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0
bWFwKHNpemUsIGZsYWdzLCBzaGFyZWRNZW1vcnkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNoYXJlYWJsZUJpdG1hcChzaXplLCBmbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KHNo
YXJlZE1lbW9yeSkpKTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBQYXNzUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KQpAQCAtODksOCArMTA0LDM3IEBAIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBGbGFncyBmCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRt
YXAoc2l6ZSwgZmxhZ3MsIHNoYXJlZE1lbW9yeSkpOwogfQogCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCitQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVXaXRoU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sKKyAgICBp
ZiAoIShmbGFncyAmIFN1cHBvcnRzR3JhcGhpY3NTdXJmYWNlKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9CisgICAgICAgICAg
ICBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU29mdHdhcmVXcml0ZQorICAgICAgICAgICAgfCBH
cmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQ29weVRvVGV4dHVyZQorICAgICAgICAgICAgfCBHcmFw
aGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0Fs
cGhhKQorICAgICAgICBzdXJmYWNlRmxhZ3MgfD0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0Fs
cGhhOworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBHcmFwaGljc1N1cmZh
Y2U6OmNyZWF0ZShzaXplLCBzdXJmYWNlRmxhZ3MpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoc3VyZmFjZSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgZmxhZ3MsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPihzdXJmYWNlKSkpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKIHsKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4pIHsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBoYW5kbGUubV9n
cmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlYWJsZUJpdG1hcCho
YW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+
KHN1cmZhY2UpKSk7CisgICAgfQorI2VuZGlmCiAgICAgLy8gQ3JlYXRlIHRoZSBzaGFyZWQgbWVt
b3J5LgogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6Y3JlYXRlKGhhbmRsZS5tX2hhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGUpOwogICAg
IGlmICghc2hhcmVkTWVtb3J5KQpAQCAtMTAxLDYgKzE0NSwxNCBAQCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUp
CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUpCiB7
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKG1fZ3JhcGhpY3NTdXJmYWNlKSB7
CisgICAgICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisgICAgICAgIGhhbmRsZS5tX2ZsYWdz
ID0gbV9mbGFnczsKKyAgICAgICAgaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4gPSBtX2dy
YXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorI2VuZGlmCiAgICAgQVNTRVJUKGlzQmFja2VkQnlTaGFyZWRNZW1vcnkoKSk7CiAKICAgICBp
ZiAoIW1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLm1faGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlJlYWRXcml0ZSkpCkBAIC0xMjUsNiArMTc3LDE3IEBAIFNoYXJlYWJsZUJpdG1hcDo6
U2hhcmVhYmxlQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBQYXNzUmVm
UHRyPFNoCiB7CiB9CiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK1NoYXJlYWJsZUJpdG1h
cDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAg
ICwgbV9mbGFncyhmbGFncykKKyAgICAsIG1fZ3JhcGhpY3NTdXJmYWNlKHN1cmZhY2UpCisgICAg
LCBtX2RhdGEoMCkKK3sKK30KKyNlbmRpZgorCisjaWYgIVVTRShHUkFQSElDU19TVVJGQUNFKQog
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7CiAgICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gY3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CkBAIC0xMzIsNiArMTk1LDcgQEAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnMKICAg
ICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwogICAgIHJl
dHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwogfQorI2VuZGlmCiAKIFNoYXJlYWJsZUJp
dG1hcDo6flNoYXJlYWJsZUJpdG1hcCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxl
Qml0bWFwLmgKaW5kZXggZjNjZDIxM2UzNDFjOTg0YmI2YTU4Y2NhYTkyYTQwOWZjMGMzODBkNy4u
YWUzOGNmMDVkOWYwNzExOWQyMjAyODBmNzE2OTJlN2Q0N2M4YTQzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaApAQCAtNTAsNiArNTAsMTAgQEAgbmFtZXNwYWNlIFdl
YktpdCB7IHVzaW5nIFdlYkNvcmU6OlJlZ2lvbjsgfQogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CkBAIC02MSw2ICs2NSw5IEBAIGNsYXNzIFNoYXJlYWJsZUJpdG1hcCA6IHB1
YmxpYyBSZWZDb3VudGVkPFNoYXJlYWJsZUJpdG1hcD4gewogcHVibGljOgogICAgIGVudW0gRmxh
ZyB7CiAgICAgICAgIFN1cHBvcnRzQWxwaGEgPSAxIDw8IDAsCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgICAgIFN1cHBvcnRzR3JhcGhpY3NTdXJmYWNlID0gKDEgPDwgMSkKKyNlbmRp
ZgogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBGbGFnczsKIApAQCAtNzksNiArODYsOSBA
QCBwdWJsaWM6CiAKICAgICAgICAgbXV0YWJsZSBTaGFyZWRNZW1vcnk6OkhhbmRsZSBtX2hhbmRs
ZTsKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47CisjZW5kaWYK
ICAgICAgICAgRmxhZ3MgbV9mbGFnczsKICAgICB9OwogCkBAIC05MSw2ICsxMDEsMTEgQEAgcHVi
bGljOgogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhbiBhbHJlYWR5IGV4
aXN0aW5nIHNoYXJlZCBtZW1vcnkgYmxvY2suCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzLCBQYXNzUmVm
UHRyPFNoYXJlZE1lbW9yeT4pOwogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgLy8g
Q3JlYXRlIGEgc2hhcmVhYmxlIGJpdG1hcCBiYWNrZWQgYnkgYSBncmFwaGljcyBzdXJmYWNlLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlV2l0aFN1cmZhY2Uo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzKTsKKyNlbmRpZgorCiAgICAgLy8gQ3JlYXRl
IGEgc2hhcmVhYmxlIGJpdG1hcCBmcm9tIGEgaGFuZGxlLgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlKGNvbnN0IEhhbmRsZSYpOwogCkBAIC0xMzksMTAgKzE1
NCwxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVsZWFzZVNoYXJlZE1lbW9yeURhdGEo
dm9pZCogdHlwZWxlc3NCaXRtYXApOwogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gZ3JhcGhpY3NTdXJm
YWNlKCkgeyByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2U7IH0KKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIFNoYXJlYWJsZUJpdG1hcChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgRmxhZ3MsIHZvaWQq
KTsKICAgICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzLCBQ
YXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4pOwogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgU2hhcmVhYmxlQml0bWFwKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncywgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKKyNlbmRpZgorCiAgICAgc3RhdGljIHNp
emVfdCBudW1CeXRlc0ZvclNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgeyByZXR1
cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7IH0KIAogI2lmIFVTRShDRykKQEAg
LTE2Nyw2ICsxOTAsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBJZiB0aGUgc2hhcmVhYmxlIGJpdG1h
cCBpcyBiYWNrZWQgYnkgZmFzdE1hbGxvY2VkIG1lbW9yeSwgdGhpcyBwb2ludHMgdG8gdGhlIGRh
dGEuCiAgICAgdm9pZCogbV9kYXRhOwogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAg
UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBtdXRhYmxlIE93blB0cjxIREM+IG1fd2luZG93
c0NvbnRleHQ7CiAgICAgbXV0YWJsZSBPd25QdHI8SEJJVE1BUD4gbV93aW5kb3dzQml0bWFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKaW5kZXgg
MGM4YmUwNzJhNDYyZDYzZmMwNjI3MDhjMDFlYzVhNmZjMjFmZWQzYi4uMGFlNjNmZDUyNjY1YzE5
MGFlOTViZDNhYWY5N2NhZDA5ZDhjZTYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCkBAIC02NCw2ICs2NCwxOCBAQCBQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQog
ICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAorI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KG1fZ3JhcGhpY3NTdXJmYWNlKQorICAgICAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmJl
Z2luUGFpbnQocmVjdCwgMCAvKiBMb2NrT3B0aW9ucyAqLyk7CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNs
YXRlKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxl
YXNlKCk7Cit9CisjZW5kaWYKKwogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0KQogewogICAgIFFJbWFnZSBpbWFnZSA9IGNyZWF0ZVFJbWFnZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
ZmVlMGM5MDYyMjBmNDE4ZGE1M2QxYjFjNGIzM2VmM2E4MWY1MDAwOC4uZGNkYzQyYjk0NmJhOGZm
YzhiOGE0MjM4NjFiNDNiYjczMTgyM2M3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC00OCw2ICs0OCwyMCBAQCB2b2lkIExh
eWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlcikKICAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOwogICAgIH0KIAorI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZh
Y2UgPSBtX2JhY2tCdWZmZXItPmdyYXBoaWNzU3VyZmFjZSgpOworICAgIGlmIChzdXJmYWNlKSB7
CisgICAgICAgIGlmIChzaG91bGRSZXNldCkKKyAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KG1f
c291cmNlUmVjdC5zaXplKCksIChzdXJmYWNlLT5mbGFncygpICYgR3JhcGhpY3NTdXJmYWNlOjpT
dXBwb3J0c0FscGhhKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICAg
ICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVy
OjpPcGVuR0xNb2RlKSB7CisgICAgICAgICAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmVHTCA9
IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHRleHR1cmUuZ2V0KCkpOworICAgICAgICAg
ICAgc3VyZmFjZS0+Y29weVRvR0xUZXh0dXJlKHRleHR1cmVHTC0+dGV4dHVyZVRhcmdldCgpLCB0
ZXh0dXJlR0wtPmlkKCksIG1fc291cmNlUmVjdCwgbV9iaXRtYXBPZmZzZXQpOworICAgICAgICB9
CisgICAgICAgIG1fYmFja0J1ZmZlci5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKICAgICBRSW1hZ2UgcUltYWdlID0gbV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2Uo
KTsKICAgICBpZiAoc2hvdWxkUmVzZXQpCiAgICAgICAgIHRleHR1cmUtPnJlc2V0KG1fc291cmNl
UmVjdC5zaXplKCksIHFJbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1
cHBvcnRzQWxwaGEgOiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuY3BwCmluZGV4IDQ3YmRmODdiN2UzMjJjNGU0MjdkMzI3YWFlYjg1YTQ5
YjdlNWY1MjcuLjJhMGQ0ZGIxOWY3MGYyZTJiYzMyY2ZjMTVjMjc1MjY2ZWM0ODBlZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApA
QCAtMzIsNiArMzIsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFVwZGF0ZUF0bGFzOjpVcGRhdGVB
dGxhcyhpbnQgZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQogICAgIDog
bV9mbGFncyhmbGFncykKIHsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBmbGFncyB8
PSBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzR3JhcGhpY3NTdXJmYWNlOworI2VuZGlmCiAgICAg
bV9iaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGRpbWVu
c2lvbiwgZGltZW5zaW9uKSwgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGFiOTEwYzczZTY2ZDFmMjNhNzAzMTZkNWNiMGYy
YWRiNDNlMDhlOS4uNDZiZTRhMDFkZWQ2MzUxMWIxZWNiMDgzZTU3NmVlZDI3NDRiZDUxZCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRo
ZSB3ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgZ3JhcGhpY3Mgc3VyZmFjZXMgb24gTWFjIGZv
ciBRdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTA0LTAxICBUb255
IFRzZXVuZyAgPHRzZXVuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29tcG9zaXRlIEZvbnQgUmVm
ZXJlbmNlcyBpcyBhIG5ldyBlc3RhYmxpc2hlZCBzdGFuZGFyZCAoSVNPL0lFQyAxNDQ5Ni0yODoy
MDEyKSBmb3Igc3BlY2lmeWluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZgppbmRleCBkODVjN2RjNDdjMmFlYTQ4MDA1YTBjMjdhNDI4OTdjYmUyMGNmMWYxLi43NDZl
NTA5ODMxYWQ2OWFmNTM1Mzg2ZjQ0NzRkNGFjYjljMDMyMDcxIDEwMDY0NAotLS0gYS9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtMTgsNiArMTgsMTEgQEAgbWVlZ290b3VjaCB7
CiAgICAgREVGSU5FUyArPSBXVEZfVVNFX01FRUdPVE9VQ0g9MQogfQogCittYWM6IENPTkZJRyAr
PSBncmFwaGljc19zdXJmYWNlcworY29udGFpbnMoQ09ORklHLCBncmFwaGljc19zdXJmYWNlcykg
eworICAgIERFRklORVMgKz0gV1RGX1VTRV9HUkFQSElDU19TVVJGQUNFPTEKK30KKwogIyMgbG9h
ZCBtb2JpbGl0eWNvbmZpZyBpZiBtb2JpbGl0eSBpcyBhdmFpbGFibGUKIGxvYWQobW9iaWxpdHlj
b25maWcsIHRydWUpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136241</attachid>
            <date>2012-04-09 09:40:52 -0700</date>
            <delta_ts>2012-04-09 22:12:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78675-20120409094049.patch</filename>
            <type>text/plain</type>
            <size>36352</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNjNiMTVhZTMwNmRi
ZGY5Y2ViZmVhODg5YTNiN2MzMmEzZDkwNC4uM2M2YjRhNDc5MGI4ODU4NjA2ZjZiMjU2OWI0Njk2
OWU1ZGZjMzZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTA0LTA3ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBD
cmVhdGVkIHRoZSBHcmFwaGljc1N1cmZhY2UgY2xhc3MsIHdpdGggYW4gaW1wbGVtZW50YXRpb24g
Zm9yIE1hYywgdG8gYmUgdXNlZCBvbmx5IGluCisgICAgICAgIHRoZSBRdCBwb3J0IGZvciBub3cg
d2hlbiBydW5uaW5nIG9uIGEgTWFjLgorICAgICAgICBHcmFwaGljc1N1cmZhY2UgaXMgYSB3cmFw
cGVyIGZvciBhIHBsYXRmb3JtLXNwZWNpZmljIHN1cmZhY2UgaW1wbGVtZW50YXRpb24sIHdoaWNo
IGFsbG93cworICAgICAgICBjcmVhdGluZyBhIGJ1ZmZlciB3aGljaCBjYW4gYmUgZWZmaWNpZW50
bHkgcmVuZGVyZWQgdG8gYW5kIGZyb20gd2l0aCBib3RoIHNvZnR3YXJlIGFuZAorICAgICAgICBo
YXJkd2FyZS4KKworICAgICAgICBCZWNhdXNlIGltcGxlbWVudGF0aW9ucyBhcmUgdmVyeSBkZXBl
bmRhbnQgb24gdGhlIHBsYXRmb3JtLCB0aGUgaW50ZXJmYWNlIGFsbG93cyBvbmx5IGEKKyAgICAg
ICAgc2xpZ2h0bHkgaGlnaGVyLWxldmVsIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBHcmFwaGlj
c0NvbnRleHQgaW50byB0aGUgc3VyZmFjZSwgYW5kIGZvcgorICAgICAgICBjb3B5aW5nIGZyb20g
dGhlIHN1cmZhY2UgaW50byBhIEdMIHRleHR1cmUuIEZ1dHVyZSBhZGRpdGlvbnMgd2lsbCBpbmNs
dWRlIHJlbmRlcmluZyB3aXRoCisgICAgICAgIEdMIGRpcmVjdGx5IGludG8gdGhlIEdyYXBoaWNz
U3VyZmFjZSwgdG8gc3VwcG9ydCBjcm9zcy1wcm9jZXNzIEdyYXBoaWNzQ29udGV4dDNELgorCisg
ICAgICAgIFRvIGFsbG93IGZhc3QgY29weWluZyB0byB0ZXh0dXJlcyBvbiBNYWMsIFRleHR1cmVN
YXBwZXJHTCBoYXMgYmVlbiBtb2RpZmllZCB0byBzdXBwb3J0CisgICAgICAgIGNvbXBhdGlibGUg
YSBwaXhlbCBmb3JtYXQgZm9yIGNyZWF0ZWQgdGV4dHVyZXMuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3Jh
cGhpY3NTdXJmYWNlTWFjLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisKKzIwMTItMDQtMDcgIE5vJ2FtIFJvc2VudGhh
bCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0syXSBFbmFibGUgdXNp
bmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRhdGVzCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQyNAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggNGRlYWMyOTBjMjM4ZjBjNzgwYTQ3NzZiMTA2NDBhMDBjZWRhODBjMC4uMDZhNmFkNmI0
ZjY3YzRiOGUzYjg1Y2U4MDAzZTNjNzYyNjA1YjRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQz
IEBACiAyMDEyLTA0LTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CiAKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3
ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgU2hhcmVhYmxlQml0bWFwIHRvIGJlIGJhY2tlZCBi
eSBhIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIFNoYXJlYWJsZUJp
dG1hcCB3aXRoIHRoZSBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSBmbGFnLCBhIGNvbXBhdGlibGUK
KyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIHdpbGwgYmUgY3JlYXRlZC4gSWYgYSBHcmFwaGljc1N1
cmZhY2UgaXMgbm90IHN1Y2Nlc3NmdWxseSBjcmVhdGVkLAorICAgICAgICBhIHJlZ3VsYXIgU2hh
cmVkTWVtb3J5LWJhY2tlZCBTaGFyZWRCaXRtYXAgaXMgY3JlYXRlZCBpbnN0ZWFkLgorCisgICAg
ICAgIEFsbG93IExheWVyQmFja2luZ1N0b3JlIHRvIHVwZGF0ZSB0ZXh0dXJlcyBkaXJlY3RseSBm
cm9tIHRoZSBHcmFwaGljc1N1cmZhY2UsIGluc3RlYWQgb2YKKyAgICAgICAgY29weWluZyBwaXhl
bHMgdmlhIHVwZGF0ZUNvbnRlbnRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlV2l0aFN1cmZhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoK
KyAgICAgICAgKEhhbmRsZSk6CisgICAgICAgIChTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICogU2hh
cmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZl
cnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisKKzIwMTItMDQtMDcgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbV0sy
XSBFbmFibGUgdXNpbmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRh
dGVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzQy
NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCBjZDdlNTcyOGI1YmVkOTMxMWJmYTgwYTM5ZTNiZDg2MWFmMmQy
MmYyLi42M2I2OTBmNGVhMDQwMmUzY2UyNGZmNjIxMzdlYzc3NzFkNzUyZmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTExMDYsNiArMTEwNiw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NWR0dseXBoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcCBcCkBAIC0yMjQyLDYgKzIyNDQsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1RpbGVkQmFja2luZ1N0b3JlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50LmggXApAQCAtNDA3Nyw2ICs0MDgwLDEzIEBAIGNvbnRhaW5zKENPTkZJRywg
b3BlbmdsLXNoaW1zKSB7CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitj
b250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgbWFjIHsKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcAorICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycworICAgIH0KK30KKwogIyBNYWtlIHN1
cmUgdGhlIGRlcml2ZWQgc291cmNlcyBhcmUgYnVpbHQKIGluY2x1ZGUoRGVyaXZlZFNvdXJjZXMu
cHJpKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGY3NjFjZTk4MWJkZDY0OWIwYzU0ZWU2NzJlOTJkMGQy
MTA0ZWM3Y2YuLmNkYWViNzMyNzg0N2Y5MjMzN2QzODJlMmUyZTIxYzg1MjVlMTkwMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCkBAIC02MCw2ICs2MCw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0gXAogICAgICQkU09VUkNFX0RJUi9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wgXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFw
aGljcy9xdCBcCisgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIFwK
ICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIFwKICAgICAkJFNPVVJD
RV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyBcCiAgICAgJCRTT1VSQ0VfRElSL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzIFwKQEAgLTE5NCw2ICsxOTUsNyBAQCBjb250YWlucyhDT05G
SUcsIHRleG1hcCkgewogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJf
R0w9MQogICAgICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IExJQlMgKz0gLWxF
R0wKICAgICB9CisgICAgbWFjOiBMSUJTICs9IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdv
cmsgQ29yZUZvdW5kYXRpb24KIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9URVhUVVJF
X01BUFBFUl9HTD0xKXxjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dy
YXBoaWNzU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk3ZmYwNTRhZDljMWEwYmYzOWRjMzAxZDAy
ZjUwY2FkOGIwM2U4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK3sKKyAgICBS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3Vy
ZmFjZShzaXplLCBmbGFncykpOworICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9r
ZW4pKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZs
YWdzIGZsYWdzKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgaWYgKCFzdXJmYWNl
LT5wbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncykpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKwordWludDMyX3Qg
R3JhcGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRXhw
b3J0KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6
OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMp
Cit7CisgICAgaW50IHN0cmlkZSA9IDA7CisgICAgY2hhciogYml0cyA9IHBsYXRmb3JtTG9jayhy
ZWN0LCBzdHJpZGUsIGxvY2tPcHRpb25zKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBn
cmFwaGljc0NvbnRleHQgPSBwbGF0Zm9ybUJlZ2luUGFpbnQocmVjdC5zaXplKCksIGJpdHMsIHN0
cmlkZSk7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NTdXJmYWNlOjpjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSwgdGFy
Z2V0UmVjdCwgb2Zmc2V0KTsKK30KKworR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX3BsYXRmb3JtU3VyZmFjZSgwKQorICAgICwgbV90
ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQoreworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE1YjU5MDBkY2RjYTcyZjA0NjYyYTU3MDA0MjMwZDNiMjJj
ODNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc1N1cmZhY2VfaAor
I2RlZmluZSBHcmFwaGljc1N1cmZhY2VfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlBh
c3NPd25QdHIuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgi
CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBPUyhEQVJXSU4pCit0eXBlZGVmIHN0
cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwordHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZW5kaWYKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NTdXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NTdXJmYWNlPiB7
CitwdWJsaWM6CisgICAgZW51bSBGbGFnIHsKKyAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDB4MDEs
CisgICAgICAgIFN1cHBvcnRzU29mdHdhcmVXcml0ZSA9IDB4MDIsCisgICAgICAgIFN1cHBvcnRz
U29mdHdhcmVSZWFkID0gMHgwNCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlVGFyZ2V0ID0gMHgw
OCwKKyAgICAgICAgU3VwcG9ydHNUZXh0dXJlU291cmNlID0gMHgxMCwKKyAgICAgICAgU3VwcG9y
dHNDb3B5VG9UZXh0dXJlID0gMHgyMCwKKyAgICAgICAgU3VwcG9ydHNDb3B5RnJvbVRleHR1cmUg
PSAweDQwLAorICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAweDgwCisgICAgfTsKKworICAgIGVu
dW0gTG9ja09wdGlvbiB7CisgICAgICAgIFJldGFpblBpeGVscyA9IDB4MDEsCisgICAgICAgIFJl
YWRPbmx5ID0gMHgwMgorICAgIH07CisKKyAgICB0eXBlZGVmIGludCBGbGFnczsKKyAgICB0eXBl
ZGVmIGludCBMb2NrT3B0aW9uczsKKworICAgIEZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFnczsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIHBsYXRmb3JtU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOyB9CisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgdWlu
dDMyX3QgdG9rZW4pOworICAgIHZvaWQgY29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNvdXJjZU9mZnNldCk7CisgICAgdWludDMyX3QgZXhwb3J0VG9rZW4oKTsKKyAgICBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9ja09w
dGlvbnMpOworCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRT
aXplJiwgRmxhZ3MpOworICAgIGJvb2wgcGxhdGZvcm1JbXBvcnQodWludDMyX3QpOworICAgIHVp
bnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CisgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKwor
ICAgIGNoYXIqIHBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiwgaW50JiBzdHJpZGUsIExvY2tP
cHRpb25zKTsKKyAgICB2b2lkIHBsYXRmb3JtVW5sb2NrKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNv
cHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+IHBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJbnRTaXplJiwgY2hhciogYml0cywgaW50IHN0
cmlkZSk7CisKK3Byb3RlY3RlZDoKKyAgICBMb2NrT3B0aW9ucyBtX2xvY2tPcHRpb25zOworICAg
IEZsYWdzIG1fZmxhZ3M7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NTdXJmYWNlKGNvbnN0IElu
dFNpemUmLCBGbGFncyk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBzdGF0aWMgdm9pZCBkaWRS
ZWxlYXNlSW1hZ2Uodm9pZCopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSW50U2l6ZSBtX3Np
emU7CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9wbGF0Zm9ybVN1cmZhY2U7CisgICAg
dWludDMyX3QgbV90ZXh0dXJlOworICAgIHVpbnQzMl90IG1fZmJvOworfTsKKworfQorI2VuZGlm
IC8vIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjZW5kaWYgLy8gR3JhcGhpY3NTdXJmYWNlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21h
Yy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY3NGRi
ODRkOWQyZDVkNzI0NGRiYTkzODhlZTAxNzIxYWNmZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZh
Y2VNYWMuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFj
ZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpICYmIE9TKERBUldJTikKKyNpbmNsdWRl
IDxDRk51bWJlci5oPgorI2luY2x1ZGUgPENHTENvbnRleHQuaD4KKyNpbmNsdWRlIDxDR0xDdXJy
ZW50Lmg+CisjaW5jbHVkZSA8Q0dMSU9TdXJmYWNlLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lP
U3VyZmFjZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordWludDMyX3QgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZUdldElEKG1f
cGxhdGZvcm1TdXJmYWNlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9T
dXJmYWNlUmVmIGhhbmRsZSkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgR0x1aW50
IGZvcm1hdCA9IEdMX0JHUkE7CisgICAgR0x1aW50IHR5cGUgPSBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVY7CisgICAgR0x1aW50IGludGVybmFsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICBDR0xD
b250ZXh0T2JqIGNvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHTGludCBwcmV2VGV4dHVyZTsKKyAgICBH
TGJvb2xlYW4gd2FzRW5hYmxlZCA9IGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsICZwcmV2VGV4
dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIpOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBDR0xF
cnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY29udGV4dCwgR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgSU9TdXJmYWNlR2V0V2lkdGgoaGFuZGxlKSwg
SU9TdXJmYWNlR2V0SGVpZ2h0KGhhbmRsZSksIGZvcm1hdCwgdHlwZSwgaGFuZGxlLCAwKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgICAgIHRleHR1cmUgPSAwOworICAgIH0KKworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCBwcmV2VGV4dHVyZSk7CisgICAgaWYgKCF3YXNFbmFibGVkKQorICAg
ICAgICBnbERpc2FibGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJl
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRS
SUJfQklUUyk7CisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0
ZVRleHR1cmUobV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIGlmICghbV9mYm8pCisgICAgICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIDApOworICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CisgICAgZ2xFbmFibGUodGFyZ2V0KTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgaWQp
OworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDAs
IDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIDApOworICAg
IGdsUG9wQXR0cmliKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sKKyAgICB1bnNpZ25lZCBwaXhl
bEZvcm1hdCA9ICdCR1JBJzsKKyAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OworICAg
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKworICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3Bl
cnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOworICAg
IGlmICghYnl0ZXNQZXJSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVk
IGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NT
aXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CisgICAgaWYgKCFhbGxvY1NpemUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IHZvaWQgKmtleXNbN107CisgICAgY29uc3Qgdm9p
ZCAqdmFsdWVzWzddOworICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7CisgICAgdmFsdWVz
WzBdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICBr
ZXlzWzFdID0ga0lPU3VyZmFjZUhlaWdodDsKKyAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICBrZXlzWzJdID0ga0lPU3VyZmFj
ZVBpeGVsRm9ybWF0OworICAgIHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckludFR5cGUsICZwaXhlbEZvcm1hdCk7CisgICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1Bl
ckVsZW1lbnQ7CisgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50
VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1Bl
clJvdzsKKyAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlw
ZSwgJmJ5dGVzUGVyUm93KTsKKyAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKKyAg
ICB2YWx1ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9j
U2l6ZSk7CisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2JhbDsKKyAgICB2YWx1ZXNbNl0g
PSAoZmxhZ3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFu
VHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKKworICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDc7IGkrKykKKyAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7
CisKKyAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKyAgICBy
ZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsKK30KKworYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtSW1wb3J0KHVpbnQzMl90IHRva2VuKQoreworICAgIG1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlTG9va3VwKHRva2VuKTsKKyAgICByZXR1cm4gISFtX3BsYXRmb3JtU3VyZmFjZTsK
K30KKworc3RhdGljIGludCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhpbnQgbG9ja09wdGlvbnMpCit7
CisgICAgaW50IG9wdGlvbnMgPSAwOworICAgIGlmIChsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3Vy
ZmFjZTo6UmVhZE9ubHkpCisgICAgICAgIG9wdGlvbnMgfD0ga0lPU3VyZmFjZUxvY2tSZWFkT25s
eTsKKyAgICBpZiAoIShsb2NrT3B0aW9ucyAmIEdyYXBoaWNzU3VyZmFjZTo6UmV0YWluUGl4ZWxz
KSkKKyAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja0F2b2lkU3luYzsKKyAgICByZXR1
cm4gb3B0aW9uczsKK30KKworc3RhdGljIGludCBpb1N1cmZhY2VVbmxvY2tPcHRpb25zKGludCBs
b2NrT3B0aW9ucykKK3sKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAgaWYgKGxvY2tPcHRpb25z
ICYgR3JhcGhpY3NTdXJmYWNlOjpSZWFkT25seSkKKyAgICAgICAgb3B0aW9ucyB8PSAoa0lPU3Vy
ZmFjZUxvY2tBdm9pZFN5bmMgfCBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5KTsKKyAgICByZXR1cm4g
b3B0aW9uczsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2soY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50JiBzdHJpZGUsIExvY2tPcHRpb25zIGxvY2tPcHRpb25zKQorewor
ICAgIG1fbG9ja09wdGlvbnMgPSBsb2NrT3B0aW9uczsKKyAgICBJT1N1cmZhY2VMb2NrKG1fcGxh
dGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7Cisg
ICAgc3RyaWRlID0gSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3cobV9wbGF0Zm9ybVN1cmZhY2UpOwor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJl
c3MobV9wbGF0Zm9ybVN1cmZhY2UpKTsKKyAgICByZXR1cm4gYmFzZSArIHN0cmlkZSAqIHJlY3Qu
eSgpICsgcmVjdC54KCkgKiA0OworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1V
bmxvY2soKQoreworICAgIElPU3VyZmFjZVVubG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJm
YWNlVW5sb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSAmICh+a0lPU3VyZmFjZUxvY2tBdm9pZFN5
bmMpLCAwKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7
CisgICAgaWYgKG1fZmJvKQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8p
OworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX3BsYXRmb3JtU3VyZmFjZSkpOwor
fQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZjBjYTJhMTU3NWFiMWRiOWRmMjJlMDNlMDRhMWFkMmRiZTUyMDBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3Jh
cGhpY3NTdXJmYWNlUXQuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkgJiYgUExBVEZPUk0oUVQp
CisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQYWludGVyPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6ZGlkUmVsZWFzZUltYWdlKHZvaWQqIGRhdGEp
Cit7CisgICAgR3JhcGhpY3NTdXJmYWNlKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NT
dXJmYWNlKj4oZGF0YSk7CisgICAgc3VyZmFjZS0+cGxhdGZvcm1VbmxvY2soKTsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBh
aW50KGNvbnN0IEludFNpemUmIHNpemUsIGNoYXIqIGJpdHMsIGludCBzdHJpZGUpCit7CisgICAg
UUltYWdlOjpGb3JtYXQgZm9ybWF0ID0gKGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhKSA/IFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfUkdCMzI7CisK
KyAgICAvLyBUaGUgaW1hZ2UgYW5kIHBhaW50ZXIgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBy
ZXR1cm5lZCBHcmFwaGljc0NvbnRleHQgaXMgcmVsZWFzZWQuCisgICAgUUltYWdlKiBpbWFnZSA9
IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGJpdHMpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIHN0cmlkZSwgZm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2UsIHRoaXMpOwor
ICAgIFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyKGltYWdlKTsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0KHBhaW50ZXIpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRha2VPd25lcnNoaXBPZlBs
YXRmb3JtQ29udGV4dCgpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOwor
fQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDhhMjU5NzM1NDg1NTQ5ZDRi
ZTkxZjFhN2I2MmNiMjFhY2FlYTMxN2UuLjQxY2UyYWJkMDM5NjhjYjg5Yzg4Njg4MjhkNWRjMzA0
YzQyODM3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zOTEsNiArMzkxLDEyIEBAIGJv
b2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBGbGFncykKICAgICByZXR1cm4gY29udGVudHNTaXplID09IG1fdGV4dHVyZVNpemU7CiB9
CiAKKyNpZiBPUyhEQVJXSU4pCisjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgorI2Vsc2UKKyNkZWZpbmUgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQorI2VuZGlmCisK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CiAgICAgaWYgKCFtX2lkKQpAQCAt
NDAzLDcgKzQwOSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiAgICAgICAg
IEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpKQogICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSkKICAgICAgICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSkpCi0gICAgICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdo
dCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKSkKKyAgICAgICAgR0xfQ01EKGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRo
KCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX0JHUkEsIERFRkFVTFRfVEVYVFVSRV9Q
SVhFTF9UUkFOU0ZFUl9UWVBFLCAwKSkKICAgICB9CiAKICAgICBtX3N1cmZhY2VOZWVkc1Jlc2V0
ID0gdHJ1ZTsKQEAgLTQ1Miw3ICs0NTgsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRl
Q29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAg
ICAgICBzd2l6emxlQkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGRhdGEpKSwgdGFyZ2V0UmVjdC5zaXplKCksIGJ5dGVzUGVyTGluZSAvIDQpOwogCiAg
ICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRoKCkgLyA0ICYmIHNvdXJjZU9m
ZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJn
ZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJn
ZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00NjEsNyArNDY3LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QKICAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKTsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdodCgpOyAr
K3kpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJjZU9mZnNl
dC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsKLSAgICAg
ICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgcm93KSkKKyAgICAgICAgICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpICsg
eSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUsIHJvdykpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQ3MCw3ICs0NzYsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
Y29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgIGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpOwogICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CiAgICAgZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOwotICAg
IEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCks
IHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCks
IGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAoY29uc3QgY2hhciopZGF0YSkpCisgICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xG
b3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSkpCiAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CiAgICAg
Z2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKICAgICBnbFBpeGVsU3RvcmVp
KEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFi
bGVCaXRtYXAuY3BwCmluZGV4IDdkZTE1MWViMjY4MDgwMTE3ZmMwMjY1MmFhM2JhOTc1M2Y3YjA3
MTguLjMyZDM2ZjZkYTJkYTU2YzMwYjU1NDRjNTU3NDBkZGFhODNhNDk3MTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCkBAIC0zNiw2ICszNiw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6SGFuZGxlKCkKICAgICA6
IG1fZmxhZ3MoMCkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAsIG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW4oMCkKKyNlbmRpZgogewogfQogCkBAIC00NCw2ICs0Nyw5IEBAIHZvaWQgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIpIGNvbnN0CiAgICAgZW5jb2Rlci0+ZW5jb2RlKG1faGFuZGxlKTsKICAgICBlbmNvZGVy
LT5lbmNvZGUobV9zaXplKTsKICAgICBlbmNvZGVyLT5lbmNvZGUobV9mbGFncyk7CisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pOworI2VuZGlmCiB9CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQpAQCAt
NTQsNiArNjAsMTAgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFuZGxlJgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlLm1fZmxhZ3MpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzAsMTMgKzgwLDE4IEBA
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBGbGFncyBmCiAKIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFn
cyBmbGFncykKIHsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBjcmVhdGVXaXRoU3VyZmFjZShzaXplLCBmbGFncyk7CisgICAg
aWYgKGJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKyNlbmRpZgogICAgIHNpemVfdCBu
dW1CeXRlcyA9IG51bUJ5dGVzRm9yU2l6ZShzaXplKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG51bUJ5dGVzKTsKICAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXJlYWJsZUJpdG1hcChzaXplLCBmbGFncywgc2hhcmVkTWVtb3J5KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgZmxhZ3MsIFBhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PihzaGFyZWRNZW1vcnkpKSk7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBG
bGFncyBmbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSkKQEAgLTg5
LDggKzEwNCwzNyBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZgogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBzaGFyZWRNZW1vcnkpKTsKIH0KIAor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlV2l0aFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxh
Z3MgZmxhZ3MpCit7CisgICAgaWYgKCEoZmxhZ3MgJiBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNl
RmxhZ3MgPQorICAgICAgICAgICAgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NvZnR3YXJlV3Jp
dGUKKyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0NvcHlUb1RleHR1cmUK
KyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgaWYg
KGZsYWdzICYgU3VwcG9ydHNBbHBoYSkKKyAgICAgICAgc3VyZmFjZUZsYWdzIHw9IEdyYXBoaWNz
U3VyZmFjZTo6U3VwcG9ydHNBbHBoYTsKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJm
YWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgc3VyZmFjZUZsYWdzKTsKKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKHN1cmZhY2UpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oc3VyZmFjZSkpKTsKK30KKyNlbmRpZgorCiBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29uc3QgSGFuZGxl
JiBoYW5kbGUpCiB7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKGhhbmRsZS5t
X2dyYXBoaWNzU3VyZmFjZVRva2VuKSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+
IHN1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUu
bV9mbGFncywgaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgICAgICBpZiAoIXN1
cmZhY2UpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFyZWFibGVCaXRtYXAoaGFuZGxlLm1fc2l6ZSwgaGFuZGxlLm1fZmxhZ3MsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPihzdXJmYWNlKSkpOworICAgIH0KKyNlbmRpZgogICAgIC8vIENy
ZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeS4KICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUubV9oYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZFdyaXRlKTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKQEAgLTEwMSw2ICsxNDUsMTQg
QEAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNv
bnN0IEhhbmRsZSYgaGFuZGxlKQogCiBib29sIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSGFuZGxl
KEhhbmRsZSYgaGFuZGxlKQogeworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmICht
X2dyYXBoaWNzU3VyZmFjZSkgeworICAgICAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOworICAg
ICAgICBoYW5kbGUubV9mbGFncyA9IG1fZmxhZ3M7CisgICAgICAgIGhhbmRsZS5tX2dyYXBoaWNz
U3VyZmFjZVRva2VuID0gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgogICAgIEFTU0VSVChpc0JhY2tlZEJ5U2hhcmVk
TWVtb3J5KCkpOwogCiAgICAgaWYgKCFtX3NoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZS5tX2hhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGUpKQpAQCAtMTI1LDYgKzE3NywxNyBA
QCBTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJbnRTaXplJiBzaXplLCBG
bGFncyBmbGFncywgUGFzc1JlZlB0cjxTaAogewogfQogCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCitTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJbnRTaXplJiBzaXpl
LCBGbGFncyBmbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCisgICAg
OiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX2dyYXBoaWNzU3Vy
ZmFjZShzdXJmYWNlKQorICAgICwgbV9kYXRhKDApCit7Cit9CisjZW5kaWYKKworI2lmICFVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQogewogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwpAQCAtMTMyLDYgKzE5NSw3IEBAIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dChjb25zCiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCks
IHJlY3QueSgpKTsKICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKIH0KKyNl
bmRpZgogCiBTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXAoKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCmluZGV4IGYzY2QyMTNlMzQxYzk4NGJiNmE1OGNj
YWE5MmE0MDlmYzBjMzgwZDcuLmFlMzhjZjA1ZDlmMDcxMTlkMjIwMjgwZjcxNjkyZTdkNDdjOGE0
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKQEAgLTUwLDYgKzUw
LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgeyB1c2luZyBXZWJDb3JlOjpSZWdpb247IH0KICNlbmRp
ZgogI2VuZGlmCiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJHcmFwaGlj
c1N1cmZhY2UuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW1h
Z2U7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNjEsNiArNjUsOSBAQCBjbGFzcyBT
aGFyZWFibGVCaXRtYXAgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWFibGVCaXRtYXA+IHsKIHB1
YmxpYzoKICAgICBlbnVtIEZsYWcgewogICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBTdXBwb3J0c0dyYXBoaWNzU3VyZmFj
ZSA9ICgxIDw8IDEpCisjZW5kaWYKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7
CiAKQEAgLTc5LDYgKzg2LDkgQEAgcHVibGljOgogCiAgICAgICAgIG11dGFibGUgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgbV9oYW5kbGU7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICB1aW50MzJfdCBtX2dyYXBoaWNzU3Vy
ZmFjZVRva2VuOworI2VuZGlmCiAgICAgICAgIEZsYWdzIG1fZmxhZ3M7CiAgICAgfTsKIApAQCAt
OTEsNiArMTAxLDExIEBAIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFw
IGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyBzaGFyZWQgbWVtb3J5IGJsb2NrLgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBGbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKIAorI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgYmFja2VkIGJ5IGEg
Z3JhcGhpY3Mgc3VyZmFjZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGNyZWF0ZVdpdGhTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7CisjZW5k
aWYKKwogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhIGhhbmRsZS4KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0ZShjb25zdCBIYW5kbGUm
KTsKIApAQCAtMTM5LDEwICsxNTQsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbGVh
c2VTaGFyZWRNZW1vcnlEYXRhKHZvaWQqIHR5cGVsZXNzQml0bWFwKTsKICNlbmRpZgogCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2U+IGdyYXBoaWNzU3VyZmFjZSgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlOyB9Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIEZsYWdzLCB2b2lkKik7CiAgICAgU2hhcmVhYmxlQml0bWFwKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBGbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKIAorI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIFNoYXJlYWJsZUJpdG1hcChjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgRmxhZ3MsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPik7CisjZW5k
aWYKKwogICAgIHN0YXRpYyBzaXplX3QgbnVtQnl0ZXNGb3JTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpIHsgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OyB9
CiAKICNpZiBVU0UoQ0cpCkBAIC0xNjcsNiArMTkwLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gSWYg
dGhlIHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2VkIGJ5IGZhc3RNYWxsb2NlZCBtZW1vcnksIHRo
aXMgcG9pbnRzIHRvIHRoZSBkYXRhLgogICAgIHZvaWQqIG1fZGF0YTsKIAorI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fZ3Jh
cGhpY3NTdXJmYWNlOworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgbXV0YWJsZSBP
d25QdHI8SERDPiBtX3dpbmRvd3NDb250ZXh0OwogICAgIG11dGFibGUgT3duUHRyPEhCSVRNQVA+
IG1fd2luZG93c0JpdG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9T
aGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hhcmVhYmxl
Qml0bWFwUXQuY3BwCmluZGV4IDc3OGJjZmNjMWNkMmMzZDI1OTBjYjhmZjM0MWYwOGRjOTg3OTBj
ZGYuLmQ3OThlZmVjMjk1YWMxODIzMTVhOWM2MTk0ZDNlMzI4MjA2NmVhZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcApAQCAtNjUsNiArNjUs
MTggQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChtX2dyYXBoaWNzU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1f
Z3JhcGhpY3NTdXJmYWNlLT5iZWdpblBhaW50KHJlY3QsIDAgLyogTG9ja09wdGlvbnMgKi8pOwor
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChyZWN0KTsKKyAgICBncmFw
aGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOworICAgIHJldHVybiBn
cmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorI2VuZGlmCisKIHZvaWQgU2hhcmVhYmxlQml0
bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQ
b2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKICAgICBRSW1hZ2UgaW1hZ2UgPSBjcmVh
dGVRSW1hZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
ckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IGZlZTBjOTA2MjIwZjQxOGRhNTNkMWIxYzRiMzNlZjNhODFmNTAw
MDguLmRjZGM0MmI5NDZiYThmZmM4YjhhNDIzODYxYjQzYmI3MzE4MjNjNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcApAQCAtNDgs
NiArNDgsMjAgQEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAgICAgICAgIHNob3VsZFJlc2V0ID0g
dHJ1ZTsKICAgICB9CiAKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gbV9iYWNrQnVmZmVyLT5ncmFwaGljc1N1cmZhY2UoKTsK
KyAgICBpZiAoc3VyZmFjZSkgeworICAgICAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgICAg
ICB0ZXh0dXJlLT5yZXNldChtX3NvdXJjZVJlY3Quc2l6ZSgpLCAoc3VyZmFjZS0+ZmxhZ3MoKSAm
IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0
c0FscGhhIDogMCk7CisgICAgICAgIGlmICh0ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2Rl
KCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSkgeworICAgICAgICAgICAgQml0bWFwVGV4
dHVyZUdMKiB0ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPih0ZXh0dXJl
LmdldCgpKTsKKyAgICAgICAgICAgIHN1cmZhY2UtPmNvcHlUb0dMVGV4dHVyZSh0ZXh0dXJlR0wt
PnRleHR1cmVUYXJnZXQoKSwgdGV4dHVyZUdMLT5pZCgpLCBtX3NvdXJjZVJlY3QsIG1fYml0bWFw
T2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBtX2JhY2tCdWZmZXIuY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgUUltYWdlIHFJbWFnZSA9IG1fYmFja0J1
ZmZlci0+Y3JlYXRlUUltYWdlKCk7CiAgICAgaWYgKHNob3VsZFJlc2V0KQogICAgICAgICB0ZXh0
dXJlLT5yZXNldChtX3NvdXJjZVJlY3Quc2l6ZSgpLCBxSW1hZ2UuaGFzQWxwaGFDaGFubmVsKCkg
PyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAppbmRleCBiYmZhN2Q3ZmFmZWY0
Y2VhNWEwNThiNDU4ZTAwYzQ0Yjc5ZjIyMGY2Li5kY2QxYjA1MTNhODQ5MjNmOTY1NDNjOTE4NDc3
YzAzOWUwNWQxNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTMyLDYgKzMyLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBV
cGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyBmbGFncykKICAgICA6IG1fZmxhZ3MoZmxhZ3MpCiB7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgZmxhZ3MgfD0gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0dyYXBoaWNzU3Vy
ZmFjZTsKKyNlbmRpZgogICAgIG1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzKTsKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI1NjIzM2Y4ZWRm
Mjg4YzgwNjRlNDYzOGNlM2E3YjkyZTI5YjM5NDguLjYwM2JlZDhkZmYxN2YyMTkwYjk3OGRkMTdh
ZTA3Mjk1ZTFmNjBlZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0wNyAgTm8nYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBNYW5hZ2UgZ3Jh
cGhpY3MgYnVmZmVycyBpbiB0aGUgd2ViIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4Njc1CisKKyAgICAgICAgRW5hYmxlIGdyYXBoaWNz
IHN1cmZhY2VzIG9uIE1hYyBmb3IgUXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoK
KwogMjAxMi0wNC0wNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBbQ01ha2VdIENsZWFudXAgV1RGIGluY2x1ZGUgZGlyZWN0b3JpZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggZjdmNjI1OWU4ODdlOWZjYWYx
MGNmZjlkMzIxNGNmOGFmOTY5ZDMxNS4uZmVhOTFkMjhlOWEwNmZlMTZjNzg5MTllZWQ0YzRmOGU5
YjQ2NzA5YSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAg
LTE4LDYgKzE4LDExIEBAIG1lZWdvdG91Y2ggewogICAgIERFRklORVMgKz0gV1RGX1VTRV9NRUVH
T1RPVUNIPTEKIH0KIAorbWFjOiBDT05GSUcgKz0gZ3JhcGhpY3Nfc3VyZmFjZXMKK2NvbnRhaW5z
KENPTkZJRywgZ3JhcGhpY3Nfc3VyZmFjZXMpIHsKKyAgICBERUZJTkVTICs9IFdURl9VU0VfR1JB
UEhJQ1NfU1VSRkFDRT0xCit9CisKICMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkg
aXMgYXZhaWxhYmxlCiBsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136398</attachid>
            <date>2012-04-09 22:13:04 -0700</date>
            <delta_ts>2012-04-10 06:56:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78675-20120409221302.patch</filename>
            <type>text/plain</type>
            <size>73658</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRjNWY2NGZjZjNjZTFh
MjhmMmU1ZTY5N2JmZGM1Mjc5ODUyNDZlZi4uMjVmODZhOGMzZmNhMDIwMmM2NDFkMjc2ZTY2YmYx
MjU2MzJjNWM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ3IEBACiAyMDEyLTA0LTA5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBB
ZGRlZCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2UsIGEgd3JhcHBlciBjbGFzcyB0byBhIHBsYXRm
b3JtLWRlcGVuZGFudAorICAgICAgICBzdXJmYWNlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGVmZmlj
aWVudGx5IGJ5IGJvdGggdGhlIENQVSBhbmQgdGhlIEdQVS4KKyAgICAgICAgVGhpcyB3aWxsIGFs
bG93IGZhc3QgdGV4dHVyZSB1cGxvYWRzIGZvciBXZWJLaXQyLCBhbmQgaW4gdGhlIGZ1dHVyZQor
ICAgICAgICBmYXN0IGNvcGllcyBmb3IgMkQgY2FudmFzIGFuZCBXZWJHTC4KKyAgICAgICAgVGhl
IGZpcnN0IGltcGxlbWVudGF0aW9uIGlzIGZvciBNYWMgdXNpbmcgSU9TdXJmYWNlcy4KKworICAg
ICAgICBUZXh0dXJlTWFwcGVyR0wgaGFkIHRvIGJlIG1vZGlmaWVkIHRvIHVzZSBHTF9VTlNJR05F
RF9JTlRfOF84XzhfOF9SRVYKKyAgICAgICAgZm9yIHRleHR1cmVzLCBzaW5jZSB0aGF0J3MgdGhl
IG5hdGl2ZSBwaXhlbCBmb3JtYXQgb2YgQkdSQSBJT1N1cmZhY2VzLgorCisgICAgICAgIFRob3Vn
aCB0aGlzIGZlYXR1cmUgaXMgbm90IHdyaXR0ZW4gaW4gYSBRdC1zcGVjaWZpYyB3YXksIGl0J3Mg
Y3VycmVudGx5CisgICAgICAgIG9ubHkgZW5hYmxlZCBmb3IgUXQgYW5kIGlzIHByb3RlY3RlZCBi
eSBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVzdHMuCisKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQv
R3JhcGhpY3NTdXJmYWNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
U3VyZmFjZTo6ZGlkUmVsZWFzZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUJlZ2luUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpjcmVhdGVSZWFkT25seUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZTo6aXNPcGVuR0xCYWNrZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9CaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6aXNPcGVuR0xCYWNrZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisKKzIwMTItMDQtMDkgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwogICAgICAgICBbVGV4
bWFwXSBJbXByb3ZlIFRleHR1cmVNYXBwZXJHTCByZWFkYWJpbGl0eQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0NzcKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYx
MGQyMTkzYWQ2Y2E5OTk1MDcwYjZmNjUxODNkOThkODYxNTU1NGUuLjgxOWQ1ZTYyYWI5YTkxZTU4
ZWVmZmNkZTJjYzMzNGMwYTdhZjFhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NyBAQAorMjAx
Mi0wNC0wOSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisg
ICAgICAgIFtRdF1bV0syXSBNYW5hZ2UgZ3JhcGhpY3MgYnVmZmVycyBpbiB0aGUgd2ViIHByb2Nl
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4Njc1
CisKKyAgICAgICAgQWRkZWQgU2hhcmVhYmxlU3VyZmFjZSwgYSBjbGFzcyBhbGxvd2luZyB0aGUg
dXNlIG9mIEdQVS1lbmFibGVkCisgICAgICAgIHN1cmZhY2VzIGZvciBiaXRtYXAgdHJhbnNmZXIg
YmV0d2VlbiB0aGUgd2ViIGFuZCBVSSBwcm9jZXNzZXMuCisgICAgICAgIFNpbmNlIEdyYXBoaWNz
U3VyZmFjZXMgbWF5IG5vdCBhbHdheXMgYmUgYXZhaWxhYmxlLCBTaGFyZWFibGVTdXJmYWNlCisg
ICAgICAgIHVzZXMgYSBzdGFuZGFyZCBTaGFyZWFibGVCaXRtYXAgYXMgYSBmYWxsYmFjayBiYWNr
ZW5kLgorCisgICAgICAgIFRoZSBuZWNlc3NhcnkgcGx1bWJpbmcgd2FzIGFkZGVkIGluIFdlYktp
dDIgZm9yIHBhc3NpbmcgdXBkYXRlcyB2aWEKKyAgICAgICAgU2hhcmVhYmxlU3VyZmFjZXMgaW5z
dGVhZCBvZiBTaGFyZWFibGVCaXRtYXBzLiBTdXJmYWNlVXBkYXRlSW5mbyB3YXMKKyAgICAgICAg
YWRkZWQsIGFzIHRvIG5vdCBtYWtlIFVwZGF0ZUluZm8gbW9yZSBjb21wbGljYXRlZC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9TaGFy
ZWFibGVTdXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZVN1cmZh
Y2UuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcDogQWRk
ZWQuCisgICAgICAgICogU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6IEFkZGVkLgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9y
TGF5ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAg
ICAgKExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
VGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmg6CisgICAg
ICAgIChUaWxlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OlRpbGVVcGRhdGU6OlRpbGVVcGRhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJh
Y2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyQmFja2luZ1N0b3JlVGlsZTo6
c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNl
dEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRl
VGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmg6CisgICAg
ICAgIChMYXllckJhY2tpbmdTdG9yZVRpbGUpOgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllcik6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRl
QmFja0J1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUNsaWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Vw
ZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFz
KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJs
ZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmg6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6
VXBkYXRlQXRsYXM6OnNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0
ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVwZGF0ZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oOgorICAgICAg
ICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wNC0wNyAgTm8nYW0gUm9zZW50aGFsICA8bm9h
bS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtXSzJdIEVuYWJsZSB1c2luZyBhIHNp
bmdsZSBTaGFyZWFibGVCaXRtYXAgZm9yIG11bHRpcGxlIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4
IDNiODRkYTIyZGY2NTEwM2Y1ZDllMThlYzFjZmY3NmQwMzVkMjM1NGMuLjVmZjk1ZDM3MWNkNTQw
ODY5N2RjODFkNmFjNzQ1N2Y1NmYzYmM4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTEwNiw2ICsxMTA2
LDggQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwIFwK
QEAgLTIyNDIsNiArMjI0NCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1RpbGUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCBcCkBA
IC00MDc4LDYgKzQwODEsMTMgQEAgY29udGFpbnMoQ09ORklHLCBvcGVuZ2wtc2hpbXMpIHsKICAg
ICBERUZJTkVTICs9IFFUX09QRU5HTF9TSElNUz0xCiB9CiAKK2NvbnRhaW5zKENPTkZJRywgZ3Jh
cGhpY3Nfc3VyZmFjZXMpIHsKKyAgICBtYWMgeworICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCisgICAgICAgIElO
Q0xVREVQQVRIICs9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZy
YW1ld29yay9IZWFkZXJzCisgICAgfQorfQorCiAjIE1ha2Ugc3VyZSB0aGUgZGVyaXZlZCBzb3Vy
Y2VzIGFyZSBidWlsdAogaW5jbHVkZShEZXJpdmVkU291cmNlcy5wcmkpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkK
aW5kZXggZjc2MWNlOTgxYmRkNjQ5YjBjNTRlZTY3MmU5MmQwZDIxMDRlYzdjZi4uY2RhZWI3MzI3
ODQ3ZjkyMzM3ZDM4MmUyZTJlMjFjODUyNWUxOTAzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTYwLDYg
KzYwLDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL2FybSBcCiAgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbCBcCiAgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL3F0IFwKKyAgICAkJFNP
VVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMgXAogICAgICQkU09VUkNFX0RJUi9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAgXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zIFwKICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMgXApAQCAtMTk0LDYgKzE5NSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAg
ICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTD0xCiAgICAgICAgIGNvbnRh
aW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTogTElCUyArPSAtbEVHTAogICAgIH0KKyAgICBtYWM6
IExJQlMgKz0gLWZyYW1ld29yayBJT1N1cmZhY2UgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbgog
fQogCiBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSX0dMPTEpfGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OTdmZjA1NGFkOWMxYTBiZjM5ZGMzMDFkMDJmNTBjYWQ4YjAzZThjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
R3JhcGhpY3NTdXJmYWNlLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzU3VyZmFjZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEdyYXBo
aWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
RmxhZ3MgZmxhZ3MsIHVpbnQzMl90IHRva2VuKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7
CisgICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybUltcG9ydCh0b2tlbikpCisgICAgICAgIHJldHVy
biBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30K
KworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCit7CisgICAg
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1
cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKKyAgICBpZiAoIXN1cmZhY2UtPnBsYXRmb3JtQ3JlYXRlKHNp
emUsIGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigp
OworICAgIHJldHVybiBzdXJmYWNlOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OmV4
cG9ydFRva2VuKCkKK3sKKyAgICByZXR1cm4gcGxhdGZvcm1FeHBvcnQoKTsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6YmVnaW5QYWludChjb25zdCBJ
bnRSZWN0JiByZWN0LCBMb2NrT3B0aW9ucyBsb2NrT3B0aW9ucykKK3sKKyAgICBpbnQgc3RyaWRl
ID0gMDsKKyAgICBjaGFyKiBiaXRzID0gcGxhdGZvcm1Mb2NrKHJlY3QsIHN0cmlkZSwgbG9ja09w
dGlvbnMpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IHBs
YXRmb3JtQmVnaW5QYWludChyZWN0LnNpemUoKSwgYml0cywgc3RyaWRlKTsKKyAgICByZXR1cm4g
Z3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OmNv
cHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcGxhdGZv
cm1Db3B5VG9HTFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLCB0YXJnZXRSZWN0LCBvZmZzZXQpOwor
fQorCitHcmFwaGljc1N1cmZhY2U6OkdyYXBoaWNzU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXpl
LCBGbGFncyBmbGFncykKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9mbGFncyhmbGFncykK
KyAgICAsIG1fcGxhdGZvcm1TdXJmYWNlKDApCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1f
ZmJvKDApCit7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNGE4YzVjZjZiMDAwMjQ3MjRhYzkyNTc5MmVlM2IxNTU0Y2JmYjBmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzU3VyZmFjZV9oCisjZGVmaW5lIEdyYXBoaWNzU3Vy
ZmFjZV9oCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiT3duUHRyLmgiCisjaW5jbHVkZSAiUGFzc093blB0ci5oIgorI2luY2x1
ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorI2lmIE9TKERBUldJTikKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJ
T1N1cmZhY2VSZWY7Cit0eXBlZGVmIElPU3VyZmFjZVJlZiBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFj
ZTsKKyNlbmRpZgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc1N1cmZhY2Ug
OiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IEZsYWcgeworICAgICAgICBTdXBwb3J0c0FscGhhID0gMHgwMSwKKyAgICAgICAgU3VwcG9ydHNT
b2Z0d2FyZVdyaXRlID0gMHgwMiwKKyAgICAgICAgU3VwcG9ydHNTb2Z0d2FyZVJlYWQgPSAweDA0
LAorICAgICAgICBTdXBwb3J0c1RleHR1cmVUYXJnZXQgPSAweDA4LAorICAgICAgICBTdXBwb3J0
c1RleHR1cmVTb3VyY2UgPSAweDEwLAorICAgICAgICBTdXBwb3J0c0NvcHlUb1RleHR1cmUgPSAw
eDIwLAorICAgICAgICBTdXBwb3J0c0NvcHlGcm9tVGV4dHVyZSA9IDB4NDAsCisgICAgICAgIFN1
cHBvcnRzU2hhcmluZyA9IDB4ODAKKyAgICB9OworCisgICAgZW51bSBMb2NrT3B0aW9uIHsKKyAg
ICAgICAgUmV0YWluUGl4ZWxzID0gMHgwMSwKKyAgICAgICAgUmVhZE9ubHkgPSAweDAyCisgICAg
fTsKKworICAgIHR5cGVkZWYgaW50IEZsYWdzOworICAgIHR5cGVkZWYgaW50IExvY2tPcHRpb25z
OworCisgICAgRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2UgcGxhdGZvcm1TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF0Zm9ybVN1cmZhY2U7IH0KKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNv
bnN0IEludFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50MzJfdCB0b2tlbik7CisgICAg
dm9pZCBjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KTsK
KyAgICB1aW50MzJfdCBleHBvcnRUb2tlbigpOworICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmLCBMb2NrT3B0aW9ucyk7CisgICAgUGFzc1Jl
ZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0Jik7CisKK3Byb3Rl
Y3RlZDoKKyAgICBib29sIHBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7Cisg
ICAgYm9vbCBwbGF0Zm9ybUltcG9ydCh1aW50MzJfdCk7CisgICAgdWludDMyX3QgcGxhdGZvcm1F
eHBvcnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCisgICAgY2hhciogcGxhdGZv
cm1Mb2NrKGNvbnN0IEludFJlY3QmLCBpbnQmIHN0cmlkZSwgTG9ja09wdGlvbnMpOworICAgIHZv
aWQgcGxhdGZvcm1VbmxvY2soKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFBvaW50Jik7CisKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gcGxhdGZvcm1CZWdp
blBhaW50KGNvbnN0IEludFNpemUmLCBjaGFyKiBiaXRzLCBpbnQgc3RyaWRlKTsKKworcHJvdGVj
dGVkOgorICAgIExvY2tPcHRpb25zIG1fbG9ja09wdGlvbnM7CisgICAgRmxhZ3MgbV9mbGFnczsK
KworcHJpdmF0ZToKKyAgICBHcmFwaGljc1N1cmZhY2UoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsK
KworI2lmIFBMQVRGT1JNKFFUKQorICAgIHN0YXRpYyB2b2lkIGRpZFJlbGVhc2VJbWFnZSh2b2lk
Kik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzU3VyZmFjZSBtX3BsYXRmb3JtU3VyZmFjZTsKKyAgICB1aW50MzJfdCBtX3RleHR1
cmU7CisgICAgdWludDMyX3QgbV9mYm87Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisKKyNlbmRpZiAvLyBHcmFwaGljc1N1cmZhY2VfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFj
ZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMv
R3JhcGhpY3NTdXJmYWNlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjc0ZGI4NGQ5ZDJkNWQ3MjQ0ZGJh
OTM4OGVlMDE3MjFhY2ZmNmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKQEAgLTAs
MCArMSwxNzQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkgJiYgT1MoREFSV0lOKQorI2luY2x1ZGUgPENGTnVtYmVyLmg+Cisj
aW5jbHVkZSA8Q0dMQ29udGV4dC5oPgorI2luY2x1ZGUgPENHTEN1cnJlbnQuaD4KKyNpbmNsdWRl
IDxDR0xJT1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
RXhwb3J0KCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wbGF0Zm9ybVN1cmZhY2Up
OworfQorCitzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1cmZhY2VSZWYgaGFuZGxl
KQoreworICAgIEdMdWludCB0ZXh0dXJlID0gMDsKKyAgICBHTHVpbnQgZm9ybWF0ID0gR0xfQkdS
QTsKKyAgICBHTHVpbnQgdHlwZSA9IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVjsKKyAgICBH
THVpbnQgaW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBOworICAgIENHTENvbnRleHRPYmogY29udGV4
dCA9IENHTEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEdMaW50IHByZXZUZXh0dXJlOworICAgIEdMYm9vbGVhbiB3YXNFbmFi
bGVkID0gZ2xJc0VuYWJsZWQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbEdldElu
dGVnZXJ2KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgJnByZXZUZXh0dXJlKTsKKyAgICBpZiAo
IXdhc0VuYWJsZWQpCisgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQik7
CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOworICAgIENHTEVycm9yIGVycm9yID0gQ0dM
VGV4SW1hZ2VJT1N1cmZhY2UyRChjb250ZXh0LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGlu
dGVybmFsRm9ybWF0LCBJT1N1cmZhY2VHZXRXaWR0aChoYW5kbGUpLCBJT1N1cmZhY2VHZXRIZWln
aHQoaGFuZGxlKSwgZm9ybWF0LCB0eXBlLCBoYW5kbGUsIDApOworICAgIGlmIChlcnJvcikgewor
ICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICAgICAgdGV4dHVyZSA9
IDA7CisgICAgfQorCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IHByZXZUZXh0dXJlKTsKKyAgICBpZiAoIXdhc0VuYWJsZWQpCisgICAgICAgIGdsRGlzYWJsZShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lk
IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0
LCB1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKK3sKKyAgICBnbFB1c2hBdHRyaWIoR0xfQUxMX0FUVFJJQl9CSVRTKTsKKyAgICBp
ZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX3BsYXRm
b3JtU3VyZmFjZSk7CisgICAgaWYgKCFtX2ZibykKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fZmJvKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwg
MCk7CisgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbEVuYWJs
ZSh0YXJnZXQpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBpZCk7CisgICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbENvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBvZmZzZXQueCgp
LCBvZmZzZXQueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCkpOwor
ICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCwgMCk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xQb3BBdHRyaWIoKTsK
K30KKworYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIEZsYWdzIGZsYWdzKQoreworICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEn
OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7CisgICAgaW50IHdpZHRoID0gc2l6
ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgdW5zaWdu
ZWQgbG9uZyBieXRlc1BlclJvdyA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUJ5
dGVzUGVyUm93LCB3aWR0aCAqIGJ5dGVzUGVyRWxlbWVudCk7CisgICAgaWYgKCFieXRlc1BlclJv
dykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbG9uZyBhbGxvY1NpemUg
PSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1NpemUsIGhlaWdodCAqIGJ5
dGVzUGVyUm93KTsKKyAgICBpZiAoIWFsbG9jU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3Qgdm9pZCAqa2V5c1s3XTsKKyAgICBjb25zdCB2b2lkICp2YWx1ZXNbN107Cisg
ICAga2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKKyAgICB2YWx1ZXNbMF0gPSBDRk51bWJlckNy
ZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOworICAgIGtleXNbMV0gPSBrSU9TdXJm
YWNlSGVpZ2h0OworICAgIHZhbHVlc1sxXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlcklu
dFR5cGUsICZoZWlnaHQpOworICAgIGtleXNbMl0gPSBrSU9TdXJmYWNlUGl4ZWxGb3JtYXQ7Cisg
ICAgdmFsdWVzWzJdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJnBpeGVs
Rm9ybWF0KTsKKyAgICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5dGVzUGVyRWxlbWVudDsKKyAgICB2
YWx1ZXNbM10gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmYnl0ZXNQZXJF
bGVtZW50KTsKKyAgICBrZXlzWzRdID0ga0lPU3VyZmFjZUJ5dGVzUGVyUm93OworICAgIHZhbHVl
c1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cp
OworICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOworICAgIHZhbHVlc1s1XSA9IENG
TnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsKKyAgICBrZXlz
WzZdID0ga0lPU3VyZmFjZUlzR2xvYmFsOworICAgIHZhbHVlc1s2XSA9IChmbGFncyAmIEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVh
bkZhbHNlOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3QgPSBDRkRpY3Rpb25hcnlDcmVhdGUo
MCwga2V5cywgdmFsdWVzLCA3LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgNzsgaSsrKQorICAgICAgICBDRlJlbGVhc2UodmFsdWVzW2ldKTsKKworICAgIG1fcGxhdGZv
cm1TdXJmYWNlID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworICAgIHJldHVybiAhIW1fcGxhdGZv
cm1TdXJmYWNlOworfQorCitib29sIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQodWlu
dDMyX3QgdG9rZW4pCit7CisgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBJT1N1cmZhY2VMb29rdXAo
dG9rZW4pOworICAgIHJldHVybiAhIW1fcGxhdGZvcm1TdXJmYWNlOworfQorCitzdGF0aWMgaW50
IGlvU3VyZmFjZUxvY2tPcHRpb25zKGludCBsb2NrT3B0aW9ucykKK3sKKyAgICBpbnQgb3B0aW9u
cyA9IDA7CisgICAgaWYgKGxvY2tPcHRpb25zICYgR3JhcGhpY3NTdXJmYWNlOjpSZWFkT25seSkK
KyAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5OworICAgIGlmICghKGxv
Y2tPcHRpb25zICYgR3JhcGhpY3NTdXJmYWNlOjpSZXRhaW5QaXhlbHMpKQorICAgICAgICBvcHRp
b25zIHw9IGtJT1N1cmZhY2VMb2NrQXZvaWRTeW5jOworICAgIHJldHVybiBvcHRpb25zOworfQor
CitzdGF0aWMgaW50IGlvU3VyZmFjZVVubG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25zKQorewor
ICAgIGludCBvcHRpb25zID0gMDsKKyAgICBpZiAobG9ja09wdGlvbnMgJiBHcmFwaGljc1N1cmZh
Y2U6OlJlYWRPbmx5KQorICAgICAgICBvcHRpb25zIHw9IChrSU9TdXJmYWNlTG9ja0F2b2lkU3lu
YyB8IGtJT1N1cmZhY2VMb2NrUmVhZE9ubHkpOworICAgIHJldHVybiBvcHRpb25zOworfQorCitj
aGFyKiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiByZWN0LCBp
bnQmIHN0cmlkZSwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCit7CisgICAgbV9sb2NrT3B0aW9u
cyA9IGxvY2tPcHRpb25zOworICAgIElPU3VyZmFjZUxvY2sobV9wbGF0Zm9ybVN1cmZhY2UsIGlv
U3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKKyAgICBzdHJpZGUgPSBJT1N1
cmZhY2VHZXRCeXRlc1BlclJvdyhtX3BsYXRmb3JtU3VyZmFjZSk7CisgICAgY2hhciogYmFzZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhtX3BsYXRmb3JtU3Vy
ZmFjZSkpOworICAgIHJldHVybiBiYXNlICsgc3RyaWRlICogcmVjdC55KCkgKyByZWN0LngoKSAq
IDQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygpCit7CisgICAg
SU9TdXJmYWNlVW5sb2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VVbmxvY2tPcHRpb25z
KG1fbG9ja09wdGlvbnMpICYgKH5rSU9TdXJmYWNlTG9ja0F2b2lkU3luYyksIDApOworfQorCit2
b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBpZiAobV9mYm8p
CisgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgaWYgKG1fdGV4
dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBDRlJl
bGVhc2UoSU9TdXJmYWNlUmVmKG1fcGxhdGZvcm1TdXJmYWNlKSk7Cit9CisKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQv
R3JhcGhpY3NTdXJmYWNlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4N2JiNjUyNTcx
MWY2NjcyNjk3YzRhOWE0OGVjODA0OTYzODQyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VRdC5j
cHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKSAmJiBQTEFURk9STShRVCkKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFQaXhtYXA+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgR3JhcGhpY3NTdXJm
YWNlOjpkaWRSZWxlYXNlSW1hZ2Uodm9pZCogZGF0YSkKK3sKKyAgICBHcmFwaGljc1N1cmZhY2Uq
IHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxHcmFwaGljc1N1cmZhY2UqPihkYXRhKTsKKyAgICBzdXJm
YWNlLT5wbGF0Zm9ybVVubG9jaygpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUJlZ2luUGFpbnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y2hhciogYml0cywgaW50IHN0cmlkZSkKK3sKKyAgICBRSW1hZ2U6OkZvcm1hdCBmb3JtYXQgPSAo
ZmxhZ3MoKSAmIFN1cHBvcnRzQWxwaGEpID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRp
cGxpZWQgOiBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKworICAgIC8vIFRoZSBpbWFnZSBhbmQgcGFp
bnRlciB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIHJldHVybmVkIEdyYXBoaWNzQ29udGV4dCBp
cyByZWxlYXNlZC4KKyAgICBRSW1hZ2UqIGltYWdlID0gbmV3IFFJbWFnZShyZWludGVycHJldF9j
YXN0PHVjaGFyKj4oYml0cyksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgc3RyaWRlLCBm
b3JtYXQsIGRpZFJlbGVhc2VJbWFnZSwgdGhpcyk7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBu
ZXcgUVBhaW50ZXIoaW1hZ2UpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQocGFpbnRlcikpOworICAgIGdy
YXBoaWNzQ29udGV4dC0+dGFrZU93bmVyc2hpcE9mUGxhdGZvcm1Db250ZXh0KCk7CisgICAgcmV0
dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGludCBzdHJpZGU7CisgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0ID0gKGZsYWdzKCkg
JiBTdXBwb3J0c0FscGhhKSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDog
UUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgY2hhciogZGF0YSA9IHBsYXRmb3JtTG9jayhyZWN0
LCBzdHJpZGUsIFJldGFpblBpeGVscyB8IFJlYWRPbmx5KTsKKyAgICBRSW1hZ2UgaW1hZ2UocmVp
bnRlcnByZXRfY2FzdDx1Y2hhcio+KGRhdGEpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCks
IHN0cmlkZSwgZm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2UsIHRoaXMpOworICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShpbWFnZSkpKTsK
K30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBhMjg3ZGJkNDRmNTdhNGI0Njg3OGIy
MTFhNDcwZWQ3OTNhNDA5NTIwLi4yNDY3ZWZiNmNjM2VhZWRhNzliOGU1M2NlZGQxN2YxOWM5MDE3
YmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHZpcnR1YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGVu
R0xCYWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBJbnRTaXpl
IHNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdl
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKaW5kZXggN2NhNjFjY2NhNWU3NGNlOTYzNzliNjYwYWJhMTA2YmJhNjUyYmU2
ZC4uMjM2MzUwZmViNWEzN2I3NmM1ZTk5OGIyODAxNTljMjdhODkzNzJjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKQEAgLTIyMCw2ICsyMjAsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRh
Ojppbml0aWFsaXplU3RlbmNpbCgpCiAgICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9CiAK
K0JpdG1hcFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBpZiAoIXRleHR1cmUgfHwgIXRleHR1cmUtPmlzT3BlbkdMQmFja2VkKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVH
TCo+KHRleHR1cmUpOworfQorCiBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAg
ICAgOiBtX2RhdGEobmV3IFRleHR1cmVNYXBwZXJHTERhdGEpCiAgICAgLCBtX2NvbnRleHQoMCkK
QEAgLTM3NSw2ICszODMsMTIgQEAgYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChj
b25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQogICAgIHJldHVybiBjb250ZW50c1Np
emUgPT0gbV90ZXh0dXJlU2l6ZTsKIH0KIAorI2lmIE9TKERBUldJTikKKyNkZWZpbmUgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVW
CisjZWxzZQorI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9V
TlNJR05FRF9CWVRFCisjZW5kaWYKKwogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkK
IHsKICAgICBpZiAoIW1faWQpCkBAIC0zOTAsNyArNDA0LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJl
R0w6OmRpZFJlc2V0KCkKICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7CiAgICAgR0xfQ01EKGdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSkpOwogICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSwgMCwgR0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgMCkpOworICAgIEdM
X0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6
ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9CR1JBLCBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCkpOwogfQogCiBzdGF0aWMgdm9pZCBzd2l6emxl
QkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHN0cmlk
ZSA9IDApCkBAIC00MzYsNyArNDUwLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAg
ICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihjb25zdF9jYXN0PHZv
aWQqPihkYXRhKSksIHRhcmdldFJlY3Quc2l6ZSgpLCBieXRlc1BlckxpbmUgLyA0KTsKIAogICAg
IGlmIChieXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpIC8gNCAmJiBzb3VyY2VPZmZz
ZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdl
dFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVY
VFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00NDUsNyArNDU5LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QKICAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKTsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdodCgpOyAr
K3kpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJjZU9mZnNl
dC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsKLSAgICAg
ICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgcm93KSk7CisgICAgICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSAr
IHksIHRhcmdldFJlY3Qud2lkdGgoKSwgMSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhF
TF9UUkFOU0ZFUl9UWVBFLCByb3cpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDU0LDcgKzQ2OCw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgR0xfQ01E
KGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpKTsK
ICAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZz
ZXQueSgpKSk7CiAgICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxT
LCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIChj
b25zdCBjaGFyKilkYXRhKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwogICAgIEdMX0NNRChnbFBpeGVsU3Rv
cmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKSk7CiAgICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWko
R0xfVU5QQUNLX1NLSVBfUk9XUywgMCkpOwogICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19TS0lQX1BJWEVMUywgMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IGI2YzZlNDJjY2Iz
ODhhZGRjYTJkOTlkZjVlZmQ2OGM4ZGI4NmFjNjcuLmE1ZmQ3MzE3ZTI0NjA0MzVmMWVmMWM5NTk2
MzM4NGEwOGQ4YWE3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTg4LDYgKzg4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkg
eyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKElt
YWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0
IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpOworICAgIHZpcnR1YWwg
Ym9vbCBpc09wZW5HTEJhY2tlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToK
ICAgICBHTHVpbnQgbV9pZDsKQEAgLTExMSw5ICsxMTIsOSBAQCBwcml2YXRlOgogCiB0eXBlZGVm
IHVpbnQ2NF90IEltYWdlVUlEOwogSW1hZ2VVSUQgdWlkRm9ySW1hZ2UoSW1hZ2UqKTsKK0JpdG1h
cFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4dHVyZSopOwogCi19OwotCit9
CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hh
cmVhYmxlU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFj
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzAzMmMzN2ViOGQzOWRhZjVkZTM5MTViZTA3MzUwZDUzNWMxYjJj
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJm
YWNlLmNwcApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNl
LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworI2lmIFVTRShURVhU
VVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlYWJsZVN1
cmZhY2U6OkhhbmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fYmFja2luZ1R5cGUoU2hhcmVhYmxlU3Vy
ZmFjZTo6Qml0bWFwQmFja2luZykKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAsIG1f
Z3JhcGhpY3NTdXJmYWNlVG9rZW4oMCkKKyNlbmRpZgoreworfQorCit2b2lkIFNoYXJlYWJsZVN1
cmZhY2U6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG1fYmFja2luZ1R5cGUpOworICAgIHN3
aXRjaCAobV9iYWNraW5nVHlwZSkgeworICAgIGNhc2UgQml0bWFwQmFja2luZzoKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKG1fYml0bWFwSGFuZGxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTdXJmYWNlQmFja2luZzoKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworI2VuZGlmCisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBlbmNvZGVyLT5lbmNvZGUobV9zaXplKTsKKyAgICBlbmNvZGVyLT5l
bmNvZGUobV9mbGFncyk7Cit9CisKK2Jvb2wgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0oaGFuZGxlLm1fYmFja2luZ1R5cGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChoYW5kbGUubV9iYWNraW5nVHlwZSkgewor
ICAgIGNhc2UgQml0bWFwQmFja2luZzoKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFu
ZGxlLm1fYml0bWFwSGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTdXJmYWNlQmFja2luZzoKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX3NpemUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlLm1fZmxh
Z3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgQmFja2luZ1R5cGUg
cHJlZmVycmVkQmFja2luZykKK3sKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAo
cHJlZmVycmVkQmFja2luZyA9PSBTdXJmYWNlQmFja2luZykgeworICAgICAgICBSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gc3VyZmFjZSA9IGNyZWF0ZVdpdGhTdXJmYWNlKHNpemUsIGZsYWdzKTsK
KyAgICAgICAgaWYgKHN1cmZhY2UpCisgICAgICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNl
KCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGZsYWdzLCBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzaXplLCBmbGFncykpOworfQorCisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCitQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJs
ZVN1cmZhY2U6OmNyZWF0ZVdpdGhTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFNoYXJlYWJs
ZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCit7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJm
YWNlRmxhZ3MgPQorICAgICAgICAgICAgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NvZnR3YXJl
V3JpdGUKKyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0NvcHlUb1RleHR1
cmUKKyAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisKKyAg
ICBpZiAoZmxhZ3MgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpCisgICAgICAgIHN1
cmZhY2VGbGFncyB8PSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQWxwaGE7CisKKyAgICAvLyBU
aGlzIG1pZ2h0IHJldHVybiBudWxsLCBpZiB0aGUgc3lzdGVtIGlzIHVuYWJsZSB0byBwcm92aWRl
IGEgbmV3IGdyYXBoaWNzIHN1cmZhY2UuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB0aGlzIGZ1bmN0
aW9uIHdvdWxkIHJldHVybiBudWxsIGFuZCBhbGxvdyBmYWxsaW5nIGJhY2sgdG8gU2hhcmVhYmxl
Qml0bWFwLgorICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBHcmFwaGljc1N1
cmZhY2U6OmNyZWF0ZShzaXplLCBzdXJmYWNlRmxhZ3MpOworICAgIGlmICghc3VyZmFjZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoc3VyZmFjZSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNlKHNpemUsIGZsYWdzLCBzdXJmYWNlLnJlbGVhc2UoKSkp
OworfQorI2VuZGlmCisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBTaGFy
ZWFibGVTdXJmYWNlOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAobV9iYWNraW5nVHlwZSA9PSBCaXRtYXBCYWNraW5nKSB7CisgICAgICAgIEFT
U0VSVChtX2JpdG1hcCk7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IG1fYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKHJlY3QpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5z
bGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0
LnJlbGVhc2UoKTsKKyAgICB9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBBU1NF
UlQobV9iYWNraW5nVHlwZSA9PSBTdXJmYWNlQmFja2luZyk7CisgICAgQVNTRVJUKG1fZ3JhcGhp
Y3NTdXJmYWNlKTsKKyAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmJlZ2luUGFpbnQocmVj
dCwgMCAvKiBXcml0ZSB3aXRob3V0IHJldGFpbmluZyBwaXhlbHMqLyk7CisjZW5kaWYKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlU3VyZmFjZShzaXplLCBmbGFncywg
Yml0bWFwKSk7Cit9CisKK1NoYXJlYWJsZVN1cmZhY2U6OlNoYXJlYWJsZVN1cmZhY2UoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCkKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9mbGFn
cyhmbGFncykKKyAgICAsIG1fYmFja2luZ1R5cGUoQml0bWFwQmFja2luZykKKyAgICAsIG1fYml0
bWFwKGJpdG1hcCkKK3sKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorU2hhcmVhYmxl
U3VyZmFjZTo6U2hhcmVhYmxlU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNz
U3VyZmFjZT4gc3VyZmFjZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9mbGFncyhmbGFn
cykKKyAgICAsIG1fYmFja2luZ1R5cGUoU3VyZmFjZUJhY2tpbmcpCisgICAgLCBtX2dyYXBoaWNz
U3VyZmFjZShzdXJmYWNlKQoreworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNo
YXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRt
YXA6OkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlYWJsZVN1cmZhY2Uoc2l6ZSwgZmxhZ3MsIHN1
cmZhY2UpKTsKK30KKyNlbmRpZgorCitTaGFyZWFibGVTdXJmYWNlOjp+U2hhcmVhYmxlU3VyZmFj
ZSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gU2hhcmVhYmxlU3VyZmFj
ZTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlKQoreworI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorICAgIGlmIChoYW5kbGUubV9iYWNraW5nVHlwZSA9PSBTdXJmYWNlQmFja2luZykgewor
ICAgICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNl
OjpjcmVhdGUoaGFuZGxlLm1fc2l6ZSwgaGFuZGxlLm1fZmxhZ3MsIGhhbmRsZS5tX2dyYXBoaWNz
U3VyZmFjZVRva2VuKTsKKyAgICAgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlU3VyZmFjZShoYW5kbGUu
bV9zaXplLCBoYW5kbGUubV9mbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KHN1cmZh
Y2UpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpOworICAg
IGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjcmVhdGUoaGFu
ZGxlLm1fc2l6ZSwgaGFuZGxlLm1fZmxhZ3MsIGJpdG1hcC5yZWxlYXNlKCkpOworfQorCitib29s
IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBo
YW5kbGUubV9zaXplID0gbV9zaXplOworICAgIGhhbmRsZS5tX2ZsYWdzID0gbV9mbGFnczsKKyAg
ICBoYW5kbGUubV9iYWNraW5nVHlwZSA9IG1fYmFja2luZ1R5cGU7CisKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyAgICBpZiAobV9iYWNraW5nVHlwZSA9PSBTdXJmYWNlQmFja2luZykgewor
ICAgICAgICBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNl
LT5leHBvcnRUb2tlbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIGlmICghbV9iaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCit2b2lkIFNoYXJlYWJsZVN1cmZhY2U6OmNvcHlUb1RleHR1cmUoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiBwYXNzVGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KQoreworICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiB0ZXh0dXJlKHBhc3NUZXh0dXJlKTsKKworICAgIGlmIChtX2JhY2tpbmdUeXBl
ID09IEJpdG1hcEJhY2tpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fYml0bWFwKTsKKyAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICB0
ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0LCBzb3VyY2VPZmZzZXQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgQVNTRVJUKG1fYmFja2luZ1R5cGUgPT0gU3VyZmFjZUJhY2tpbmcpOworICAgIEFTU0VSVCht
X2dyYXBoaWNzU3VyZmFjZSk7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmVHTD4gdGV4dHVyZUdM
ID0gdG9CaXRtYXBUZXh0dXJlR0wodGV4dHVyZS5nZXQoKSk7CisgICAgaWYgKHRleHR1cmVHTCkg
eworICAgICAgICB1aW50MzJfdCB0ZXh0dXJlSUQgPSB0ZXh0dXJlR0wtPmlkKCk7CisgICAgICAg
IHVpbnQzMl90IHRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlR0wtPnRleHR1cmVUYXJnZXQoKTsKKyAg
ICAgICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlUb0dMVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCB0
ZXh0dXJlSUQsIHRhcmdldCwgc291cmNlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2dyYXBoaWNzU3VyZmFjZS0+Y3JlYXRlUmVh
ZE9ubHlJbWFnZShJbnRSZWN0KHNvdXJjZU9mZnNldCwgdGFyZ2V0LnNpemUoKSkpOworICAgIHRl
eHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlLmdldCgpLCB0YXJnZXQsIEludFBvaW50Ojp6ZXJv
KCkpOworI2VuZGlmIC8vIFVTRShHUkFQSElDU19TVVJGQUNFKQorfQorI2VuZGlmIC8vIFVTRShU
RVhUVVJFX01BUFBFUikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1NoYXJlYWJsZVN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA3MjEzZDQyZTg0NjU5NTJjZjJm
YjYzYWM0NmVkM2FjNjU3MzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1NoYXJlYWJsZVN1cmZhY2UuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2hhcmVhYmxlU3VyZmFjZV9oCisjZGVm
aW5lIFNoYXJlYWJsZVN1cmZhY2VfaAorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBCaXRtYXBUZXh0dXJlOworY2xh
c3MgSW1hZ2U7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBTaGFyZWFibGVTdXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVhYmxl
U3VyZmFjZT4geworcHVibGljOgorICAgIGVudW0gQmFja2luZ1R5cGUgeworICAgICAgICBCaXRt
YXBCYWNraW5nLAorICAgICAgICBTdXJmYWNlQmFja2luZworICAgIH07CisKKyAgICBjbGFzcyBI
YW5kbGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIYW5kbGUpOworICAgIHB1Ymxp
YzoKKyAgICAgICAgSGFuZGxlKCk7CisKKyAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKKwor
ICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsKKyAg
ICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRs
ZSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVN1cmZh
Y2U7CisgICAgICAgIFNoYXJlYWJsZVN1cmZhY2U6OkJhY2tpbmdUeXBlIG1fYmFja2luZ1R5cGU7
CisgICAgICAgIG11dGFibGUgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbV9iaXRtYXBIYW5kbGU7
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW47CisjZW5kaWYKKyAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Cisg
ICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgbV9mbGFnczsKKyAgICB9OworCisgICAgLy8g
Q3JlYXRlIGEgbmV3IFNoYXJlYWJsZVN1cmZhY2UsIGFuZCBhbGxvY2F0ZSBlaXRoZXIgYSBHcmFw
aGljc1N1cmZhY2Ugb3IgYSBTaGFyZWFibGVCaXRtYXAgYXMgYmFja2luZy4KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIEJhY2tpbmdUeXBlIHByZWZlcnJlZEJhY2tpbmcp
OworCisgICAgLy8gQ3JlYXRlIGEgU2hhcmVhYmxlU3VyZmFjZSByZWZlcmVuY2luZyBhbiBleGlz
dGluZyBTaGFyZWFibGVCaXRtYXAuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZs
YWdzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgLy8gQ3JlYXRlIGEgU2hhcmVhYmxlU3VyZmFjZSByZWZlcmVuY2luZyBhbiBl
eGlzdGluZyBHcmFwaGljc1N1cmZhY2UuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxl
U3VyZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4pOworI2VuZGlmCisK
KyAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgc3VyZmFjZSBmcm9tIGEgaGFuZGxlLgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGNyZWF0ZShjb25zdCBIYW5kbGUmKTsK
KworICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2Zs
YWdzOyB9CisKKyAgICAvLyBDcmVhdGUgYSBoYW5kbGUuCisgICAgYm9vbCBjcmVhdGVIYW5kbGUo
SGFuZGxlJik7CisKKyAgICB+U2hhcmVhYmxlU3VyZmFjZSgpOworCisgICAgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIFdlYkNvcmU6
OkludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6SW50UmVjdChXZWJDb3Jl
OjpJbnRQb2ludCgpLCBzaXplKCkpOyB9CisKKyAgICAvLyBDcmVhdGUgYSBncmFwaGljcyBjb250
ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2luZyBzdG9yZS4KKyAg
ICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICB2b2lkIGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
PiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgc291cmNlT2Zmc2V0KTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNoYXJlYWJsZVN1cmZh
Y2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICBTaGFyZWFibGVTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRt
YXA6OkZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4pOworI2VuZGlm
CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZs
YWdzIG1fZmxhZ3M7CisgICAgQmFja2luZ1R5cGUgbV9iYWNraW5nVHlwZTsKKyAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgYmFja2VkIGJ5IGEgZ3JhcGhpY3Mgc3Vy
ZmFjZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBjcmVhdGVXaXRo
U3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyk7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU2hhcmVh
YmxlU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mZmRjMGNhODE1YWU3ZWFmZmNkOTA1NjcwMzc5NmI2NWM3M2VkMmQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZv
LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgU3VyZmFjZVVwZGF0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVJlY3Qp
OworICAgIGVuY29kZXItPmVuY29kZSh1cGRhdGVTY2FsZUZhY3Rvcik7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKHN1cmZhY2VIYW5kbGUpOworICAgIGVuY29kZXItPmVuY29kZShzdXJmYWNlT2Zmc2V0
KTsKK30KKworYm9vbCBTdXJmYWNlVXBkYXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHJlc3VsdCkKK3sKKyAgICBpZiAo
IWRlY29kZXItPmRlY29kZShyZXN1bHQudXBkYXRlUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQudXBkYXRlU2NhbGVGYWN0b3IpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1
cmZhY2VIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUocmVzdWx0LnN1cmZhY2VPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNGE3NDQ4ZTQ4YzA3NmY5
MDZkMGQ2ZmQ4NGNiZjIwZWU2ZTljODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMCwwICsxLDU4IEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdXJmYWNlVXBkYXRlSW5mb19o
CisjZGVmaW5lIFN1cmZhY2VVcGRhdGVJbmZvX2gKKworI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZh
Y2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOwor
Y2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
U3VyZmFjZVVwZGF0ZUluZm8geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRh
dGVJbmZvKTsKKworcHVibGljOgorICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CisKKyAgICB2
b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgU3VyZmFjZVVwZGF0ZUluZm8m
KTsKKworICAgIC8vIFRoZSByZWN0IHRvIGJlIHVwZGF0ZWQuCisgICAgV2ViQ29yZTo6SW50UmVj
dCB1cGRhdGVSZWN0OworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVu
ZGVyIHRoaXMgdXBkYXRlLgorICAgIGZsb2F0IHVwZGF0ZVNjYWxlRmFjdG9yOworCisgICAgLy8g
VGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVhYmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVz
LiBXaWxsIGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vIHVwZGF0ZXMuCisgICAgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlIHN1cmZhY2VIYW5kbGU7CisKKyAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBi
aXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBzdXJmYWNlT2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBVcGRhdGVJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDUwYmMxNTA5ZmM4NmNkZmE1ZjhmNmE3
OTNjZjI4YmZhOGI4ZDhhOGEuLmQ4NjA5ZDAzYWQ0NGRlYmI2YjIxOTYzMDkyMTY4NTI0YTMyZjZm
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQpAQCAtNjcsNiArNjcsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFy
ZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmggXAogICAgIFNoYXJlZC9BUElDbGllbnRUcmFpdHMuaCBc
CiAgICAgU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3Vy
ZmFjZS5oIFwKICAgICBTaGFyZWQvQ2FjaGVNb2RlbC5oIFwKICAgICBTaGFyZWQvQ2hpbGRQcm9j
ZXNzLmggXAogICAgIFNoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmggXApAQCAtOTAsNiArOTEs
NyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvU2Vzc2lvblN0YXRlLmggXAogICAgIFNoYXJl
ZC9TdGF0aXN0aWNzRGF0YS5oIFwKICAgICBTaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oIFwKKyAg
ICBTaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBcCiAgICAgU2hhcmVkL1VwZGF0ZUluZm8uaCBc
CiAgICAgU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmggXAogICAgIFNoYXJlZC9WaXNpdGVkTGlu
a1RhYmxlLmggXApAQCAtNDI2LDYgKzQyOCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlTm9uZS5jcHAgXAogICAgIFNoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgXAogICAg
IFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3VyZmFj
ZS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBcCiAgICAg
U2hhcmVkL1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5z
L05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCBcCkBAIC00NDcsNiArNDUwLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAgXAogICAgIFNoYXJlZC9T
ZXNzaW9uU3RhdGUuY3BwIFwKICAgICBTaGFyZWQvU3RhdGlzdGljc0RhdGEuY3BwIFwKKyAgICBT
aGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwIFwKICAgICBTaGFyZWQvVXBkYXRlSW5mby5jcHAg
XAogICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmNwcCBcCiAgICAgU2hhcmVkL1dlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5jcHAKaW5kZXggZjc5MDYyNzUwZjU5MDI1OGZhMmVkOTMxZjY0ZTAxNGY4
NjU4ZTVjOS4uMGM3NGQ4ZmM4OWI0MTllOWMxODIzOTI3OTIyMzc5OTdiY2JjMzA3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTY2
LDE5ICs2NiwxNiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAgICAgbV9yZW5kZXJlci0+YXBwZW5kVXBk
YXRlKGZ1bmN0aW9uKTsKIH0KIAotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVG
b3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJl
ci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yKSk7
Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cisg
ICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRl
SW5mbyk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRl
SW5mbykKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktp
dDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgQVNTRVJUKHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdHMuc2l6ZSgpID09IDEpOwotICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHVw
ZGF0ZUluZm8udXBkYXRlUmVjdHMuZmlyc3QoKTsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSB1
cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHM7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUp
OwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVU
aWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpUaWxlVXBkYXRlKHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCwgdXBkYXRlSW5m
by5iaXRtYXBPZmZzZXQpKSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2Ug
PSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwg
bV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdldFJlY3QsIHN1cmZhY2UsIHVw
ZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBhOTBjZTQwMjkyM2Ri
Y2YzNWQ3ZmMxZDUzNjgyOTc4YjQ0YTAwZjExLi42YzE2M2M4NDJkMjc5YjJkZmI1MWFlZmFjODE2
ZGYzZDBiMzYzNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1
ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+CkBAIC01Nyw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdl
R0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0
cmFqZWN0b3J5KTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBjcmVhdGVU
aWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRl
SW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKTsKICAgICB2b2lkIGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKICAgICB2b2lk
IGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmlu
ZGV4IDMwMTAzZTM1Y2Q4ZmRjY2U4YTFmY2RmMGU2NTE4YjQ4NjQ2ZmFhMmIuLjI4YmJhZDExYjhh
OGU4ZTBmOWY3OTE1MjExMzE2N2I3YTBhNGUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOCAr
MjMsOCBAQCBtZXNzYWdlcyAtPiBMYXllclRyZWVIb3N0UHJveHkgewogICAgIFNldENvbXBvc2l0
aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikK
ICAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKICAgICBEZWxldGVDb21w
b3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJf
dCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAg
ICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0
OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90
IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1
aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3Qs
IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKICAgICBSZW1vdmVUaWxlRm9y
TGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBDcmVhdGVEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSBoYW5kbGUpCiAgICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5j
cHAKaW5kZXggZDZlNzJlNmY2Nzk2ODRmNTY3YzM5NGY0MGRlYTI4NzgyNGVkYzAwOC4uYWJiZDNh
YTJhZjhkM2ZkN2MzODNlOGZlN2FjNjFiNzNhNGM1NDI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0yNzAsNyArMjcwLDcg
QEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQog
ewogICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2lu
Z1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVw
ZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLmJpdG1hcCwgdXBkYXRl
Lm9mZnNldCk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNv
dXJjZVJlY3QsIHVwZGF0ZS50YXJnZXRSZWN0LCB1cGRhdGUuc3VyZmFjZSwgdXBkYXRlLm9mZnNl
dCk7CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3Rv
cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5oCmluZGV4IDE4MWJlMGMwNjg0YzY0YmJmMGRkZDY2NTMyM2RmYjdmYjVjODg4NmMuLjM1
N2IwODdmMzZhNmQ2ZDIxZDljMDRhMjVlM2I0OTQ0Mjk1OTliNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCkBAIC0yMSw4ICsyMSw4IEBA
CiAjZGVmaW5lIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKIAogI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQotCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxl
U3VyZmFjZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAt
NDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CiAgICAgICAg
IFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdDsKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0OwotICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXA7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOwogICAgICAgICBXZWJDb3JlOjpJ
bnRQb2ludCBvZmZzZXQ7Ci0gICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBuZXdCaXRtYXAsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZz
ZXQpCisgICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFj
ZT4gbmV3U3VyZmFjZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG5ld09mZnNldCkKICAgICAg
ICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCiAgICAgICAgICAgICAsIHRhcmdldFJlY3QodGFy
Z2V0KQotICAgICAgICAgICAgLCBiaXRtYXAobmV3Qml0bWFwKQorICAgICAgICAgICAgLCBzdXJm
YWNlKG5ld1N1cmZhY2UpCiAgICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQpCiAgICAgICAg
IHsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggZmVlMGM5MDYyMjBmNDE4ZGE1M2QxYjFjNGIzM2VmM2E4MWY1
MDAwOC4uNzk5Yzk1MzU1OGE0M2FkYTUzMTcyYzA4NzY0NjExNTE2MTQ4ZjAyOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0z
MSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIExheWVyQmFja2luZ1N0b3Jl
VGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
IHsKLSAgICBpZiAoIW1fYmFja0J1ZmZlcikKKyAgICBpZiAoIW1fc3VyZmFjZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QobV90YXJnZXRSZWN0KTsKQEAgLTQ4
LDE5ICs0OCwxOSBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKICAgICAgICAgc2hvdWxkUmVzZXQg
PSB0cnVlOwogICAgIH0KIAotICAgIFFJbWFnZSBxSW1hZ2UgPSBtX2JhY2tCdWZmZXItPmNyZWF0
ZVFJbWFnZSgpOwogICAgIGlmIChzaG91bGRSZXNldCkKLSAgICAgICAgdGV4dHVyZS0+cmVzZXQo
bV9zb3VyY2VSZWN0LnNpemUoKSwgcUltYWdlLmhhc0FscGhhQ2hhbm5lbCgpID8gQml0bWFwVGV4
dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOwotICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHFJ
bWFnZS5jb25zdEJpdHMoKSwgbV9zb3VyY2VSZWN0LCBtX2JpdG1hcE9mZnNldCwgcUltYWdlLmJ5
dGVzUGVyTGluZSgpKTsKLSAgICBtX2JhY2tCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVy
ZS0+cmVzZXQobV90YXJnZXRSZWN0LnNpemUoKSwgbV9zdXJmYWNlLT5mbGFncygpICYgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6
IDApOworCisgICAgbV9zdXJmYWNlLT5jb3B5VG9UZXh0dXJlKHRleHR1cmUsIG1fc291cmNlUmVj
dCwgbV9zdXJmYWNlT2Zmc2V0KTsKKyAgICBtX3N1cmZhY2UuY2xlYXIoKTsKIH0KIAotdm9pZCBM
YXllckJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBj
b25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7
CiAgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKLSAgICBtX2JpdG1hcE9mZnNldCA9IG9m
ZnNldDsKLSAgICBtX2JhY2tCdWZmZXIgPSBidWZmZXI7CisgICAgbV9zdXJmYWNlT2Zmc2V0ID0g
b2Zmc2V0OworICAgIG1fc3VyZmFjZSA9IGJ1ZmZlcjsKIH0KIAogdm9pZCBMYXllckJhY2tpbmdT
dG9yZTo6Y3JlYXRlVGlsZShpbnQgaWQsIGZsb2F0IHNjYWxlKQpAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIExheWVyQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBpZCkKIH0KIAogCi12b2lkIExh
eWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lkIExheWVyQmFja2lu
Z1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBiYWNr
QnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIEhhc2hNYXA8aW50LCBMYXll
ckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CiAgICAg
QVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaAppbmRleCBhMjQxZTRjMTdkMGVjMGEyNTU4OGJmOGRm
YWIwN2QwMmFjM2Q3MjEzLi4yODUyYmNhYmQ1MDkyNzQ2ZjNlNDlkNGRmMGRjNDViZjVkOGY0YzY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUu
aApAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAKLSNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzksMTMgKzM5LDEzIEBA
IHB1YmxpYzoKIAogICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGU7IH0KICAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAg
ICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYnVmZmVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
U3VyZmFjZT4gYnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCiBwcml2YXRlOgot
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFja0J1ZmZlcjsKKyAgICBSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VS
ZWN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV90YXJnZXRSZWN0OwotICAgIFdlYkNvcmU6Oklu
dFBvaW50IG1fYml0bWFwT2Zmc2V0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1fc3VyZmFjZU9m
ZnNldDsKICAgICBmbG9hdCBtX3NjYWxlOwogfTsKIApAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBM
YXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlIHsKIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7CiAgICAgdm9p
ZCByZW1vdmVUaWxlKGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCB1cGRhdGVUaWxl
KGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9CiAgICAgdm9pZCBjb21taXRUaWxl
T3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcAppbmRleCAzYWY2MjU3ZDUwOTlhZWM4NDdhYzk1YWU5Y2M5ZWQ1MTk3YmE1N2QwLi5iYWU5
YTBmYjFiOTU5NGI1N2ZkZDhjYTI0M2MyYWZjN2ZiY2ZhMzgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5jcHAKQEAgLTU1MywxOSArNTUzLDE5IEBAIENvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29udGVu
dHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0KIAotUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdlYkdyYXBoaWNzTGF5ZXI6OmJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQorUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdlYkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVTdXJmYWNlOjpI
YW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKIHsKICAgICByZXR1cm4g
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVu
dHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwg
b2Zmc2V0KTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7CisgICAgbV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywg
dGFyZ2V0UmVjdCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZShpbnQg
dGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQogewotICAgIG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworICAgIG1f
d2ViR3JhcGhpY3NMYXllckNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUlu
Zm8sIHRhcmdldFJlY3QpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUo
aW50IHRpbGVJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKaW5kZXggMjdmZWM1NWVkOGZlMWE1ZDk5
NGJmMjM5NjEyNmRmMmJmYTk3MzNiYS4uNTMyOWNkYzI3OTZkYzQxMjY0NjM3ZDcxY2I2MmQyNjU5
MjYyMDZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKQEAgLTQ3LDggKzQ3LDggQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICAvLyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQg
dGlsZUlEKSA9IDA7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRl
bnRzUmVjdCgpIGNvbnN0ID0gMDsKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5
ZXJJRD4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdl
YkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2Vi
Q29yZTo6SW50UG9pbnQmKSA9IDA7CiB9OwogfQogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwogCiAgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJ
bmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2Vi
S2l0OjpVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJ
RCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOwotICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6
OkludFBvaW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJLaXQ6
OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CiAKICAgICB2
b2lkIHNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpXZWJHcmFwaGljc0xheWVyQ2xp
ZW50Kik7CiAgICAgdm9pZCBzeW5jQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZS5jcHAKaW5kZXggYWViNmViY2JiYjU4YzRhNzQwNTNlYzg1NzgwYWMzZjAyMmZkZWJmOC4u
NzY0ZWZhNTVjYmEyMjNkMTExMWY2MGZjZjRjZTk3YThiZWM5ZTBhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZS5jcHAKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VyZmFj
ZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlVwZGF0ZUluZm8uaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTcy
LDI3ICs3MiwyNSBAQCBWZWN0b3I8SW50UmVjdD4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Ojp1cGRhdGVCYWNrQnVmZmVyKCkKICAgICBpZiAoIWlzRGlydHkoKSkKICAgICAgICAgcmV0dXJu
IFZlY3RvcjxJbnRSZWN0PigpOwogCi0gICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNv
bnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSwg
dXBkYXRlSW5mby5iaXRtYXBPZmZzZXQpOworICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUlu
Zm87CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGll
bnQtPmJlZ2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uc3Vy
ZmFjZUhhbmRsZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsKICAgICBpZiAoIWdyYXBoaWNz
Q29udGV4dCkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwogICAgIGdyYXBoaWNz
Q29udGV4dC0+dHJhbnNsYXRlKC1tX2RpcnR5UmVjdC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwog
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUt
PmNvbnRlbnRzU2NhbGUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7
CiAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFp
bnQoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRl
bnRzKG1fZGlydHlSZWN0KSk7CiAKLSAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBt
X3JlY3Q7Ci0gICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAgdXBkYXRl
UmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7Ci0gICAgdXBkYXRlSW5mby51cGRh
dGVSZWN0cy5hcHBlbmQodXBkYXRlUmVjdCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0g
bV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCks
IC1tX3JlY3QueSgpKTsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yID0gbV90aWxl
ZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOwogICAgIGdyYXBoaWNzQ29udGV4dC5yZWxl
YXNlKCk7CiAKICAgICBzdGF0aWMgaW50IGlkID0gMDsKICAgICBpZiAoIW1fSUQpIHsKICAgICAg
ICAgbV9JRCA9ICsraWQ7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0
ZUluZm8pOworICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBt
X3JlY3QpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lELCB1
cGRhdGVJbmZvKTsKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5m
bywgbV9yZWN0KTsKIAogICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgIHJldHVybiBW
ZWN0b3I8SW50UmVjdD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAppbmRleCBkZmMy
NTJlNjkwMjYwNmI3NzdiYjA1OTY2YWJkNWM0ODFhYjQ4YWZhLi5jYWUxMWU5YmI3N2FkMTQ0NDc5
YTRhYTJhYjgyZjRjOGFhOTIwOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAotI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKICNp
bmNsdWRlICJUaWxlLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJDb3JlL0ludFJlY3QuaCIKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgVGlsZWRCYWNraW5n
U3RvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQ2xpZW50OwotY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZv
OwogCiBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6
VGlsZSB7CiBwdWJsaWM6CkBAIC03NiwxMCArNzYsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJ
RCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6Oklu
dFBvaW50JikgPSAwOwogfTsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXgg
OWU0NjQxMzVmOWEwOWQ0NmQ0ZWQ2YTUzMThkNmMxMTBkN2RjODNmNi4uYjMwYjE3ZGM1YjU0NzA1
OGZmYTAzNWMyNzkyMTY1YzY0N2JhNjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2ZsYWdzKGZsYWdzKQogewotICAgIG1f
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShkaW1lbnNp
b24sIGRpbWVuc2lvbiksIGZsYWdzKTsKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNl
OjpjcmVhdGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzLCBTaGFyZWFibGVT
dXJmYWNlOjpTdXJmYWNlQmFja2luZyk7CiB9CiAKIHN0YXRpYyBpbnQgbmV4dFBvd2VyT2ZUd28o
aW50IG51bWJlcikKQEAgLTExMiwxMiArMTEyLDE0IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IFdl
CiAgICAgbV9idWZmZXJTdGF0ZXNbaW5kZXhdID0gVGFrZW47CiAgICAgb2Zmc2V0ID0gb2Zmc2V0
Rm9ySW5kZXgoaW5kZXgpOwogICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzaXpl
KTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2JpdG1h
cC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xh
dGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKHJl
Y3QpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZUNvcHkpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgKGZsYWdzKCkgJiBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29s
b3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dChJbnRSZWN0KG9mZnNldCwgc2l6ZSkpOworCisgICAgaWYgKGZsYWdzKCkgJiBTaGFy
ZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZmlsbFJlY3QocmVjdCwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlU291cmNlT3Zlcik7CisgICAgfQorCiAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5y
ZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Vw
ZGF0ZUF0bGFzLmgKaW5kZXggY2VmM2U5YzFkMDJjZjk5NzhiYmIwZmI4NzRkMGE5MWU2MDRmMDlm
NS4uOWQxMDk2MmEzN2EwYjlhNDUwNzk2OWMzODRkYWQzOGM5MjMzNjMwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKQEAgLTIwLDcgKzIw
LDcgQEAKICNpZm5kZWYgVXBkYXRlQXRsYXNfaAogI2RlZmluZSBVcGRhdGVBdGxhc19oCiAKLSNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgi
CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM0LDggKzM0LDggQEAgY2xhc3MgVXBkYXRlQXRsYXMgewogcHVibGljOgogICAgIFVwZGF0ZUF0
bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwogCi0gICAgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9Ci0gICAg
aW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLT5z
aXplKCk7IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UoKSB7IHJl
dHVybiBtX3N1cmZhY2U7IH0KKyAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgYSBudWxs
IHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KICAgICBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KTsKQEAg
LTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U3RhdGU+IG1fYnVmZmVyU3RhdGVz
OwogICAgIFZlY3RvcjxpbnQ+IG1fbGF5b3V0OwogICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
bV9mbGFnczsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApp
bmRleCAxM2VhOTZhYWZjOWI1YzJiZTVlNGVjNTY4Njk5NzllMWY5ZmI4NThlLi4xNGU3Yzg2ZGEy
NzgzYzAyMzU3Mzg4ZTExY2I3MmE1Yzg1MTA4YmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVk
ZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpA
QCAtMzk5LDE2ICs0MDAsMTYgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBk
YXRlSW5mbykpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRh
dGVJbmZvKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVU
aWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBMYXll
clRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQpA
QCAtNDgyLDEwICs0ODMsMTAgQEAgVXBkYXRlQXRsYXMmIExheWVyVHJlZUhvc3RRdDo6Z2V0QXRs
YXMoU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKICAgICByZXR1cm4gbV91cGRhdGVBdGxh
c2VzLmxhc3QoKTsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExh
eWVyVHJlZUhvc3RRdDo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFn
cywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBv
ZmZzZXQpCiB7CiAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gZ2V0QXRsYXMoZmxhZ3MpOwotICAg
IGlmICghYXRsYXMuYml0bWFwKCktPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAgIGlmICghYXRs
YXMuc3VyZmFjZSgpLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigpOwogCiAgICAgLy8gVGhpcyB3aWxsIHJl
dHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKaW5k
ZXggNzkxMjg0MjQ5ZjcxNmI5ZGIwZTljZTQxYzU1NGQzYzFlMTk4MmY0NC4uYzI5M2IxODM2ZWUx
ODYyMjYyY2JkODI4NjdlN2RhM2JmNTA1ZTg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtNjQsOCArNjQs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
V2ViQ29yZTo6SW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0
b3JlKGludDY0X3QpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
aWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGls
ZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmQzNDMwMzI5ZWE0NWM1YzBjNGMwZjQwMDQxMmNhZjQ3
ZjBmMzZhMC4uMGNhOTdlYzZjN2NjZDVjZGY0MjEwOGQ0NjJiYTM4NzMzY2UxM2JjNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTA0LTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3
ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgZ3JhcGhpY3Mgc3VyZmFjZXMgb24gTWFjIGZvciBR
dC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHFt
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTA0LTA5ICBUYWthc2hp
IFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgcHl3
ZWJzb2NrZXQgdG8gMC43LjQuCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMu
cHJmCmluZGV4IGY3ZjYyNTllODg3ZTlmY2FmMTBjZmY5ZDMyMTRjZjhhZjk2OWQzMTUuLmZlYTkx
ZDI4ZTlhMDZmZTE2Yzc4OTE5ZWVkNGM0ZjhlOWI0NjcwOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0xOCw2ICsxOCwxMSBAQCBtZWVnb3RvdWNoIHsK
ICAgICBERUZJTkVTICs9IFdURl9VU0VfTUVFR09UT1VDSD0xCiB9CiAKK21hYzogQ09ORklHICs9
IGdyYXBoaWNzX3N1cmZhY2VzCitjb250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7
CisgICAgREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MQorfQorCiAjIyBsb2Fk
IG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQogbG9hZChtb2JpbGl0eWNv
bmZpZywgdHJ1ZSkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136447</attachid>
            <date>2012-04-10 06:57:03 -0700</date>
            <delta_ts>2012-04-10 07:17:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78675-20120410065701.patch</filename>
            <type>text/plain</type>
            <size>72959</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRjNWY2NGZjZjNjZTFh
MjhmMmU1ZTY5N2JmZGM1Mjc5ODUyNDZlZi4uZjdhODkwZGQwOTA0NzI1OTNiNGJjYjE4ZmE2YWEy
ZDI1NDU0NDdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTA0LTA5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBB
ZGRlZCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2UsIGEgd3JhcHBlciBjbGFzcyB0byBhIHBsYXRm
b3JtLWRlcGVuZGFudAorICAgICAgICBzdXJmYWNlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGVmZmlj
aWVudGx5IGJ5IGJvdGggdGhlIENQVSBhbmQgdGhlIEdQVS4KKyAgICAgICAgVGhpcyB3aWxsIGFs
bG93IGZhc3QgdGV4dHVyZSB1cGxvYWRzIGZvciBXZWJLaXQyLCBhbmQgaW4gdGhlIGZ1dHVyZQor
ICAgICAgICBmYXN0IGNvcGllcyBmb3IgMkQgY2FudmFzIGFuZCBXZWJHTC4KKyAgICAgICAgVGhl
IGZpcnN0IGltcGxlbWVudGF0aW9uIGlzIGZvciBNYWMgdXNpbmcgSU9TdXJmYWNlcy4KKworICAg
ICAgICBUZXh0dXJlTWFwcGVyR0wgaGFkIHRvIGJlIG1vZGlmaWVkIHRvIHVzZSBHTF9VTlNJR05F
RF9JTlRfOF84XzhfOF9SRVYKKyAgICAgICAgZm9yIHRleHR1cmVzIG9uIE1hYywgc2luY2UgdGhh
dCdzIHRoZSBuYXRpdmUgcGl4ZWwgZm9ybWF0IG9mIEJHUkEKKyAgICAgICAgSU9TdXJmYWNlcy4K
KworICAgICAgICBUaG91Z2ggdGhpcyBmZWF0dXJlIGlzIG5vdCB3cml0dGVuIGluIGEgUXQtc3Bl
Y2lmaWMgd2F5LCBpdCdzIGN1cnJlbnRseQorICAgICAgICBvbmx5IGVuYWJsZWQgZm9yIFF0IGFu
ZCBpcyBwcm90ZWN0ZWQgYnkgVVNFKEdSQVBISUNTX1NVUkZBQ0UpLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgQVBJ
IHRlc3RzLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1
cmZhY2UuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFj
L0dyYXBoaWNzU3VyZmFjZU1hYy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OmRpZFJlbGVhc2VJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmlzT3BlbkdMQmFja2VkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlR0w6OmlzT3BlbkdMQmFja2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgor
CisyMDEyLTA0LTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKICAgICAgICAgW1RleG1hcF0gSW1wcm92ZSBUZXh0dXJlTWFwcGVyR0wgcmVhZGFiaWxpdHkK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNDc3CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2MTBkMjE5M2FkNmNhOTk5NTA3MGI2ZjY1MTgzZDk4ZDg2MTU1NTRlLi44
MTlkNWU2MmFiOWE5MWU1OGVlZmZjZGUyY2MzMzRjMGE3YWYxYTU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjcgQEAKKzIwMTItMDQtMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFs
QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gTWFuYWdlIGdyYXBoaWNzIGJ1ZmZlcnMg
aW4gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODY3NQorCisgICAgICAgIEFkZGVkIFNoYXJlYWJsZVN1cmZhY2UsIGEgY2xh
c3MgYWxsb3dpbmcgdGhlIHVzZSBvZiBHUFUtZW5hYmxlZAorICAgICAgICBzdXJmYWNlcyBmb3Ig
Yml0bWFwIHRyYW5zZmVyIGJldHdlZW4gdGhlIHdlYiBhbmQgVUkgcHJvY2Vzc2VzLgorICAgICAg
ICBTaW5jZSBHcmFwaGljc1N1cmZhY2VzIG1heSBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZSwgU2hh
cmVhYmxlU3VyZmFjZQorICAgICAgICB1c2VzIGEgc3RhbmRhcmQgU2hhcmVhYmxlQml0bWFwIGFz
IGEgZmFsbGJhY2sgYmFja2VuZC4KKworICAgICAgICBUaGUgbmVjZXNzYXJ5IHBsdW1iaW5nIHdh
cyBhZGRlZCBpbiBXZWJLaXQyIGZvciBwYXNzaW5nIHVwZGF0ZXMgdmlhCisgICAgICAgIFNoYXJl
YWJsZVN1cmZhY2VzIGluc3RlYWQgb2YgU2hhcmVhYmxlQml0bWFwcy4gU3VyZmFjZVVwZGF0ZUlu
Zm8gd2FzCisgICAgICAgIGFkZGVkLCBhcyB0byBub3QgbWFrZSBVcGRhdGVJbmZvIG1vcmUgY29t
cGxpY2F0ZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFNoYXJl
ZC9TaGFyZWFibGVTdXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9TdXJmYWNlVXBk
YXRlSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5o
OiBBZGRlZC4KKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXll
clRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6
OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oOgorICAgICAgICAoVGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlOjpUaWxlVXBkYXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllckJh
Y2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNr
aW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJCYWNr
aW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tp
bmdTdG9yZS5oOgorICAgICAgICAoTGF5ZXJCYWNraW5nU3RvcmVUaWxlKToKKyAgICAgICAgKExh
eWVyQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRl
VGlsZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmg6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0
bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpiZWdpblBh
aW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9V
cGRhdGVBdGxhcy5oOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6c3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNv
bnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIwMTItMDQtMDcgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbV0syXSBF
bmFibGUgdXNpbmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0bWFwIGZvciBtdWx0aXBsZSB1cGRhdGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCAzYjg0ZGEyMmRmNjUxMDNmNWQ5ZTE4ZWMxY2ZmNzZkMDM1ZDIzNTRj
Li41ZmY5NWQzNzFjZDU0MDg2OTdkYzgxZDZhYzc0NTdmNTZmM2JjODE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
QEAgLTExMDYsNiArMTEwNiw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1NWR0dseXBoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmNwcCBcCkBAIC0yMjQyLDYgKzIyNDQsNyBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmggXApAQCAtNDA3OCw2ICs0MDgxLDEzIEBAIGNvbnRhaW5zKENPTkZJRywgb3Bl
bmdsLXNoaW1zKSB7CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitjb250
YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgbWFjIHsKKyAgICAgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFj
LmNwcAorICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9D
b3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycworICAgIH0KK30KKwogIyBNYWtlIHN1cmUg
dGhlIGRlcml2ZWQgc291cmNlcyBhcmUgYnVpbHQKIGluY2x1ZGUoRGVyaXZlZFNvdXJjZXMucHJp
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJpCmluZGV4IGY3NjFjZTk4MWJkZDY0OWIwYzU0ZWU2NzJlOTJkMGQyMTA0
ZWM3Y2YuLmNkYWViNzMyNzg0N2Y5MjMzN2QzODJlMmUyZTIxYzg1MjVlMTkwMzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCkBAIC02MCw2ICs2MCw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9E
SVIvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0gXAogICAgICQkU09VUkNFX0RJUi9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wgXAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFwaGlj
cy9xdCBcCisgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIFwKICAg
ICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIFwKICAgICAkJFNPVVJDRV9E
SVIvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyBcCiAgICAgJCRTT1VSQ0VfRElSL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzIFwKQEAgLTE5NCw2ICsxOTUsNyBAQCBjb250YWlucyhDT05GSUcs
IHRleG1hcCkgewogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVJfR0w9
MQogICAgICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IExJQlMgKz0gLWxFR0wK
ICAgICB9CisgICAgbWFjOiBMSUJTICs9IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsg
Q29yZUZvdW5kYXRpb24KIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9URVhUVVJFX01B
UFBFUl9HTD0xKXxjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBo
aWNzU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQzYTEwMTJlYmFjYjA2NGY2ZTlhNTgzMDU0NmRh
YjBjYzQxOTJhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK3sKKyAgICBSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFj
ZShzaXplLCBmbGFncykpOworICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1JbXBvcnQodG9rZW4p
KQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisgICAgcmV0
dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1
cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZsYWdz
IGZsYWdzKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgaWYgKCFzdXJmYWNlLT5w
bGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncykpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKwordWludDMyX3QgR3Jh
cGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRXhwb3J0
KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6OmJl
Z2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCit7
CisgICAgaW50IHN0cmlkZSA9IDA7CisgICAgY2hhciogYml0cyA9IHBsYXRmb3JtTG9jayhyZWN0
LCAmc3RyaWRlLCBsb2NrT3B0aW9ucyk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0ID0gcGxhdGZvcm1CZWdpblBhaW50KHJlY3Quc2l6ZSgpLCBiaXRzLCBzdHJp
ZGUpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCit2b2lkIEdy
YXBoaWNzU3VyZmFjZTo6Y29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qg
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUsIHRhcmdl
dFJlY3QsIG9mZnNldCk7Cit9CisKK0dyYXBoaWNzU3VyZmFjZTo6R3JhcGhpY3NTdXJmYWNlKGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQorICAgIDogbV9zaXplKHNpemUpCisgICAg
LCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9wbGF0Zm9ybVN1cmZhY2UoMCkKKyAgICAsIG1fdGV4
dHVyZSgwKQorICAgICwgbV9mYm8oMCkKK3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3Vy
ZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRhOTQxZDQ5N2ZjNTE3N2VjMGY1Mzc2ZmUzMzcwYmQ2NWUxZTRk
MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NTdXJmYWNlX2gKKyNk
ZWZpbmUgR3JhcGhpY3NTdXJmYWNlX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJQYXNz
T3duUHRyLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgor
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpZiBPUyhEQVJXSU4pCit0eXBlZGVmIHN0
cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwordHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxh
dGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBHcmFwaGljc1N1cmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc1N1cmZhY2U+
IHsKK3B1YmxpYzoKKyAgICBlbnVtIEZsYWcgeworICAgICAgICBTdXBwb3J0c0FscGhhID0gMHgw
MSwKKyAgICAgICAgU3VwcG9ydHNTb2Z0d2FyZVdyaXRlID0gMHgwMiwKKyAgICAgICAgU3VwcG9y
dHNTb2Z0d2FyZVJlYWQgPSAweDA0LAorICAgICAgICBTdXBwb3J0c1RleHR1cmVUYXJnZXQgPSAw
eDA4LAorICAgICAgICBTdXBwb3J0c1RleHR1cmVTb3VyY2UgPSAweDEwLAorICAgICAgICBTdXBw
b3J0c0NvcHlUb1RleHR1cmUgPSAweDIwLAorICAgICAgICBTdXBwb3J0c0NvcHlGcm9tVGV4dHVy
ZSA9IDB4NDAsCisgICAgICAgIFN1cHBvcnRzU2hhcmluZyA9IDB4ODAKKyAgICB9OworCisgICAg
ZW51bSBMb2NrT3B0aW9uIHsKKyAgICAgICAgUmV0YWluUGl4ZWxzID0gMHgwMSwKKyAgICAgICAg
UmVhZE9ubHkgPSAweDAyCisgICAgfTsKKworICAgIHR5cGVkZWYgaW50IEZsYWdzOworICAgIHR5
cGVkZWYgaW50IExvY2tPcHRpb25zOworCisgICAgRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVy
biBtX2ZsYWdzOyB9CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgcGxhdGZvcm1TdXJmYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVN1cmZhY2U7IH0KKyAgICBJbnRTaXplIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBo
aWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1
aW50MzJfdCB0b2tlbik7CisgICAgdm9pZCBjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0
LCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQ
b2ludCYgc291cmNlT2Zmc2V0KTsKKyAgICB1aW50MzJfdCBleHBvcnRUb2tlbigpOworICAgIFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmLCBMb2Nr
T3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9ubHlJbWFnZShjb25z
dCBJbnRSZWN0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIHBsYXRmb3JtQ3JlYXRlKGNvbnN0
IEludFNpemUmLCBGbGFncyk7CisgICAgYm9vbCBwbGF0Zm9ybUltcG9ydCh1aW50MzJfdCk7Cisg
ICAgdWludDMyX3QgcGxhdGZvcm1FeHBvcnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgp
OworCisgICAgY2hhciogcGxhdGZvcm1Mb2NrKGNvbnN0IEludFJlY3QmLCBpbnQqIHN0cmlkZSwg
TG9ja09wdGlvbnMpOworICAgIHZvaWQgcGxhdGZvcm1VbmxvY2soKTsKKyAgICB2b2lkIHBsYXRm
b3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CisKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gcGxhdGZvcm1CZWdpblBhaW50KGNvbnN0IEludFNpemUmLCBjaGFyKiBiaXRzLCBp
bnQgc3RyaWRlKTsKKworcHJvdGVjdGVkOgorICAgIExvY2tPcHRpb25zIG1fbG9ja09wdGlvbnM7
CisgICAgRmxhZ3MgbV9mbGFnczsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc1N1cmZhY2UoY29u
c3QgSW50U2l6ZSYsIEZsYWdzKTsKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIHN0YXRpYyB2b2lk
IGRpZFJlbGVhc2VJbWFnZSh2b2lkKik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBtX3BsYXRmb3JtU3VyZmFjZTsK
KyAgICB1aW50MzJfdCBtX3RleHR1cmU7CisgICAgdWludDMyX3QgbV9mYm87Cit9OworCit9Cisj
ZW5kaWYgLy8gVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNlbmRpZiAvLyBHcmFwaGljc1N1cmZh
Y2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NmExYTAyMDIwOGIyYjkxNGRhMmEzOTUwMzI4NTAzMDJlYzhmODM0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNz
U3VyZmFjZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NT
dXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkgJiYgT1MoREFSV0lOKQorI2lu
Y2x1ZGUgPENGTnVtYmVyLmg+CisjaW5jbHVkZSA8Q0dMQ29udGV4dC5oPgorI2luY2x1ZGUgPENH
TEN1cnJlbnQuaD4KKyNpbmNsdWRlIDxDR0xJT1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxJT1N1cmZh
Y2UvSU9TdXJmYWNlLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50MzJfdCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlR2V0
SUQobV9wbGF0Zm9ybVN1cmZhY2UpOworfQorCitzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVy
ZShJT1N1cmZhY2VSZWYgaGFuZGxlKQoreworICAgIEdMdWludCB0ZXh0dXJlID0gMDsKKyAgICBH
THVpbnQgZm9ybWF0ID0gR0xfQkdSQTsKKyAgICBHTHVpbnQgdHlwZSA9IEdMX1VOU0lHTkVEX0lO
VF84XzhfOF84X1JFVjsKKyAgICBHTHVpbnQgaW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBOworICAg
IENHTENvbnRleHRPYmogY29udGV4dCA9IENHTEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMaW50IHByZXZUZXh0dXJlOwor
ICAgIEdMYm9vbGVhbiB3YXNFbmFibGVkID0gZ2xJc0VuYWJsZWQoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgJnBy
ZXZUZXh0dXJlKTsKKyAgICBpZiAoIXdhc0VuYWJsZWQpCisgICAgICAgIGdsRW5hYmxlKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQik7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOworICAg
IENHTEVycm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJT1N1cmZhY2UyRChjb250ZXh0LCBHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIGludGVybmFsRm9ybWF0LCBJT1N1cmZhY2VHZXRXaWR0aChoYW5k
bGUpLCBJT1N1cmZhY2VHZXRIZWlnaHQoaGFuZGxlKSwgZm9ybWF0LCB0eXBlLCBoYW5kbGUsIDAp
OworICAgIGlmIChlcnJvcikgeworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJl
KTsKKyAgICAgICAgdGV4dHVyZSA9IDA7CisgICAgfQorCisgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHByZXZUZXh0dXJlKTsKKyAgICBpZiAoIXdhc0VuYWJsZWQp
CisgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworICAgIHJldHVy
biB0ZXh0dXJlOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRl
eHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBnbFB1c2hBdHRyaWIoR0xfQUxM
X0FUVFJJQl9CSVRTKTsKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgbV90ZXh0dXJlID0g
Y3JlYXRlVGV4dHVyZShtX3BsYXRmb3JtU3VyZmFjZSk7CisgICAgaWYgKCFtX2ZibykKKyAgICAg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgMCk7CisgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCKTsKKyAgICBnbEVuYWJsZSh0YXJnZXQpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0
LCBpZCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsK
KyAgICBnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdl
dFJlY3QueSgpLCBvZmZzZXQueCgpLCBvZmZzZXQueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCkpOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9G
UkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgMCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgMCk7
CisgICAgZ2xQb3BBdHRyaWIoKTsKK30KKworYm9vbCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQoreworICAgIHVuc2lnbmVk
IHBpeGVsRm9ybWF0ID0gJ0JHUkEnOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7
CisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhl
aWdodCgpOworCisgICAgdW5zaWduZWQgbG9uZyBieXRlc1BlclJvdyA9IElPU3VyZmFjZUFsaWdu
UHJvcGVydHkoa0lPU3VyZmFjZUJ5dGVzUGVyUm93LCB3aWR0aCAqIGJ5dGVzUGVyRWxlbWVudCk7
CisgICAgaWYgKCFieXRlc1BlclJvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5z
aWduZWQgbG9uZyBhbGxvY1NpemUgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VB
bGxvY1NpemUsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTsKKyAgICBpZiAoIWFsbG9jU2l6ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3Qgdm9pZCAqa2V5c1s3XTsKKyAgICBjb25z
dCB2b2lkICp2YWx1ZXNbN107CisgICAga2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKKyAgICB2
YWx1ZXNbMF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwor
ICAgIGtleXNbMV0gPSBrSU9TdXJmYWNlSGVpZ2h0OworICAgIHZhbHVlc1sxXSA9IENGTnVtYmVy
Q3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOworICAgIGtleXNbMl0gPSBrSU9T
dXJmYWNlUGl4ZWxGb3JtYXQ7CisgICAgdmFsdWVzWzJdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVySW50VHlwZSwgJnBpeGVsRm9ybWF0KTsKKyAgICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5
dGVzUGVyRWxlbWVudDsKKyAgICB2YWx1ZXNbM10gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmYnl0ZXNQZXJFbGVtZW50KTsKKyAgICBrZXlzWzRdID0ga0lPU3VyZmFjZUJ5
dGVzUGVyUm93OworICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxv
bmdUeXBlLCAmYnl0ZXNQZXJSb3cpOworICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXpl
OworICAgIHZhbHVlc1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAm
YWxsb2NTaXplKTsKKyAgICBrZXlzWzZdID0ga0lPU3VyZmFjZUlzR2xvYmFsOworICAgIHZhbHVl
c1s2XSA9IChmbGFncyAmIEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nKSA/IGtDRkJv
b2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Qg
PSBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA3LCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNzsgaSsrKQorICAgICAgICBDRlJlbGVhc2UodmFsdWVz
W2ldKTsKKworICAgIG1fcGxhdGZvcm1TdXJmYWNlID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOwor
ICAgIHJldHVybiAhIW1fcGxhdGZvcm1TdXJmYWNlOworfQorCitib29sIEdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1JbXBvcnQodWludDMyX3QgdG9rZW4pCit7CisgICAgbV9wbGF0Zm9ybVN1cmZh
Y2UgPSBJT1N1cmZhY2VMb29rdXAodG9rZW4pOworICAgIHJldHVybiAhIW1fcGxhdGZvcm1TdXJm
YWNlOworfQorCitzdGF0aWMgaW50IGlvU3VyZmFjZUxvY2tPcHRpb25zKGludCBsb2NrT3B0aW9u
cykKK3sKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAgaWYgKGxvY2tPcHRpb25zICYgR3JhcGhp
Y3NTdXJmYWNlOjpSZWFkT25seSkKKyAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja1Jl
YWRPbmx5OworICAgIGlmICghKGxvY2tPcHRpb25zICYgR3JhcGhpY3NTdXJmYWNlOjpSZXRhaW5Q
aXhlbHMpKQorICAgICAgICBvcHRpb25zIHw9IGtJT1N1cmZhY2VMb2NrQXZvaWRTeW5jOworICAg
IHJldHVybiBvcHRpb25zOworfQorCitzdGF0aWMgaW50IGlvU3VyZmFjZVVubG9ja09wdGlvbnMo
aW50IGxvY2tPcHRpb25zKQoreworICAgIGludCBvcHRpb25zID0gMDsKKyAgICBpZiAobG9ja09w
dGlvbnMgJiBHcmFwaGljc1N1cmZhY2U6OlJlYWRPbmx5KQorICAgICAgICBvcHRpb25zIHw9IChr
SU9TdXJmYWNlTG9ja0F2b2lkU3luYyB8IGtJT1N1cmZhY2VMb2NrUmVhZE9ubHkpOworICAgIHJl
dHVybiBvcHRpb25zOworfQorCitjaGFyKiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9jayhj
b25zdCBJbnRSZWN0JiByZWN0LCBpbnQqIG91dHB1dFN0cmlkZSwgTG9ja09wdGlvbnMgbG9ja09w
dGlvbnMpCit7CisgICAgbV9sb2NrT3B0aW9ucyA9IGxvY2tPcHRpb25zOworICAgIElPU3VyZmFj
ZUxvY2sobV9wbGF0Zm9ybVN1cmZhY2UsIGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlv
bnMpLCAwKTsKKworICAgIGludCBzdHJpZGUgPSBJT1N1cmZhY2VHZXRCeXRlc1BlclJvdyhtX3Bs
YXRmb3JtU3VyZmFjZSk7CisgICAgaWYgKG91dHB1dFN0cmlkZSkKKyAgICAgICAgKm91dHB1dFN0
cmlkZSA9IHN0cmlkZTsKKworICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9T
dXJmYWNlR2V0QmFzZUFkZHJlc3MobV9wbGF0Zm9ybVN1cmZhY2UpKTsKKyAgICByZXR1cm4gYmFz
ZSArIHN0cmlkZSAqIHJlY3QueSgpICsgcmVjdC54KCkgKiA0OworfQorCit2b2lkIEdyYXBoaWNz
U3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQoreworICAgIElPU3VyZmFjZVVubG9jayhtX3BsYXRm
b3JtU3VyZmFjZSwgaW9TdXJmYWNlVW5sb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSAmICh+a0lP
U3VyZmFjZUxvY2tBdm9pZFN5bmMpLCAwKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKG1fZmJvKQorICAgICAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9mYm8pOworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX3Bs
YXRmb3JtU3VyZmFjZSkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3Vy
ZmFjZVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWFiNmM4M2QwMDM4YTdhNmY2ZmJiM2QwMTI3MjkyMGJh
YWY3MzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkgJiYgUExBVEZPUk0oUVQpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUg
PFFJbWFnZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGl4bWFwPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6ZGlkUmVsZWFzZUltYWdlKHZv
aWQqIGRhdGEpCit7CisgICAgR3JhcGhpY3NTdXJmYWNlKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8
R3JhcGhpY3NTdXJmYWNlKj4oZGF0YSk7CisgICAgc3VyZmFjZS0+cGxhdGZvcm1VbmxvY2soKTsK
K30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1CZWdpblBhaW50KGNvbnN0IEludFNpemUmIHNpemUsIGNoYXIqIGJpdHMsIGludCBzdHJpZGUp
Cit7CisgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0ID0gKGZsYWdzKCkgJiBTdXBwb3J0c0FscGhh
KSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRf
UkdCMzI7CisKKyAgICAvLyBUaGUgaW1hZ2UgYW5kIHBhaW50ZXIgd2lsbCBiZSByZWxlYXNlZCB3
aGVuIHRoZSByZXR1cm5lZCBHcmFwaGljc0NvbnRleHQgaXMgcmVsZWFzZWQuCisgICAgUUltYWdl
KiBpbWFnZSA9IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGJpdHMpLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHN0cmlkZSwgZm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2Us
IHRoaXMpOworICAgIFFQYWludGVyKiBwYWludGVyID0gbmV3IFFQYWludGVyKGltYWdlKTsKKyAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRha2VPd25l
cnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVs
ZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZVJl
YWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpbnQgc3RyaWRlOworICAg
IFFJbWFnZTo6Rm9ybWF0IGZvcm1hdCA9IChmbGFncygpICYgU3VwcG9ydHNBbHBoYSkgPyBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwor
ICAgIGNoYXIqIGRhdGEgPSBwbGF0Zm9ybUxvY2socmVjdCwgJnN0cmlkZSwgUmV0YWluUGl4ZWxz
IHwgUmVhZE9ubHkpOworICAgIFFJbWFnZSBpbWFnZShyZWludGVycHJldF9jYXN0PHVjaGFyKj4o
ZGF0YSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgc3RyaWRlLCBmb3JtYXQsIGRpZFJl
bGVhc2VJbWFnZSwgdGhpcyk7CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUobmV3IFFQ
aXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltYWdlKSkpOworfQorCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCmluZGV4IGEyODdkYmQ0NGY1N2E0YjQ2ODc4YjIxMWE0NzBlZDc5M2E0MDk1MjAuLjBm
MmNlYTE1MGI3ZjNjYzE4OTAzZTRhNGFkMjUyNmZkOTkzMDcyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApA
QCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+Qml0bWFwVGV4
dHVyZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlZEJ5T3BlbkdMKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRQb2ludCYgb2Zmc2V0KSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDdj
YTYxY2NjYTVlNzRjZTk2Mzc5YjY2MGFiYTEwNmJiYTY1MmJlNmQuLmUzM2U1NjY0OGJjNDlhYzI0
MmIzZDZhZjQ1MDdhNDRkOGEzZWQxYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMjAs
NiArMjIwLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwo
KQogICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0cnVlOwogfQogCitCaXRtYXBUZXh0dXJlR0wqIHRv
Qml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0
dXJlIHx8ICF0ZXh0dXJlLT5pc0JhY2tlZEJ5T3BlbkdMKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHRleHR1cmUpOworfQor
CiBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAgICAgOiBtX2RhdGEobmV3IFRl
eHR1cmVNYXBwZXJHTERhdGEpCiAgICAgLCBtX2NvbnRleHQoMCkKQEAgLTM3NSw2ICszODMsMTIg
QEAgYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250
ZW50c1NpemUsIEZsYWdzKQogICAgIHJldHVybiBjb250ZW50c1NpemUgPT0gbV90ZXh0dXJlU2l6
ZTsKIH0KIAorI2lmIE9TKERBUldJTikKKyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RS
QU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCisjZWxzZQorI2RlZmluZSBE
RUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9CWVRFCisjZW5k
aWYKKwogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKICAgICBpZiAoIW1faWQp
CkBAIC0zOTAsNyArNDA0LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKICAg
ICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKSk7CiAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpOwogICAgIEdMX0NNRChn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdM
X1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwg
R0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgMCkpOworICAgIEdMX0NNRChnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1
cmVTaXplLmhlaWdodCgpLCAwLCBHTF9CR1JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSwgMCkpOwogfQogCiBzdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJf
dCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHN0cmlkZSA9IDApCkBAIC00MzYsNyAr
NDUwLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQq
IGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgc3dpenpsZUJHUkFUb1JH
QkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihjb25zdF9jYXN0PHZvaWQqPihkYXRhKSksIHRhcmdl
dFJlY3Quc2l6ZSgpLCBieXRlc1BlckxpbmUgLyA0KTsKIAogICAgIGlmIChieXRlc1BlckxpbmUg
PT0gdGFyZ2V0UmVjdC53aWR0aCgpIC8gNCAmJiBzb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onpl
cm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgKGNvbnN0IGNoYXIq
KWRhdGEpKTsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC00NDUsNyArNDU5LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgY29uc3Qg
Y2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKTsKICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdodCgpOyArK3kpIHsKICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJjZU9mZnNldC55KCkgKyB5KSAqIGJ5dGVz
UGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsKLSAgICAgICAgICAgIEdMX0NNRChnbFRl
eFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBnbEZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgcm93KSk7CisgICAgICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSArIHksIHRhcmdldFJlY3Qud2lk
dGgoKSwgMSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCBy
b3cpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDU0LDcgKzQ2OCw3
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRh
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIDQpKTsKICAgICBHTF9DTUQoZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKSk7CiAgICAgR0xf
Q01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgp
KSk7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIChjb25zdCBjaGFyKilkYXRhKSk7
CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0
LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWln
aHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29u
c3QgY2hhciopZGF0YSkpOwogICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1df
TEVOR1RILCAwKSk7CiAgICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9X
UywgMCkpOwogICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywg
MCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IGI2YzZlNDJjY2IzODhhZGRjYTJkOTlkZjVlZmQ2
OGM4ZGI4NmFjNjcuLmYyZWE4M2I0MDNjZTZlNDUwOWNhYjFiYzgyNmE0MWMxMDU5YjAzMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKQEAgLTg4LDYgKzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIg
PSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VP
ZmZzZXQsIGludCBieXRlc1BlckxpbmUpOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlZEJ5T3Bl
bkdMKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIEdMdWludCBtX2lk
OwpAQCAtMTExLDkgKzExMiw5IEBAIHByaXZhdGU6CiAKIHR5cGVkZWYgdWludDY0X3QgSW1hZ2VV
SUQ7CiBJbWFnZVVJRCB1aWRGb3JJbWFnZShJbWFnZSopOworQml0bWFwVGV4dHVyZUdMKiB0b0Jp
dG1hcFRleHR1cmVHTChCaXRtYXBUZXh0dXJlKik7CiAKLX07Ci0KK30KICNlbmRpZgogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZjEwZTE2M2Y2ODhjZWRlNTEzMTQ5NTQ4OWJmZTI1NTZmNTlhNjI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuY3BwCkBAIC0wLDAg
KzEsMjA3IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKworI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlOjpI
YW5kbGUoKQorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIDogbV9ncmFwaGljc1N1cmZh
Y2VUb2tlbigwKQorI2VuZGlmCit7Cit9CisKK3ZvaWQgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxl
OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXItPmVuY29kZShtX3NpemUpOworICAgIGVuY29kZXItPmVuY29kZShtX2ZsYWdzKTsK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9ncmFwaGlj
c1N1cmZhY2VUb2tlbik7CisgICAgaWYgKG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgorICAgIGVuY29kZXItPmVuY29kZShtX2JpdG1hcEhhbmRsZSk7Cit9
CisKK2Jvb2wgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShoYW5kbGUubV9zaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX2ZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRs
ZS5tX2dyYXBoaWNzU3VyZmFjZVRva2VuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgSGludHMgaGludHMpCit7Cisj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKGhpbnRzICYgU3VwcG9ydHNHcmFwaGlj
c1N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UgPSBj
cmVhdGVXaXRoU3VyZmFjZShzaXplLCBmbGFncyk7CisgICAgICAgIGlmIChzdXJmYWNlKQorICAg
ICAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworICAgIH0KKyNlbmRpZgorCisgICAg
cmV0dXJuIGNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFi
bGUoc2l6ZSwgZmxhZ3MpKTsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorUGFzc1Jl
ZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGVXaXRoU3VyZmFj
ZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKQorewor
ICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0KKyAgICAgICAgICAgIEdy
YXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTb2Z0d2FyZVdyaXRlCisgICAgICAgICAgICB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNDb3B5VG9UZXh0dXJlCisgICAgICAgICAgICB8IEdyYXBoaWNz
U3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworCisgICAgaWYgKGZsYWdzICYgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKQorICAgICAgICBzdXJmYWNlRmxhZ3MgfD0gR3JhcGhpY3NTdXJm
YWNlOjpTdXBwb3J0c0FscGhhOworCisgICAgLy8gVGhpcyBtaWdodCByZXR1cm4gbnVsbCwgaWYg
dGhlIHN5c3RlbSBpcyB1bmFibGUgdG8gcHJvdmlkZSBhIG5ldyBncmFwaGljcyBzdXJmYWNlLgor
ICAgIC8vIEluIHRoYXQgY2FzZSwgdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gbnVsbCBhbmQg
YWxsb3cgZmFsbGluZyBiYWNrIHRvIFNoYXJlYWJsZUJpdG1hcC4KKyAgICBSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPiBzdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgc3VyZmFj
ZUZsYWdzKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNT
RVJUKHN1cmZhY2UpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlU3VyZmFjZShz
aXplLCBmbGFncywgc3VyZmFjZS5yZWxlYXNlKCkpKTsKK30KKyNlbmRpZgorCitQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7ICAgIAorI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQorICAgIGlmIChpc0JhY2tlZEJ5R3JhcGhpY3NTdXJmYWNlKCkpCisgICAgICAgIHJl
dHVybiBtX2dyYXBoaWNzU3VyZmFjZS0+YmVnaW5QYWludChyZWN0LCAwIC8qIFdyaXRlIHdpdGhv
dXQgcmV0YWluaW5nIHBpeGVscyovKTsKKyNlbmRpZgorCisgICAgQVNTRVJUKG1fYml0bWFwKTsK
KyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2JpdG1hcC0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKHJlY3Qp
OworICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCByZWN0LnkoKSk7Cisg
ICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNp
emUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXApCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNl
KHNpemUsIGZsYWdzLCBiaXRtYXApKTsKK30KKworU2hhcmVhYmxlU3VyZmFjZTo6U2hhcmVhYmxl
U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdz
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwKQorICAgIDogbV9zaXplKHNpemUp
CisgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQoreworfQorCisj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCitTaGFyZWFibGVTdXJmYWNlOjpTaGFyZWFibGVTdXJm
YWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
ZmxhZ3MsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQorICAg
IDogbV9zaXplKHNpemUpCisgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9ncmFwaGljc1N1
cmZhY2Uoc3VyZmFjZSkKK3sKK30KKworUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFy
ZWFibGVTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFw
OjpGbGFncyBmbGFncywgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNlKHNpemUsIGZsYWdzLCBzdXJm
YWNlKSk7Cit9CisjZW5kaWYKKworU2hhcmVhYmxlU3VyZmFjZTo6flNoYXJlYWJsZVN1cmZhY2Uo
KQoreworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IFNoYXJlYWJsZVN1cmZhY2U6
OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKK3sKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBoYW5kbGUubV9ncmFw
aGljc1N1cmZhY2VUb2tlbik7CisgICAgICAgIGlmIChzdXJmYWNlKQorICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5t
X2ZsYWdzLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oc3VyZmFjZSkpKTsKKyNlbmRpZgor
CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlLm1fYml0bWFwSGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3JlYXRlKGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2Zs
YWdzLCBiaXRtYXAucmVsZWFzZSgpKTsKK30KKworYm9vbCBTaGFyZWFibGVTdXJmYWNlOjpjcmVh
dGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsK
KyAgICBoYW5kbGUubV9mbGFncyA9IG1fZmxhZ3M7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNl
ID8gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCkgOiAwOworICAgIGlmIChoYW5kbGUu
bV9ncmFwaGljc1N1cmZhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAg
ICBpZiAoIW1fYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlLm1fYml0bWFwSGFuZGxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCit2b2lkIFNoYXJlYWJsZVN1cmZhY2U6OmNvcHlUb1RleHR1cmUoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiBwYXNzVGV4dHVyZSwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KQoreworICAgIFJlZlB0cjxCaXRt
YXBUZXh0dXJlPiB0ZXh0dXJlKHBhc3NUZXh0dXJlKTsKKworI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorICAgIGlmIChpc0JhY2tlZEJ5R3JhcGhpY3NTdXJmYWNlKCkpIHsKKyAgICAgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmVHTD4gdGV4dHVyZUdMID0gdG9CaXRtYXBUZXh0dXJlR0wodGV4dHVy
ZS5nZXQoKSk7CisgICAgICAgIGlmICh0ZXh0dXJlR0wpIHsKKyAgICAgICAgICAgIHVpbnQzMl90
IHRleHR1cmVJRCA9IHRleHR1cmVHTC0+aWQoKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRleHR1
cmVUYXJnZXQgPSB0ZXh0dXJlR0wtPnRleHR1cmVUYXJnZXQoKTsKKyAgICAgICAgICAgIG1fZ3Jh
cGhpY3NTdXJmYWNlLT5jb3B5VG9HTFRleHR1cmUodGV4dHVyZVRhcmdldCwgdGV4dHVyZUlELCB0
YXJnZXQsIHNvdXJjZU9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9ncmFwaGljc1N1cmZhY2UtPmNyZWF0ZVJl
YWRPbmx5SW1hZ2UoSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldC5zaXplKCkpKTsKKyAgICAg
ICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldCwgSW50UG9pbnQ6
Onplcm8oKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBBU1NFUlQobV9iaXRtYXApOworICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2JpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKKyAgICB0ZXh0dXJl
LT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0LCBzb3VyY2VPZmZzZXQpOworICAg
IHJldHVybjsKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1
cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWQyZTA5OGEzNmQwMWZiMmNhOGUxYTFjZGJjOWJmMDQzNjc3M2NmMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKQEAgLTAs
MCArMSwxMTUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFNoYXJlYWJsZVN1cmZhY2VfaAorI2RlZmluZSBTaGFyZWFibGVTdXJmYWNlX2gKKworI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisj
aW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIEltYWdlOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlU3VyZmFjZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlYWJsZVN1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IEhpbnQgeworICAgICAgICBTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSA9IDB4MDEKKyAgICB9Owor
CisgICAgdHlwZWRlZiB1bnNpZ25lZCBIaW50czsKKworICAgIGNsYXNzIEhhbmRsZSB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhhbmRsZSk7CisgICAgcHVibGljOgorICAgICAgICBI
YW5kbGUoKTsKKworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0OworCisgICAgICAgIHZvaWQg
ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAgICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVhYmxlU3VyZmFjZTsKKyAgICAgICAg
bXV0YWJsZSBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBtX2JpdG1hcEhhbmRsZTsKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgdWludDMyX3QgbV9ncmFwaGljc1N1cmZhY2VUb2tl
bjsKKyNlbmRpZgorICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgU2hh
cmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAgIH07CisKKyAgICAvLyBDcmVhdGUgYSBu
ZXcgU2hhcmVhYmxlU3VyZmFjZSwgYW5kIGFsbG9jYXRlIGVpdGhlciBhIEdyYXBoaWNzU3VyZmFj
ZSBvciBhIFNoYXJlYWJsZUJpdG1hcCBhcyBiYWNraW5nLgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncywgSGludHMpOworCisgICAgLy8gQ3JlYXRlIGEgc2hhcmVhYmxlIHN1
cmZhY2UgZnJvbSBhIGhhbmRsZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJm
YWNlPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdz
IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorCisgICAgLy8gQ3JlYXRlIGEgaGFu
ZGxlLgorICAgIGJvb2wgY3JlYXRlSGFuZGxlKEhhbmRsZSYpOworCisgICAgflNoYXJlYWJsZVN1
cmZhY2UoKTsKKworICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdlYkNvcmU6OkludFJlY3QoV2ViQ29yZTo6SW50UG9pbnQoKSwgc2l6ZSgpKTsgfQorCisg
ICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhaW50
IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdm9pZCBjb3B5VG9UZXh0dXJlKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRh
cmdldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNvdXJjZU9mZnNldCk7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBTaGFyZWFibGVTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworCisg
ICAgLy8gQ3JlYXRlIGEgU2hhcmVhYmxlU3VyZmFjZSByZWZlcmVuY2luZyBhbiBleGlzdGluZyBT
aGFyZWFibGVCaXRtYXAuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4g
Y3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgU2hhcmVhYmxlU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxl
Qml0bWFwOjpGbGFncywgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKKyAg
ICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIGJhY2tlZCBieSBhIGdyYXBoaWNzIHN1cmZh
Y2UuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gY3JlYXRlV2l0aFN1
cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwor
ICAgIC8vIENyZWF0ZSBhIFNoYXJlYWJsZVN1cmZhY2UgcmVmZXJlbmNpbmcgYW4gZXhpc3Rpbmcg
R3JhcGhpY3NTdXJmYWNlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywg
UGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKKworICAgIGJvb2wgaXNCYWNr
ZWRCeUdyYXBoaWNzU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9ncmFwaGljc1N1cmZhY2U7
IH0KKyNlbmRpZgorCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CisgICAgU2hhcmVhYmxl
Qml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0
bWFwOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgUmVmUHRyPFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU2hhcmVhYmxlU3VyZmFjZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uY3BwIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmRjMGNhODE1
YWU3ZWFmZmNkOTA1NjcwMzc5NmI2NWM3M2VkMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNwcApAQCAtMCwwICsxLDQ5IEBACisv
KgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgU3VyZmFjZVVwZGF0
ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVJlY3QpOworICAgIGVuY29kZXItPmVuY29kZSh1
cGRhdGVTY2FsZUZhY3Rvcik7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN1cmZhY2VIYW5kbGUpOwor
ICAgIGVuY29kZXItPmVuY29kZShzdXJmYWNlT2Zmc2V0KTsKK30KKworYm9vbCBTdXJmYWNlVXBk
YXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU3VyZmFj
ZVVwZGF0ZUluZm8mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQu
dXBkYXRlUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShyZXN1bHQudXBkYXRlU2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1cmZhY2VIYW5kbGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1cmZhY2VPZmZz
ZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3Vy
ZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJmYWNlVXBkYXRlSW5m
by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYyNGE3NDQ4ZTQ4YzA3NmY5MDZkMGQ2ZmQ4NGNiZjIwZWU2ZTljODUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUlu
Zm8uaApAQCAtMCwwICsxLDU4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBTdXJmYWNlVXBkYXRlSW5mb19oCisjZGVmaW5lIFN1cmZhY2VVcGRhdGVJ
bmZvX2gKKworI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIENv
cmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm8geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKKworcHVibGljOgorICAg
IFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXIqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiwgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKworICAgIC8vIFRoZSByZWN0IHRv
IGJlIHVwZGF0ZWQuCisgICAgV2ViQ29yZTo6SW50UmVjdCB1cGRhdGVSZWN0OworCisgICAgLy8g
VGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgorICAgIGZs
b2F0IHVwZGF0ZVNjYWxlRmFjdG9yOworCisgICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVh
YmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUg
YXJlIG5vIHVwZGF0ZXMuCisgICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIHN1cmZhY2VIYW5k
bGU7CisKKyAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVk
IGNvbnRlbnRzIGFyZS4KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBzdXJmYWNlT2Zmc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVcGRhdGVJbmZvX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCmluZGV4IDUwYmMxNTA5ZmM4NmNkZmE1ZjhmNmE3OTNjZjI4YmZhOGI4ZDhhOGEuLmQ4NjA5
ZDAzYWQ0NGRlYmI2YjIxOTYzMDkyMTY4NTI0YTMyZjZmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtNjcs
NiArNjcsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvQVBJL2MvcXQvV0tJbWFnZVF0Lmgg
XAogICAgIFNoYXJlZC9BUElDbGllbnRUcmFpdHMuaCBcCiAgICAgU2hhcmVkL1NoYXJlYWJsZUJp
dG1hcC5oIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oIFwKICAgICBTaGFyZWQvQ2Fj
aGVNb2RlbC5oIFwKICAgICBTaGFyZWQvQ2hpbGRQcm9jZXNzLmggXAogICAgIFNoYXJlZC9EaWN0
aW9uYXJ5UG9wdXBJbmZvLmggXApAQCAtOTAsNiArOTEsNyBAQCBIRUFERVJTICs9IFwKICAgICBT
aGFyZWQvU2Vzc2lvblN0YXRlLmggXAogICAgIFNoYXJlZC9TdGF0aXN0aWNzRGF0YS5oIFwKICAg
ICBTaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oIFwKKyAgICBTaGFyZWQvU3VyZmFjZVVwZGF0ZUlu
Zm8uaCBcCiAgICAgU2hhcmVkL1VwZGF0ZUluZm8uaCBcCiAgICAgU2hhcmVkL1VzZXJNZXNzYWdl
Q29kZXJzLmggXAogICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmggXApAQCAtNDI2LDYgKzQy
OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luTW9kdWxlTm9uZS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgXAogICAgIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
Y3BwIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAgXAogICAgIFNoYXJlZC9QbHVn
aW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlm
aWVyRGF0YS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
LmNwcCBcCkBAIC00NDcsNiArNDUwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1NlY3Vy
aXR5T3JpZ2luRGF0YS5jcHAgXAogICAgIFNoYXJlZC9TZXNzaW9uU3RhdGUuY3BwIFwKICAgICBT
aGFyZWQvU3RhdGlzdGljc0RhdGEuY3BwIFwKKyAgICBTaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8u
Y3BwIFwKICAgICBTaGFyZWQvVXBkYXRlSW5mby5jcHAgXAogICAgIFNoYXJlZC9WaXNpdGVkTGlu
a1RhYmxlLmNwcCBcCiAgICAgU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXgg
Zjc5MDYyNzUwZjU5MDI1OGZhMmVkOTMxZjY0ZTAxNGY4NjU4ZTVjOS4uMGM3NGQ4ZmM4OWI0MTll
OWMxODIzOTI3OTIyMzc5OTdiY2JjMzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTY2LDE5ICs2NiwxNiBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCiAgICAgbV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0KIAotdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxheWVy
KGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCiB7Ci0gICAgQVNTRVJUKHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuc2l6ZSgpID09
IDEpOwotICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuZmly
c3QoKTsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3Vu
ZHM7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHNvdXJjZVJl
Y3QsIHRhcmdldFJlY3QsIGJpdG1hcCwgdXBkYXRlSW5mby5iaXRtYXBPZmZzZXQpKSk7CisgICAg
UmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVh
dGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJ
RCwgdGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3QsIHRhcmdldFJlY3QsIHN1cmZhY2UsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkp
KTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihpbnQg
bGF5ZXJJRCwgaW50IHRpbGVJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaAppbmRleCBhOTBjZTQwMjkyM2RiY2YzNWQ3ZmMxZDUzNjgyOTc4YjQ0YTAw
ZjExLi42YzE2M2M4NDJkMjc5YjJkZmI1MWFlZmFjODE2ZGYzZDBiMzYzNWM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSw2ICsyNSw3
IEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CkBAIC01Nyw4
ICs1OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRp
ZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRl
VGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0
ZUluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7
CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZv
aWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKICAgICB2b2lk
IGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKICAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDMwMTAzZTM1Y2Q4ZmRjY2U4YTFm
Y2RmMGU2NTE4YjQ4NjQ2ZmFhMmIuLjI4YmJhZDExYjhhOGU4ZTBmOWY3OTE1MjExMzE2N2I3YTBh
NGUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOCArMjMsOCBAQCBtZXNzYWdlcyAtPiBMYXll
clRyZWVIb3N0UHJveHkgewogICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJf
dCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKICAgICBTZXRSb290Q29tcG9zaXRpbmdM
YXllcih1aW50MzJfdCBpZCkKICAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlk
KQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBX
ZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8p
CisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdl
YkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQorICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGls
ZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbykKICAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
aW50IHRpbGVJRCkKICAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtl
eSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCiAgICAgRGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggZDZlNzJlNmY2Nzk2ODRm
NTY3YzM5NGY0MGRlYTI4NzgyNGVkYzAwOC4uYWJiZDNhYTJhZjhkM2ZkN2MzODNlOGZlN2FjNjFi
NzNhNGM1NDI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVy
VHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCiB2b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQogewogICAgIFJlZlB0cjxMYXllckJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJh
Y2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUu
dGFyZ2V0UmVjdCwgdXBkYXRlLmJpdG1hcCwgdXBkYXRlLm9mZnNldCk7CisgICAgYmFja2luZ1N0
b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50YXJnZXRS
ZWN0LCB1cGRhdGUuc3VyZmFjZSwgdXBkYXRlLm9mZnNldCk7CiAgICAgbV9iYWNraW5nU3RvcmVz
V2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCmluZGV4IDE4MWJlMGMwNjg0
YzY0YmJmMGRkZDY2NTMyM2RmYjdmYjVjODg4NmMuLjM1N2IwODdmMzZhNmQ2ZDIxZDljMDRhMjVl
M2I0OTQ0Mjk1OTliNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJM
YXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXll
clRyZWVSZW5kZXJlci5oCkBAIC0yMSw4ICsyMSw4IEBACiAjZGVmaW5lIFdlYkxheWVyVHJlZVJl
bmRlcmVyX2gKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCiAjaW5jbHVkZSAiQmFj
a2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAtNDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoK
ICAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CiAgICAgICAgIFdlYkNvcmU6OkludFJlY3Qgc291cmNl
UmVjdDsKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0OwotICAgICAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXA7CisgICAgICAgIFJlZlB0cjxTaGFyZWFibGVTdXJm
YWNlPiBzdXJmYWNlOwogICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZzZXQ7Ci0gICAgICAg
IFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBuZXdCaXRtYXAs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCisgICAgICAgIFRpbGVVcGRhdGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0
YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbmV3U3VyZmFjZSwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIG5ld09mZnNldCkKICAgICAgICAgICAgIDogc291cmNlUmVjdChzb3Vy
Y2UpCiAgICAgICAgICAgICAsIHRhcmdldFJlY3QodGFyZ2V0KQotICAgICAgICAgICAgLCBiaXRt
YXAobmV3Qml0bWFwKQorICAgICAgICAgICAgLCBzdXJmYWNlKG5ld1N1cmZhY2UpCiAgICAgICAg
ICAgICAsIG9mZnNldChuZXdPZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKaW5kZXggZmVl
MGM5MDYyMjBmNDE4ZGE1M2QxYjFjNGIzM2VmM2E4MWY1MDAwOC4uNzk5Yzk1MzU1OGE0M2FkYTUz
MTcyYzA4NzY0NjExNTE2MTQ4ZjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiB2b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKLSAgICBpZiAoIW1fYmFja0J1ZmZl
cikKKyAgICBpZiAoIW1fc3VyZmFjZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0
IHRhcmdldFJlY3QobV90YXJnZXRSZWN0KTsKQEAgLTQ4LDE5ICs0OCwxOSBAQCB2b2lkIExheWVy
QmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlcikKICAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOwogICAgIH0KIAotICAgIFFJ
bWFnZSBxSW1hZ2UgPSBtX2JhY2tCdWZmZXItPmNyZWF0ZVFJbWFnZSgpOwogICAgIGlmIChzaG91
bGRSZXNldCkKLSAgICAgICAgdGV4dHVyZS0+cmVzZXQobV9zb3VyY2VSZWN0LnNpemUoKSwgcUlt
YWdlLmhhc0FscGhhQ2hhbm5lbCgpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDAp
OwotICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHFJbWFnZS5jb25zdEJpdHMoKSwgbV9zb3Vy
Y2VSZWN0LCBtX2JpdG1hcE9mZnNldCwgcUltYWdlLmJ5dGVzUGVyTGluZSgpKTsKLSAgICBtX2Jh
Y2tCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90YXJnZXRSZWN0LnNp
emUoKSwgbV9zdXJmYWNlLT5mbGFncygpICYgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
ID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOworCisgICAgbV9zdXJmYWNlLT5j
b3B5VG9UZXh0dXJlKHRleHR1cmUsIG1fc291cmNlUmVjdCwgbV9zdXJmYWNlT2Zmc2V0KTsKKyAg
ICBtX3N1cmZhY2UuY2xlYXIoKTsKIH0KIAotdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnNl
dEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJ1ZmZlciwgY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3ZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNv
bnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQog
ewogICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CiAgICAgbV90YXJnZXRSZWN0ID0gdGFy
Z2V0UmVjdDsKLSAgICBtX2JpdG1hcE9mZnNldCA9IG9mZnNldDsKLSAgICBtX2JhY2tCdWZmZXIg
PSBidWZmZXI7CisgICAgbV9zdXJmYWNlT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fc3VyZmFjZSA9
IGJ1ZmZlcjsKIH0KIAogdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZShpbnQgaWQs
IGZsb2F0IHNjYWxlKQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIExheWVyQmFja2luZ1N0b3JlOjpy
ZW1vdmVUaWxlKGludCBpZCkKIH0KIAogCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVU
aWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJhY2tCdWZmZXIsIGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCit2b2lkIExheWVyQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBp
ZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
UGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KQogewogICAgIEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5k
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUu
aAppbmRleCBhMjQxZTRjMTdkMGVjMGEyNTU4OGJmOGRmYWIwN2QwMmFjM2Q3MjEzLi4yODUyYmNh
YmQ1MDkyNzQ2ZjNlNDlkNGRmMGRjNDViZjVkOGY0YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuaApAQCAtMjIsNyArMjIsNyBAQAogCiAj
aWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtMzksMTMgKzM5LDEzIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBm
bG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KICAgICB2b2lkIHN3YXBCdWZm
ZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAg
IHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IG1fYmFja0J1ZmZlcjsKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNl
OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OwogICAgIFdlYkNvcmU6OkludFJl
Y3QgbV90YXJnZXRSZWN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fYml0bWFwT2Zmc2V0Owor
ICAgIFdlYkNvcmU6OkludFBvaW50IG1fc3VyZmFjZU9mZnNldDsKICAgICBmbG9hdCBtX3NjYWxl
OwogfTsKIApAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1Ymxp
YyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2b2lk
IGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7CiAgICAgdm9pZCByZW1vdmVUaWxlKGludCk7Ci0gICAg
dm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CisgICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJCYWNr
aW5nU3RvcmUpOyB9CiAgICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyKik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0
dXJlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAzYWY2MjU3ZDUwOTlh
ZWM4NDdhYzk1YWU5Y2M5ZWQ1MTk3YmE1N2QwLi5iYWU5YTBmYjFiOTU5NGI1N2ZkZDhjYTI0M2My
YWZjN2ZiY2ZhMzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTU1MywxOSArNTUz
LDE5IEBAIENvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0
ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IFdlYkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBXZWJD
b3JlOjpJbnRQb2ludCYgb2Zmc2V0KQorUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IFdlYkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6
SW50UG9pbnQmIG9mZnNldCkKIHsKICAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKIH0KIAotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCiB7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCks
IHRpbGVJRCwgdXBkYXRlSW5mbyk7CisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVh
dGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7CiB9CiAKLXZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0KQogewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dXBkYXRlVGlsZShp
ZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+
dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOwogfQogCiB2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmgKaW5kZXggMjdmZWM1NWVkOGZlMWE1ZDk5NGJmMjM5NjEyNmRmMmJmYTk3MzNiYS4u
NTMyOWNkYzI3OTZkYzQxMjY0NjM3ZDcxY2I2MmQyNjU5MjYyMDZhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmgKQEAgLTQ3LDggKzQ3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJH
cmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CiAKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKQEAg
LTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJl
bihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7
Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZs
YWdzLCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29u
dGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFn
cywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiB9
OwogfQogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDb2xvciB0
aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGlu
dCB0aWxlSUQpOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJLaXQ6OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CiAKICAgICB2b2lkIHNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQoV2ViS2l0OjpXZWJHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBzeW5jQ2hp
bGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKaW5kZXggYWViNmViY2Ji
YjU4YzRhNzQwNTNlYzg1NzgwYWMzZjAyMmZkZWJmOC4uNzY0ZWZhNTVjYmEyMjNkMTExMWY2MGZj
ZjRjZTk3YThiZWM5ZTBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKQEAg
LTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRl
ICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTcyLDI3ICs3MiwyNSBAQCBWZWN0b3I8SW50
UmVjdD4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKICAg
ICBpZiAoIWlzRGlydHkoKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwogCi0g
ICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Qu
c2l6ZSgpLCB1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSwgdXBkYXRlSW5mby5iaXRtYXBPZmZzZXQp
OworICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZSht
X2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSwgdXBkYXRlSW5mby5z
dXJmYWNlT2Zmc2V0KTsKICAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IFZlY3RvcjxJbnRSZWN0PigpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1tX2Rp
cnR5UmVjdC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSwgbV90aWxl
ZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7CiAgICAgbV90aWxlZEJhY2tpbmdTdG9y
ZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgp
LCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fZGlydHlSZWN0KSk7CiAKLSAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBtX3JlY3Q7Ci0gICAgSW50UmVjdCB1cGRh
dGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAgdXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAt
bV9yZWN0LnkoKSk7Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cy5hcHBlbmQodXBkYXRlUmVj
dCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRl
SW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKICAgICB1cGRh
dGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNT
Y2FsZSgpOwogICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CiAKICAgICBzdGF0aWMgaW50
IGlkID0gMDsKICAgICBpZiAoIW1fSUQpIHsKICAgICAgICAgbV9JRCA9ICsraWQ7Ci0gICAgICAg
IG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8pOworICAgICAgICBtX2NsaWVu
dC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvKTsKKyAgICAgICAgbV9j
bGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5mbywgbV9yZWN0KTsKIAogICAgIG1fZGly
dHlSZWN0ID0gSW50UmVjdCgpOwogICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9y
ZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGUuaAppbmRleCBkZmMyNTJlNjkwMjYwNmI3NzdiYjA1OTY2YWJk
NWM0ODFhYjQ4YWZhLi5jYWUxMWU5YmI3N2FkMTQ0NDc5YTRhYTJhYjgyZjRjOGFhOTIwOWYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgor
I2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKICNpbmNsdWRlICJUaWxlLmgiCiAjaW5jbHVk
ZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJXZWJDb3JlL0ludFJlY3QuaCIKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7CiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50OwotY2xhc3MgVXBk
YXRlSW5mbzsKK2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwogCiBjbGFzcyBUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZSB7CiBwdWJsaWM6CkBAIC03Niwx
MCArNzYsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNs
aWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCkgPSAwOwotICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJ
bnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogfTsKIAogY2xh
c3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpU
aWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXggOWU0NjQxMzVmOWEwOWQ0NmQ0ZWQ2YTUz
MThkNmMxMTBkN2RjODNmNi4uOTM4M2JjNTJkZWU0YzM5OGFlMWNjZDJkODI2MGY5NmUwNjVmYjY4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRs
YXMuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogVXBkYXRlQXRsYXM6
OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Mp
CiAgICAgOiBtX2ZsYWdzKGZsYWdzKQogewotICAgIG1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzKTsK
KyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoSW50U2l6ZShkaW1lbnNp
b24sIGRpbWVuc2lvbiksIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNz
U3VyZmFjZSk7CiB9CiAKIHN0YXRpYyBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikKQEAg
LTExMiwxMiArMTEyLDE0IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxh
czo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IFdlCiAgICAgbV9idWZmZXJT
dGF0ZXNbaW5kZXhdID0gVGFrZW47CiAgICAgb2Zmc2V0ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgp
OwogICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKTsKLSAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUob2Zmc2V0LngoKSwg
b2Zmc2V0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKHJlY3QpOwotICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6
OlN1cHBvcnRzQWxwaGEpID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29sb3I6OndoaXRlLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBn
cmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0
KG9mZnNldCwgc2l6ZSkpOworCisgICAgaWYgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3Qo
cmVjdCwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgfQorCiAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxh
cy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5k
ZXggY2VmM2U5YzFkMDJjZjk5NzhiYmIwZmI4NzRkMGE5MWU2MDRmMDlmNS4uOWQxMDk2MmEzN2Ew
YjlhNDUwNzk2OWMzODRkYWQzOGM5MjMzNjMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYg
VXBkYXRlQXRsYXNfaAogI2RlZmluZSBVcGRhdGVBdGxhc19oCiAKLSNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAKICNpZiBVU0UoVUlf
U0lERV9DT01QT1NJVElORykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0LDggKzM0LDggQEAg
Y2xhc3MgVXBkYXRlQXRsYXMgewogcHVibGljOgogICAgIFVwZGF0ZUF0bGFzKGludCBkaW1lbnNp
b24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwogCi0gICAgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9Ci0gICAgaW5saW5lIFdlYkNvcmU6
OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLT5zaXplKCk7IH0KKyAgICBQ
YXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UoKSB7IHJldHVybiBtX3N1cmZhY2U7
IH0KKyAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dXJmYWNlLT5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhl
cmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KTsKQEAgLTU2LDcgKzU2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8U3RhdGU+IG1fYnVmZmVyU3RhdGVzOwogICAgIFZlY3Rvcjxp
bnQ+IG1fbGF5b3V0OwogICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgbV9mbGFnczsKLSAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gbV9zdXJmYWNlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAppbmRleCAxM2VhOTZhYWZj
OWI1YzJiZTVlNGVjNTY4Njk5NzllMWY5ZmI4NThlLi4xNGU3Yzg2ZGEyNzgzYzAyMzU3Mzg4ZTEx
Y2I3MmE1Yzg1MTA4YmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJX
ZWJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtMzk5LDE2ICs0MDAs
MTYgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGls
ZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94
eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbykpOworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVUaWxl
Rm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAK
LXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdl
dFJlY3QpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQs
IHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJl
bW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQpAQCAtNDgyLDEwICs0ODMs
MTAgQEAgVXBkYXRlQXRsYXMmIExheWVyVHJlZUhvc3RRdDo6Z2V0QXRsYXMoU2hhcmVhYmxlQml0
bWFwOjpGbGFncyBmbGFncykKICAgICByZXR1cm4gbV91cGRhdGVBdGxhc2VzLmxhc3QoKTsKIH0K
IAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUhvc3RRdDo6
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJs
ZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFdl
YkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4gTGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7CiAgICAg
VXBkYXRlQXRsYXMmIGF0bGFzID0gZ2V0QXRsYXMoZmxhZ3MpOwotICAgIGlmICghYXRsYXMuYml0
bWFwKCktPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAgIGlmICghYXRsYXMuc3VyZmFjZSgpLT5j
cmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PigpOwogCiAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRo
ZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKaW5kZXggNzkxMjg0MjQ5Zjcx
NmI5ZGIwZTljZTQxYzU1NGQzYzFlMTk4MmY0NC4uYzI5M2IxODM2ZWUxODYyMjYyY2JkODI4Njdl
N2RhM2JmNTA1ZTg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2Uq
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
VGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJM
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBX
ZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
U2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29y
ZTo6SW50UG9pbnQmKTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RR
dChXZWJQYWdlKik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggYmQzNDMwMzI5ZWE0NWM1YzBjNGMwZjQwMDQxMmNhZjQ3ZjBmMzZhMC4uMGNhOTdl
YzZjN2NjZDVjZGY0MjEwOGQ0NjJiYTM4NzMzY2UxM2JjNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA0LTA5
ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAg
W1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAg
ICAgICBFbmFibGUgZ3JhcGhpY3Mgc3VyZmFjZXMgb24gTWFjIGZvciBRdC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTA0LTA5ICBUYWthc2hpIFRveW9zaGltYSAgPHRv
eW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgcHl3ZWJzb2NrZXQgdG8gMC43
LjQuCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnBy
ZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGY3ZjYy
NTllODg3ZTlmY2FmMTBjZmY5ZDMyMTRjZjhhZjk2OWQzMTUuLmZlYTkxZDI4ZTlhMDZmZTE2Yzc4
OTE5ZWVkNGM0ZjhlOWI0NjcwOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVh
dHVyZXMucHJmCkBAIC0xOCw2ICsxOCwxMSBAQCBtZWVnb3RvdWNoIHsKICAgICBERUZJTkVTICs9
IFdURl9VU0VfTUVFR09UT1VDSD0xCiB9CiAKK21hYzogQ09ORklHICs9IGdyYXBoaWNzX3N1cmZh
Y2VzCitjb250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgREVGSU5FUyAr
PSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MQorfQorCiAjIyBsb2FkIG1vYmlsaXR5Y29uZmln
IGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQogbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136451</attachid>
            <date>2012-04-10 07:17:49 -0700</date>
            <delta_ts>2012-04-11 05:17:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78675-20120410071747.patch</filename>
            <type>text/plain</type>
            <size>73166</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRjNWY2NGZjZjNjZTFh
MjhmMmU1ZTY5N2JmZGM1Mjc5ODUyNDZlZi4uZDlhMDNhYWZlMjRiZmRmODIwZTFhYmNjYWJkZThi
ZWRhNjgxNmNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTA0LTA5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0XVtX
SzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBB
ZGRlZCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2UsIGEgd3JhcHBlciBjbGFzcyB0byBhIHBsYXRm
b3JtLWRlcGVuZGFudAorICAgICAgICBzdXJmYWNlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGVmZmlj
aWVudGx5IGJ5IGJvdGggdGhlIENQVSBhbmQgdGhlIEdQVS4KKyAgICAgICAgVGhpcyB3aWxsIGFs
bG93IGZhc3QgdGV4dHVyZSB1cGxvYWRzIGZvciBXZWJLaXQyLCBhbmQgaW4gdGhlIGZ1dHVyZQor
ICAgICAgICBmYXN0IGNvcGllcyBmb3IgMkQgY2FudmFzIGFuZCBXZWJHTC4KKyAgICAgICAgVGhl
IGZpcnN0IGltcGxlbWVudGF0aW9uIGlzIGZvciBNYWMgdXNpbmcgSU9TdXJmYWNlcy4KKworICAg
ICAgICBUZXh0dXJlTWFwcGVyR0wgaGFkIHRvIGJlIG1vZGlmaWVkIHRvIHVzZSBHTF9VTlNJR05F
RF9JTlRfOF84XzhfOF9SRVYKKyAgICAgICAgZm9yIHRleHR1cmVzIG9uIE1hYywgc2luY2UgdGhh
dCdzIHRoZSBuYXRpdmUgcGl4ZWwgZm9ybWF0IG9mIEJHUkEKKyAgICAgICAgSU9TdXJmYWNlcy4K
KworICAgICAgICBUaG91Z2ggdGhpcyBmZWF0dXJlIGlzIG5vdCB3cml0dGVuIGluIGEgUXQtc3Bl
Y2lmaWMgd2F5LCBpdCdzIGN1cnJlbnRseQorICAgICAgICBvbmx5IGVuYWJsZWQgZm9yIFF0IGFu
ZCBpcyBwcm90ZWN0ZWQgYnkgVVNFKEdSQVBISUNTX1NVUkZBQ0UpLgorCisgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgQVBJIHRlc3RzLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBX
ZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGlj
c1N1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OmRpZFJlbGVhc2VJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1CZWdpblBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3Jl
YXRlUmVhZE9ubHlJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmlzT3BlbkdM
QmFja2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmlzT3BlbkdMQmFja2VkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorCisyMDEyLTA0LTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhh
bEBub2tpYS5jb20+CisKICAgICAgICAgW1RleG1hcF0gSW1wcm92ZSBUZXh0dXJlTWFwcGVyR0wg
cmVhZGFiaWxpdHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgzNDc3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2MTBkMjE5M2FkNmNhOTk5NTA3MGI2ZjY1MTgzZDk4
ZDg2MTU1NTRlLi5lOTc1NzlmYzZmOGVkOTdiZGFjN2JlMzIzOWExYzBkYzEwN2NjNWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTItMDQtMDkgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gTWFuYWdlIGdyYXBo
aWNzIGJ1ZmZlcnMgaW4gdGhlIHdlYiBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3NQorCisgICAgICAgIEFkZGVkIFNoYXJlYWJsZVN1
cmZhY2UsIGEgY2xhc3MgYWxsb3dpbmcgdGhlIHVzZSBvZiBHUFUtZW5hYmxlZAorICAgICAgICBz
dXJmYWNlcyBmb3IgYml0bWFwIHRyYW5zZmVyIGJldHdlZW4gdGhlIHdlYiBhbmQgVUkgcHJvY2Vz
c2VzLgorICAgICAgICBTaW5jZSBHcmFwaGljc1N1cmZhY2VzIG1heSBub3QgYWx3YXlzIGJlIGF2
YWlsYWJsZSwgU2hhcmVhYmxlU3VyZmFjZQorICAgICAgICB1c2VzIGEgc3RhbmRhcmQgU2hhcmVh
YmxlQml0bWFwIGFzIGEgZmFsbGJhY2sgYmFja2VuZC4KKworICAgICAgICBUaGUgbmVjZXNzYXJ5
IHBsdW1iaW5nIHdhcyBhZGRlZCBpbiBXZWJLaXQyIGZvciBwYXNzaW5nIHVwZGF0ZXMgdmlhCisg
ICAgICAgIFNoYXJlYWJsZVN1cmZhY2VzIGluc3RlYWQgb2YgU2hhcmVhYmxlQml0bWFwcy4gU3Vy
ZmFjZVVwZGF0ZUluZm8gd2FzCisgICAgICAgIGFkZGVkLCBhcyB0byBub3QgbWFrZSBVcGRhdGVJ
bmZvIG1vcmUgY29tcGxpY2F0ZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHA6
IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmg6IEFkZGVkLgorICAg
ICAgICAqIFNoYXJlZC9TdXJmYWNlVXBkYXRlSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAqIFNo
YXJlZC9TdXJmYWNlVXBkYXRlSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0
UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoVGlsZVVwZGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlOjpUaWxl
VXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoTGF5ZXJCYWNraW5n
U3RvcmVUaWxlKToKKyAgICAgICAgKExheWVyQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVD
bGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJL
aXQ6OlVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oOgorICAgICAgICAoV2ViS2l0OjpV
cGRhdGVBdGxhczo6c3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXpl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RR
dCk6CisKIDIwMTItMDQtMDcgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KIAogICAgICAgICBbV0syXSBFbmFibGUgdXNpbmcgYSBzaW5nbGUgU2hhcmVhYmxlQml0
bWFwIGZvciBtdWx0aXBsZSB1cGRhdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzYjg0ZGEyMmRmNjUxMDNm
NWQ5ZTE4ZWMxY2ZmNzZkMDM1ZDIzNTRjLi41ZmY5NWQzNzFjZDU0MDg2OTdkYzgxZDZhYzc0NTdm
NTZmM2JjODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExMDYsNiArMTEwNiw4IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0dseXBoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1
cmZhY2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1
cmZhY2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBcCkBAIC0yMjQyLDYgKzIyNDQs
NyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0
YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL0dyYXBoaWNzU3VyZmFjZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggXApAQCAtNDA3OCw2ICs0MDgxLDEz
IEBAIGNvbnRhaW5zKENPTkZJRywgb3BlbmdsLXNoaW1zKSB7CiAgICAgREVGSU5FUyArPSBRVF9P
UEVOR0xfU0hJTVM9MQogfQogCitjb250YWlucyhDT05GSUcsIGdyYXBoaWNzX3N1cmZhY2VzKSB7
CisgICAgbWFjIHsKKyAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcAorICAgICAgICBJTkNMVURFUEFUSCArPSAvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvSGVhZGVycwor
ICAgIH0KK30KKwogIyBNYWtlIHN1cmUgdGhlIGRlcml2ZWQgc291cmNlcyBhcmUgYnVpbHQKIGlu
Y2x1ZGUoRGVyaXZlZFNvdXJjZXMucHJpKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IGY3NjFjZTk4MWJk
ZDY0OWIwYzU0ZWU2NzJlOTJkMGQyMTA0ZWM3Y2YuLmNkYWViNzMyNzg0N2Y5MjMzN2QzODJlMmUy
ZTIxYzg1MjVlMTkwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC02MCw2ICs2MCw3IEBAIElOQ0xVREVQ
QVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0g
XAogICAgICQkU09VUkNFX0RJUi9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wgXAogICAgICQkU09V
UkNFX0RJUi9wbGF0Zm9ybS9ncmFwaGljcy9xdCBcCisgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzIFwKICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwIFwKICAgICAkJFNPVVJDRV9ESVIvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyBc
CiAgICAgJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzIFwKQEAgLTE5NCw2ICsx
OTUsNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBERUZJTkVTICs9IFdU
Rl9VU0VfVEVYVFVSRV9NQVBQRVJfR0w9MQogICAgICAgICBjb250YWlucyhRVF9DT05GSUcsIG9w
ZW5nbGVzMik6IExJQlMgKz0gLWxFR0wKICAgICB9CisgICAgbWFjOiBMSUJTICs9IC1mcmFtZXdv
cmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24KIH0KIAogY29udGFpbnMoREVG
SU5FUywgV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTD0xKXxjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV0VCR0w9MSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQzYTEw
MTJlYmFjYjA2NGY2ZTlhNTgzMDU0NmRhYjBjYzQxOTJhYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5j
cHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKwor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50
MzJfdCB0b2tlbikKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOworICAgIGlmICghc3VyZmFj
ZS0+cGxhdGZvcm1JbXBvcnQodG9rZW4pKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+KCk7CisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXpl
LCBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIGZsYWdzKQoreworICAgIFJlZlB0cjxHcmFwaGljc1N1
cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdz
KSk7CisgICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybUNyZWF0ZShzaXplLCBmbGFncykpCisgICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICByZXR1cm4gc3Vy
ZmFjZTsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit7Cisg
ICAgcmV0dXJuIHBsYXRmb3JtRXhwb3J0KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBHcmFwaGljc1N1cmZhY2U6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgTG9j
a09wdGlvbnMgbG9ja09wdGlvbnMpCit7CisgICAgaW50IHN0cmlkZSA9IDA7CisgICAgY2hhciog
Yml0cyA9IHBsYXRmb3JtTG9jayhyZWN0LCAmc3RyaWRlLCBsb2NrT3B0aW9ucyk7CisgICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gcGxhdGZvcm1CZWdpblBhaW50
KHJlY3Quc2l6ZSgpLCBiaXRzLCBzdHJpZGUpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQu
cmVsZWFzZSgpOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6Y29weVRvR0xUZXh0dXJlKHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBwbGF0Zm9ybUNvcHlUb0dMVGV4dHVy
ZSh0YXJnZXQsIHRleHR1cmUsIHRhcmdldFJlY3QsIG9mZnNldCk7Cit9CisKK0dyYXBoaWNzU3Vy
ZmFjZTo6R3JhcGhpY3NTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQor
ICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9wbGF0Zm9y
bVN1cmZhY2UoMCkKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKK3sKK30KKwor
fQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhOTQxZDQ5N2ZjNTE3
N2VjMGY1Mzc2ZmUzMzcwYmQ2NWUxZTRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaApAQCAtMCww
ICsxLDEwNCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgR3JhcGhpY3NTdXJmYWNlX2gKKyNkZWZpbmUgR3JhcGhpY3NTdXJmYWNlX2gKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJP
d25QdHIuaCIKKyNpbmNsdWRlICJQYXNzT3duUHRyLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5o
IgorI2luY2x1ZGUgIlJlZlB0ci5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNp
ZiBPUyhEQVJXSU4pCit0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwor
dHlwZWRlZiBJT1N1cmZhY2VSZWYgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2U7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc1N1cmZhY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxHcmFwaGljc1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEZsYWcgeworICAg
ICAgICBTdXBwb3J0c0FscGhhID0gMHgwMSwKKyAgICAgICAgU3VwcG9ydHNTb2Z0d2FyZVdyaXRl
ID0gMHgwMiwKKyAgICAgICAgU3VwcG9ydHNTb2Z0d2FyZVJlYWQgPSAweDA0LAorICAgICAgICBT
dXBwb3J0c1RleHR1cmVUYXJnZXQgPSAweDA4LAorICAgICAgICBTdXBwb3J0c1RleHR1cmVTb3Vy
Y2UgPSAweDEwLAorICAgICAgICBTdXBwb3J0c0NvcHlUb1RleHR1cmUgPSAweDIwLAorICAgICAg
ICBTdXBwb3J0c0NvcHlGcm9tVGV4dHVyZSA9IDB4NDAsCisgICAgICAgIFN1cHBvcnRzU2hhcmlu
ZyA9IDB4ODAKKyAgICB9OworCisgICAgZW51bSBMb2NrT3B0aW9uIHsKKyAgICAgICAgUmV0YWlu
UGl4ZWxzID0gMHgwMSwKKyAgICAgICAgUmVhZE9ubHkgPSAweDAyCisgICAgfTsKKworICAgIHR5
cGVkZWYgaW50IEZsYWdzOworICAgIHR5cGVkZWYgaW50IExvY2tPcHRpb25zOworCisgICAgRmxh
Z3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAgUGxhdGZvcm1HcmFwaGlj
c1N1cmZhY2UgcGxhdGZvcm1TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVN1cmZh
Y2U7IH0KKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUm
LCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50MzJfdCB0b2tlbik7CisgICAgdm9pZCBjb3B5VG9H
TFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KTsKKyAgICB1aW50MzJf
dCBleHBvcnRUb2tlbigpOworICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBh
aW50KGNvbnN0IEludFJlY3QmLCBMb2NrT3B0aW9ucyk7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4g
Y3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBi
b29sIHBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisgICAgYm9vbCBwbGF0
Zm9ybUltcG9ydCh1aW50MzJfdCk7CisgICAgdWludDMyX3QgcGxhdGZvcm1FeHBvcnQoKTsKKyAg
ICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworCisgICAgY2hhciogcGxhdGZvcm1Mb2NrKGNvbnN0
IEludFJlY3QmLCBpbnQqIHN0cmlkZSwgTG9ja09wdGlvbnMpOworICAgIHZvaWQgcGxhdGZvcm1V
bmxvY2soKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdl
dCwgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CisK
KyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gcGxhdGZvcm1CZWdpblBhaW50KGNvbnN0
IEludFNpemUmLCBjaGFyKiBiaXRzLCBpbnQgc3RyaWRlKTsKKworcHJvdGVjdGVkOgorICAgIExv
Y2tPcHRpb25zIG1fbG9ja09wdGlvbnM7CisgICAgRmxhZ3MgbV9mbGFnczsKKworcHJpdmF0ZToK
KyAgICBHcmFwaGljc1N1cmZhY2UoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKKworI2lmIFBMQVRG
T1JNKFFUKQorICAgIHN0YXRpYyB2b2lkIGRpZFJlbGVhc2VJbWFnZSh2b2lkKik7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzU3Vy
ZmFjZSBtX3BsYXRmb3JtU3VyZmFjZTsKKyAgICB1aW50MzJfdCBtX3RleHR1cmU7CisgICAgdWlu
dDMyX3QgbV9mYm87Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisK
KyNlbmRpZiAvLyBHcmFwaGljc1N1cmZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJm
YWNlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmExYTAyMDIwOGIyYjkxNGRhMmEzOTUwMzI4NTAzMDJl
YzhmODM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkgJiYgT1MoREFSV0lOKQorI2luY2x1ZGUgPENGTnVtYmVyLmg+CisjaW5jbHVkZSA8Q0dM
Q29udGV4dC5oPgorI2luY2x1ZGUgPENHTEN1cnJlbnQuaD4KKyNpbmNsdWRlIDxDR0xJT1N1cmZh
Y2UuaD4KKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkKK3sK
KyAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wbGF0Zm9ybVN1cmZhY2UpOworfQorCitzdGF0
aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1cmZhY2VSZWYgaGFuZGxlKQoreworICAgIEdM
dWludCB0ZXh0dXJlID0gMDsKKyAgICBHTHVpbnQgZm9ybWF0ID0gR0xfQkdSQTsKKyAgICBHTHVp
bnQgdHlwZSA9IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVjsKKyAgICBHTHVpbnQgaW50ZXJu
YWxGb3JtYXQgPSBHTF9SR0JBOworICAgIENHTENvbnRleHRPYmogY29udGV4dCA9IENHTEdldEN1
cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEdMaW50IHByZXZUZXh0dXJlOworICAgIEdMYm9vbGVhbiB3YXNFbmFibGVkID0gZ2xJc0Vu
YWJsZWQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgJnByZXZUZXh0dXJlKTsKKyAgICBpZiAoIXdhc0VuYWJsZWQp
CisgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQik7CisgICAgZ2xHZW5U
ZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BUkIsIHRleHR1cmUpOworICAgIENHTEVycm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJT1N1
cmZhY2UyRChjb250ZXh0LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGludGVybmFsRm9ybWF0
LCBJT1N1cmZhY2VHZXRXaWR0aChoYW5kbGUpLCBJT1N1cmZhY2VHZXRIZWlnaHQoaGFuZGxlKSwg
Zm9ybWF0LCB0eXBlLCBoYW5kbGUsIDApOworICAgIGlmIChlcnJvcikgeworICAgICAgICBnbERl
bGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICAgICAgdGV4dHVyZSA9IDA7CisgICAgfQor
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHByZXZUZXh0dXJl
KTsKKyAgICBpZiAoIXdhc0VuYWJsZWQpCisgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BUkIpOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBp
ZCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sK
KyAgICBnbFB1c2hBdHRyaWIoR0xfQUxMX0FUVFJJQl9CSVRTKTsKKyAgICBpZiAoIW1fdGV4dHVy
ZSkKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX3BsYXRmb3JtU3VyZmFjZSk7
CisgICAgaWYgKCFtX2ZibykKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
KyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCk7CisgICAgZ2xF
bmFibGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbEVuYWJsZSh0YXJnZXQpOwor
ICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBpZCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xf
UkVBRF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
UkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCBvZmZzZXQueCgpLCBvZmZzZXQueSgp
LCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCkpOworICAgIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfUkVBRF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xQb3BBdHRyaWIoKTsKK30KKworYm9vbCBH
cmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdz
IGZsYWdzKQoreworICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOworICAgIHVuc2ln
bmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7CisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwor
ICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgdW5zaWduZWQgbG9uZyBieXRl
c1BlclJvdyA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUJ5dGVzUGVyUm93LCB3
aWR0aCAqIGJ5dGVzUGVyRWxlbWVudCk7CisgICAgaWYgKCFieXRlc1BlclJvdykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbG9uZyBhbGxvY1NpemUgPSBJT1N1cmZhY2VB
bGlnblByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1NpemUsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTsK
KyAgICBpZiAoIWFsbG9jU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3Qg
dm9pZCAqa2V5c1s3XTsKKyAgICBjb25zdCB2b2lkICp2YWx1ZXNbN107CisgICAga2V5c1swXSA9
IGtJT1N1cmZhY2VXaWR0aDsKKyAgICB2YWx1ZXNbMF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmd2lkdGgpOworICAgIGtleXNbMV0gPSBrSU9TdXJmYWNlSGVpZ2h0Owor
ICAgIHZhbHVlc1sxXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZoZWln
aHQpOworICAgIGtleXNbMl0gPSBrSU9TdXJmYWNlUGl4ZWxGb3JtYXQ7CisgICAgdmFsdWVzWzJd
ID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJnBpeGVsRm9ybWF0KTsKKyAg
ICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5dGVzUGVyRWxlbWVudDsKKyAgICB2YWx1ZXNbM10gPSBD
Rk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmYnl0ZXNQZXJFbGVtZW50KTsKKyAg
ICBrZXlzWzRdID0ga0lPU3VyZmFjZUJ5dGVzUGVyUm93OworICAgIHZhbHVlc1s0XSA9IENGTnVt
YmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cpOworICAgIGtleXNb
NV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOworICAgIHZhbHVlc1s1XSA9IENGTnVtYmVyQ3JlYXRl
KDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsKKyAgICBrZXlzWzZdID0ga0lPU3Vy
ZmFjZUlzR2xvYmFsOworICAgIHZhbHVlc1s2XSA9IChmbGFncyAmIEdyYXBoaWNzU3VyZmFjZTo6
U3VwcG9ydHNTaGFyaW5nKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlOworCisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3QgPSBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFs
dWVzLCA3LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNzsgaSsrKQor
ICAgICAgICBDRlJlbGVhc2UodmFsdWVzW2ldKTsKKworICAgIG1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworICAgIHJldHVybiAhIW1fcGxhdGZvcm1TdXJmYWNlOwor
fQorCitib29sIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQodWludDMyX3QgdG9rZW4p
Cit7CisgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBJT1N1cmZhY2VMb29rdXAodG9rZW4pOworICAg
IHJldHVybiAhIW1fcGxhdGZvcm1TdXJmYWNlOworfQorCitzdGF0aWMgaW50IGlvU3VyZmFjZUxv
Y2tPcHRpb25zKGludCBsb2NrT3B0aW9ucykKK3sKKyAgICBpbnQgb3B0aW9ucyA9IDA7CisgICAg
aWYgKGxvY2tPcHRpb25zICYgR3JhcGhpY3NTdXJmYWNlOjpSZWFkT25seSkKKyAgICAgICAgb3B0
aW9ucyB8PSBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5OworICAgIGlmICghKGxvY2tPcHRpb25zICYg
R3JhcGhpY3NTdXJmYWNlOjpSZXRhaW5QaXhlbHMpKQorICAgICAgICBvcHRpb25zIHw9IGtJT1N1
cmZhY2VMb2NrQXZvaWRTeW5jOworICAgIHJldHVybiBvcHRpb25zOworfQorCitzdGF0aWMgaW50
IGlvU3VyZmFjZVVubG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25zKQoreworICAgIGludCBvcHRp
b25zID0gMDsKKyAgICBpZiAobG9ja09wdGlvbnMgJiBHcmFwaGljc1N1cmZhY2U6OlJlYWRPbmx5
KQorICAgICAgICBvcHRpb25zIHw9IChrSU9TdXJmYWNlTG9ja0F2b2lkU3luYyB8IGtJT1N1cmZh
Y2VMb2NrUmVhZE9ubHkpOworICAgIHJldHVybiBvcHRpb25zOworfQorCitjaGFyKiBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtTG9jayhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQqIG91dHB1dFN0
cmlkZSwgTG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCit7CisgICAgbV9sb2NrT3B0aW9ucyA9IGxv
Y2tPcHRpb25zOworICAgIElPU3VyZmFjZUxvY2sobV9wbGF0Zm9ybVN1cmZhY2UsIGlvU3VyZmFj
ZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKKworICAgIGludCBzdHJpZGUgPSBJT1N1
cmZhY2VHZXRCeXRlc1BlclJvdyhtX3BsYXRmb3JtU3VyZmFjZSk7CisgICAgaWYgKG91dHB1dFN0
cmlkZSkKKyAgICAgICAgKm91dHB1dFN0cmlkZSA9IHN0cmlkZTsKKworICAgIGNoYXIqIGJhc2Ug
PSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJlc3MobV9wbGF0Zm9ybVN1
cmZhY2UpKTsKKyAgICByZXR1cm4gYmFzZSArIHN0cmlkZSAqIHJlY3QueSgpICsgcmVjdC54KCkg
KiA0OworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQoreworICAg
IElPU3VyZmFjZVVubG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJmYWNlVW5sb2NrT3B0aW9u
cyhtX2xvY2tPcHRpb25zKSAmICh+a0lPU3VyZmFjZUxvY2tBdm9pZFN5bmMpLCAwKTsKK30KKwor
dm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKG1fZmJv
KQorICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgIGlmIChtX3Rl
eHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgQ0ZS
ZWxlYXNlKElPU3VyZmFjZVJlZihtX3BsYXRmb3JtU3VyZmFjZSkpOworfQorCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0
L0dyYXBoaWNzU3VyZmFjZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWFiNmM4M2Qw
MDM4YTdhNmY2ZmJiM2QwMTI3MjkyMGJhYWY3MzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlUXQu
Y3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkgJiYgUExBVEZPUk0oUVQpCisKKyNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNp
bmNsdWRlIDxRUGl4bWFwPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cit2b2lkIEdyYXBoaWNzU3Vy
ZmFjZTo6ZGlkUmVsZWFzZUltYWdlKHZvaWQqIGRhdGEpCit7CisgICAgR3JhcGhpY3NTdXJmYWNl
KiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NTdXJmYWNlKj4oZGF0YSk7CisgICAgc3Vy
ZmFjZS0+cGxhdGZvcm1VbmxvY2soKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBhaW50KGNvbnN0IEludFNpemUmIHNpemUs
IGNoYXIqIGJpdHMsIGludCBzdHJpZGUpCit7CisgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0ID0g
KGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhKSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0
aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfUkdCMzI7CisKKyAgICAvLyBUaGUgaW1hZ2UgYW5kIHBh
aW50ZXIgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSByZXR1cm5lZCBHcmFwaGljc0NvbnRleHQg
aXMgcmVsZWFzZWQuCisgICAgUUltYWdlKiBpbWFnZSA9IG5ldyBRSW1hZ2UocmVpbnRlcnByZXRf
Y2FzdDx1Y2hhcio+KGJpdHMpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHN0cmlkZSwg
Zm9ybWF0LCBkaWRSZWxlYXNlSW1hZ2UsIHRoaXMpOworICAgIFFQYWludGVyKiBwYWludGVyID0g
bmV3IFFQYWludGVyKGltYWdlKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGlj
c0NvbnRleHQgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpKTsKKyAgICBn
cmFwaGljc0NvbnRleHQtPnRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOworICAgIHJl
dHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBH
cmFwaGljc1N1cmZhY2U6OmNyZWF0ZVJlYWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpbnQgc3RyaWRlOworICAgIFFJbWFnZTo6Rm9ybWF0IGZvcm1hdCA9IChmbGFncygp
ICYgU3VwcG9ydHNBbHBoYSkgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6
IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworICAgIGNoYXIqIGRhdGEgPSBwbGF0Zm9ybUxvY2socmVj
dCwgJnN0cmlkZSwgUmV0YWluUGl4ZWxzIHwgUmVhZE9ubHkpOworICAgIFFJbWFnZSBpbWFnZShy
ZWludGVycHJldF9jYXN0PHVjaGFyKj4oZGF0YSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSwgc3RyaWRlLCBmb3JtYXQsIGRpZFJlbGVhc2VJbWFnZSwgdGhpcyk7CisgICAgcmV0dXJuIEJp
dG1hcEltYWdlOjpjcmVhdGUobmV3IFFQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltYWdlKSkp
OworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IGEyODdkYmQ0NGY1N2E0YjQ2ODc4
YjIxMWE0NzBlZDc5M2E0MDk1MjAuLjBmMmNlYTE1MGI3ZjNjYzE4OTAzZTRhNGFkMjUyNmZkOTkz
MDcyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdmlydHVhbCB+Qml0bWFwVGV4dHVyZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Jh
Y2tlZEJ5T3BlbkdMKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJ
bWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCmluZGV4IDdjYTYxY2NjYTVlNzRjZTk2Mzc5YjY2MGFiYTEwNmJiYTY1
MmJlNmQuLmUzM2U1NjY0OGJjNDlhYzI0MmIzZDZhZjQ1MDdhNDRkOGEzZWQxYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC0yMjAsNiArMjIwLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
RGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0cnVlOwog
fQogCitCaXRtYXBUZXh0dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRl
eHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc0JhY2tlZEJ5T3BlbkdM
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJpdG1hcFRl
eHR1cmVHTCo+KHRleHR1cmUpOworfQorCiBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJH
TCgpCiAgICAgOiBtX2RhdGEobmV3IFRleHR1cmVNYXBwZXJHTERhdGEpCiAgICAgLCBtX2NvbnRl
eHQoMCkKQEAgLTM3NSw2ICszODMsMTIgQEAgYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNl
V2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQogICAgIHJldHVybiBjb250
ZW50c1NpemUgPT0gbV90ZXh0dXJlU2l6ZTsKIH0KIAorI2lmIE9TKERBUldJTikKKyNkZWZpbmUg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84
XzhfUkVWCisjZWxzZQorI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQ
RSBHTF9VTlNJR05FRF9CWVRFCisjZW5kaWYKKwogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJl
c2V0KCkKIHsKICAgICBpZiAoIW1faWQpCkBAIC0zOTAsNyArNDA0LDcgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmRpZFJlc2V0KCkKICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7CiAgICAgR0xfQ01EKGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSkpOwogICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgMCkpOwor
ICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9CR1JBLCBERUZB
VUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCkpOwogfQogCiBzdGF0aWMgdm9pZCBz
d2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50
IHN0cmlkZSA9IDApCkBAIC00MzYsNyArNDUwLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVw
ZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QK
ICAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihjb25zdF9j
YXN0PHZvaWQqPihkYXRhKSksIHRhcmdldFJlY3Quc2l6ZSgpLCBieXRlc1BlckxpbmUgLyA0KTsK
IAogICAgIGlmIChieXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpIC8gNCAmJiBzb3Vy
Y2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwg
dGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAgR0xfQ01EKGdsVGV4U3Vi
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCks
IHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFV
TFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NDUsNyArNDU5LDcgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QKICAgICAgICAgY29uc3QgY2hhciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihkYXRhKTsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0YXJnZXRSZWN0LmhlaWdo
dCgpOyArK3kpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdyA9IGJpdHMgKyAoKHNvdXJj
ZU9mZnNldC55KCkgKyB5KSAqIGJ5dGVzUGVyTGluZSArIHNvdXJjZU9mZnNldC54KCkgKiA0KTsK
LSAgICAgICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFy
Z2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpICsgeSwgdGFyZ2V0UmVjdC53aWR0aCgpLCAxLCBn
bEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgcm93KSk7CisgICAgICAgICAgICBHTF9DTUQoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSArIHksIHRhcmdldFJlY3Qud2lkdGgoKSwgMSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVS
RV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCByb3cpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDU0LDcgKzQ2OCw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVD
b250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAg
R0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAv
IDQpKTsKICAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3Vy
Y2VPZmZzZXQueSgpKSk7CiAgICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBf
UElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIChjb25zdCBjaGFyKilkYXRhKSk7CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qu
d2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9Q
SVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwogICAgIEdMX0NNRChnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKSk7CiAgICAgR0xfQ01EKGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCkpOwogICAgIEdMX0NNRChnbFBpeGVsU3RvcmVp
KEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IGI2YzZl
NDJjY2IzODhhZGRjYTJkOTlkZjVlZmQ2OGM4ZGI4NmFjNjcuLmYyZWE4M2I0MDNjZTZlNDUwOWNh
YjFiYzgyNmE0MWMxMDU5YjAzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTg4LDYgKzg4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRl
eG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQs
IGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpOworICAgIHZp
cnR1YWwgYm9vbCBpc0JhY2tlZEJ5T3BlbkdMKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBw
cml2YXRlOgogICAgIEdMdWludCBtX2lkOwpAQCAtMTExLDkgKzExMiw5IEBAIHByaXZhdGU6CiAK
IHR5cGVkZWYgdWludDY0X3QgSW1hZ2VVSUQ7CiBJbWFnZVVJRCB1aWRGb3JJbWFnZShJbWFnZSop
OworQml0bWFwVGV4dHVyZUdMKiB0b0JpdG1hcFRleHR1cmVHTChCaXRtYXBUZXh0dXJlKik7CiAK
LX07Ci0KK30KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9TaGFyZWFibGVTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFi
bGVTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjEwZTE2M2Y2ODhjZWRlNTEzMTQ5NTQ4OWJmZTI1
NTZmNTlhNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJl
YWJsZVN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlYWJs
ZVN1cmZhY2UuaCIKKworI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2hh
cmVhYmxlU3VyZmFjZTo6SGFuZGxlOjpIYW5kbGUoKQorI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgIDogbV9ncmFwaGljc1N1cmZhY2VUb2tlbigwKQorI2VuZGlmCit7Cit9CisKK3ZvaWQg
U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZShtX3NpemUpOworICAgIGVu
Y29kZXItPmVuY29kZShtX2ZsYWdzKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBl
bmNvZGVyLT5lbmNvZGUobV9ncmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgaWYgKG1fZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIGVuY29kZXItPmVu
Y29kZShtX2JpdG1hcEhhbmRsZSk7Cit9CisKK2Jvb2wgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxl
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9zaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX2ZsYWdzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX2dyYXBoaWNzU3VyZmFjZVRva2VuKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSho
YW5kbGUubV9iaXRtYXBIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJm
YWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBm
bGFncywgSGludHMgaGludHMpCit7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYg
KGhpbnRzICYgU3VwcG9ydHNHcmFwaGljc1N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJl
YWJsZVN1cmZhY2U+IHN1cmZhY2UgPSBjcmVhdGVXaXRoU3VyZmFjZShzaXplLCBmbGFncyk7Cisg
ICAgICAgIGlmIChzdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgp
OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc2l6ZSwgZmxhZ3MpKTsKK30KKworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVT
dXJmYWNlOjpjcmVhdGVXaXRoU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFj
ZUZsYWdzID0KKyAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTb2Z0d2FyZVdy
aXRlCisgICAgICAgICAgICB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNDb3B5VG9UZXh0dXJl
CisgICAgICAgICAgICB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworCisgICAg
aWYgKGZsYWdzICYgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKQorICAgICAgICBzdXJm
YWNlRmxhZ3MgfD0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0FscGhhOworCisgICAgLy8gVGhp
cyBtaWdodCByZXR1cm4gbnVsbCwgaWYgdGhlIHN5c3RlbSBpcyB1bmFibGUgdG8gcHJvdmlkZSBh
IG5ldyBncmFwaGljcyBzdXJmYWNlLgorICAgIC8vIEluIHRoYXQgY2FzZSwgdGhpcyBmdW5jdGlv
biB3b3VsZCByZXR1cm4gbnVsbCBhbmQgYWxsb3cgZmFsbGluZyBiYWNrIHRvIFNoYXJlYWJsZUJp
dG1hcC4KKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gR3JhcGhpY3NTdXJm
YWNlOjpjcmVhdGUoc2l6ZSwgc3VyZmFjZUZsYWdzKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKHN1cmZhY2UpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcmVhYmxlU3VyZmFjZShzaXplLCBmbGFncywgc3VyZmFjZS5yZWxlYXNlKCkpKTsK
K30KKyNlbmRpZgorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gU2hhcmVh
YmxlU3VyZmFjZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7
ICAgIAorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChpc0JhY2tlZEJ5R3JhcGhp
Y3NTdXJmYWNlKCkpCisgICAgICAgIHJldHVybiBtX2dyYXBoaWNzU3VyZmFjZS0+YmVnaW5QYWlu
dChyZWN0LCAwIC8qIFdyaXRlIHdpdGhvdXQgcmV0YWluaW5nIHBpeGVscyovKTsKKyNlbmRpZgor
CisgICAgQVNTRVJUKG1fYml0bWFwKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFw
aGljc0NvbnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRl
KHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gU2hhcmVhYmxlU3VyZmFjZTo6
Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Ms
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXApCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNlKHNpemUsIGZsYWdzLCBiaXRtYXApKTsKK30KKworU2hh
cmVhYmxlU3VyZmFjZTo6U2hhcmVhYmxlU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTaGFy
ZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9i
aXRtYXAoYml0bWFwKQoreworfQorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCitTaGFyZWFi
bGVTdXJmYWNlOjpTaGFyZWFibGVTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUs
IFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlPiBzdXJmYWNlKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX2ZsYWdzKGZs
YWdzKQorICAgICwgbV9ncmFwaGljc1N1cmZhY2Uoc3VyZmFjZSkKK3sKK30KKworUGFzc1JlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IHN1cmZhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVT
dXJmYWNlKHNpemUsIGZsYWdzLCBzdXJmYWNlKSk7Cit9CisjZW5kaWYKKworU2hhcmVhYmxlU3Vy
ZmFjZTo6flNoYXJlYWJsZVN1cmZhY2UoKQoreworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKK3sK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gc3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZS5tX3NpemUsIGhhbmRs
ZS5tX2ZsYWdzLCBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgICAgIGlmIChz
dXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVTdXJmYWNl
KGhhbmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4oc3VyZmFjZSkpKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlLm1fYml0bWFwSGFuZGxlKTsKKyAg
ICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3JlYXRlKGhh
bmRsZS5tX3NpemUsIGhhbmRsZS5tX2ZsYWdzLCBiaXRtYXAucmVsZWFzZSgpKTsKK30KKworYm9v
bCBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUpCit7CisgICAg
aGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICBoYW5kbGUubV9mbGFncyA9IG1fZmxhZ3M7CisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VU
b2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNlID8gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2Vu
KCkgOiAwOworICAgIGlmIChoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBpZiAoIW1fYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlLm1fYml0bWFwSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIFNoYXJlYWJsZVN1cmZh
Y2U6OmNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiBwYXNz
VGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zm
c2V0KQoreworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKHBhc3NUZXh0dXJlKTsK
KworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChpc0JhY2tlZEJ5R3JhcGhpY3NT
dXJmYWNlKCkpIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmVHTD4gdGV4dHVyZUdMID0g
dG9CaXRtYXBUZXh0dXJlR0wodGV4dHVyZS5nZXQoKSk7CisgICAgICAgIGlmICh0ZXh0dXJlR0wp
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IHRleHR1cmVJRCA9IHRleHR1cmVHTC0+aWQoKTsKKyAg
ICAgICAgICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlR0wtPnRleHR1cmVUYXJn
ZXQoKTsKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5VG9HTFRleHR1cmUodGV4
dHVyZVRhcmdldCwgdGV4dHVyZUlELCB0YXJnZXQsIHNvdXJjZU9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9n
cmFwaGljc1N1cmZhY2UtPmNyZWF0ZVJlYWRPbmx5SW1hZ2UoSW50UmVjdChzb3VyY2VPZmZzZXQs
IHRhcmdldC5zaXplKCkpKTsKKyAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2Uu
Z2V0KCksIHRhcmdldCwgSW50UG9pbnQ6Onplcm8oKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBB
U1NFUlQobV9iaXRtYXApOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2JpdG1hcC0+Y3Jl
YXRlSW1hZ2UoKTsKKyAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFy
Z2V0LCBzb3VyY2VPZmZzZXQpOworICAgIHJldHVybjsKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVS
RV9NQVBQRVIpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
aGFyZWFibGVTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQyZTA5OGEzNmQwMWZiMmNhOGUxYTFjZGJj
OWJmMDQzNjc3M2NmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
aGFyZWFibGVTdXJmYWNlLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNoYXJlYWJsZVN1cmZhY2VfaAorI2RlZmluZSBT
aGFyZWFibGVTdXJmYWNlX2gKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIElt
YWdlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgU2hhcmVhYmxlU3VyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlYWJsZVN1cmZh
Y2U+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEhpbnQgeworICAgICAgICBTdXBwb3J0c0dyYXBoaWNz
U3VyZmFjZSA9IDB4MDEKKyAgICB9OworCisgICAgdHlwZWRlZiB1bnNpZ25lZCBIaW50czsKKwor
ICAgIGNsYXNzIEhhbmRsZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhhbmRsZSk7
CisgICAgcHVibGljOgorICAgICAgICBIYW5kbGUoKTsKKworICAgICAgICBib29sIGlzTnVsbCgp
IGNvbnN0OworCisgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciop
IGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgSGFuZGxlJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2hh
cmVhYmxlU3VyZmFjZTsKKyAgICAgICAgbXV0YWJsZSBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBt
X2JpdG1hcEhhbmRsZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgdWludDMy
X3QgbV9ncmFwaGljc1N1cmZhY2VUb2tlbjsKKyNlbmRpZgorICAgICAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2l6ZTsKKyAgICAgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAg
IH07CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgU2hhcmVhYmxlU3VyZmFjZSwgYW5kIGFsbG9jYXRl
IGVpdGhlciBhIEdyYXBoaWNzU3VyZmFjZSBvciBhIFNoYXJlYWJsZUJpdG1hcCBhcyBiYWNraW5n
LgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGNyZWF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgSGludHMpOworCisgICAg
Ly8gQ3JlYXRlIGEgc2hhcmVhYmxlIHN1cmZhY2UgZnJvbSBhIGhhbmRsZS4KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CisKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsg
fQorCisgICAgLy8gQ3JlYXRlIGEgaGFuZGxlLgorICAgIGJvb2wgY3JlYXRlSGFuZGxlKEhhbmRs
ZSYpOworCisgICAgflNoYXJlYWJsZVN1cmZhY2UoKTsKKworICAgIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoV2ViQ29yZTo6SW50
UG9pbnQoKSwgc2l6ZSgpKTsgfQorCisgICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0
aGF0IGNhbiBiZSB1c2VkIHRvIHBhaW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
dm9pZCBjb3B5VG9UZXh0dXJlKFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4sIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNv
dXJjZU9mZnNldCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaGFyZWFibGVTdXJmYWNlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4pOworCisgICAgLy8gQ3JlYXRlIGEgU2hhcmVhYmxlU3VyZmFjZSBy
ZWZlcmVuY2luZyBhbiBleGlzdGluZyBTaGFyZWFibGVCaXRtYXAuCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworCisj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgU2hhcmVhYmxlU3VyZmFjZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2U+KTsKKyAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIGJh
Y2tlZCBieSBhIGdyYXBoaWNzIHN1cmZhY2UuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVh
YmxlU3VyZmFjZT4gY3JlYXRlV2l0aFN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworICAgIC8vIENyZWF0ZSBhIFNoYXJlYWJsZVN1cmZhY2Ug
cmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgR3JhcGhpY3NTdXJmYWNlLgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
U2hhcmVhYmxlQml0bWFwOjpGbGFncywgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U+KTsKKworICAgIGJvb2wgaXNCYWNrZWRCeUdyYXBoaWNzU3VyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuICEhbV9ncmFwaGljc1N1cmZhY2U7IH0KKyNlbmRpZgorCisgICAgV2ViQ29yZTo6SW50U2l6
ZSBtX3NpemU7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU2hhcmVh
YmxlU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZvLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNTMzMzc5M2MwOTg2NjY1MDE5YjdhN2RhZmVkMjE0ZDQwZjhlMDY2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1N1cmZhY2VVcGRhdGVJbmZv
LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgU3VyZmFjZVVwZGF0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVJlY3Qp
OworICAgIGVuY29kZXItPmVuY29kZShzY2FsZUZhY3Rvcik7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KHN1cmZhY2VIYW5kbGUpOworICAgIGVuY29kZXItPmVuY29kZShzdXJmYWNlT2Zmc2V0KTsKK30K
KworYm9vbCBTdXJmYWNlVXBkYXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShyZXN1bHQudXBkYXRlUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuc2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnN1cmZhY2VIYW5kbGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0
LnN1cmZhY2VPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TdXJm
YWNlVXBkYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxZDYwZDI0MjVkMDRhZTBhMTBkNTMzNDM4OGMw
ODg5ZjNlY2IyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU3Vy
ZmFjZVVwZGF0ZUluZm8uaApAQCAtMCwwICsxLDU4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdXJmYWNlVXBkYXRlSW5mb19oCisjZGVmaW5lIFN1
cmZhY2VVcGRhdGVJbmZvX2gKKworI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1l
bnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3VyZmFjZVVwZGF0
ZUluZm8geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKKwor
cHVibGljOgorICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CisKKyAgICB2b2lkIGVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKworICAgIC8v
IFRoZSByZWN0IHRvIGJlIHVwZGF0ZWQuCisgICAgV2ViQ29yZTo6SW50UmVjdCB1cGRhdGVSZWN0
OworCisgICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBk
YXRlLgorICAgIGZsb2F0IHNjYWxlRmFjdG9yOworCisgICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUg
c2hhcmVhYmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYg
dGhlcmUgYXJlIG5vIHVwZGF0ZXMuCisgICAgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIHN1cmZh
Y2VIYW5kbGU7CisKKyAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJl
bmRlcmVkIGNvbnRlbnRzIGFyZS4KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBzdXJmYWNlT2Zmc2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVcGRhdGVJbmZvX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCmluZGV4IDUwYmMxNTA5ZmM4NmNkZmE1ZjhmNmE3OTNjZjI4YmZhOGI4ZDhhOGEu
LmQ4NjA5ZDAzYWQ0NGRlYmI2YjIxOTYzMDkyMTY4NTI0YTMyZjZmOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpA
QCAtNjcsNiArNjcsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvQVBJL2MvcXQvV0tJbWFn
ZVF0LmggXAogICAgIFNoYXJlZC9BUElDbGllbnRUcmFpdHMuaCBcCiAgICAgU2hhcmVkL1NoYXJl
YWJsZUJpdG1hcC5oIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oIFwKICAgICBTaGFy
ZWQvQ2FjaGVNb2RlbC5oIFwKICAgICBTaGFyZWQvQ2hpbGRQcm9jZXNzLmggXAogICAgIFNoYXJl
ZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmggXApAQCAtOTAsNiArOTEsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBTaGFyZWQvU2Vzc2lvblN0YXRlLmggXAogICAgIFNoYXJlZC9TdGF0aXN0aWNzRGF0YS5o
IFwKICAgICBTaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oIFwKKyAgICBTaGFyZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uaCBcCiAgICAgU2hhcmVkL1VwZGF0ZUluZm8uaCBcCiAgICAgU2hhcmVkL1VzZXJN
ZXNzYWdlQ29kZXJzLmggXAogICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmggXApAQCAtNDI2
LDYgKzQyOCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luTW9kdWxlTm9uZS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgXAogICAgIFNoYXJlZC9TaGFyZWFibGVC
aXRtYXAuY3BwIFwKKyAgICBTaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5jcHAgXAogICAgIFNoYXJl
ZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBJ
ZGVudGlmaWVyRGF0YS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyLmNwcCBcCkBAIC00NDcsNiArNDUwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVk
L1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAgXAogICAgIFNoYXJlZC9TZXNzaW9uU3RhdGUuY3BwIFwK
ICAgICBTaGFyZWQvU3RhdGlzdGljc0RhdGEuY3BwIFwKKyAgICBTaGFyZWQvU3VyZmFjZVVwZGF0
ZUluZm8uY3BwIFwKICAgICBTaGFyZWQvVXBkYXRlSW5mby5jcHAgXAogICAgIFNoYXJlZC9WaXNp
dGVkTGlua1RhYmxlLmNwcCBcCiAgICAgU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAK
aW5kZXggZjc5MDYyNzUwZjU5MDI1OGZhMmVkOTMxZjY0ZTAxNGY4NjU4ZTVjOS4uMzFiNjBlNWJm
NjM0Y2I4ODMyZjI0ZDRkY2JjOWYzMTAzOTI1ZGM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTY2LDE5ICs2NiwxNiBAQCB2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCiAgICAgbV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0K
IAotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwg
dGlsZUlELCB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZv
ckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCks
IGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIHVwZGF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwogfQog
Ci12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIEFTU0VSVCh1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RzLnNpemUoKSA9PSAxKTsKLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RzLmZpcnN0KCk7Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51
cGRhdGVSZWN0Qm91bmRzOwotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5k
ZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVw
ZGF0ZShzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXAsIHVwZGF0ZUluZm8uYml0bWFwT2Zm
c2V0KSkpOworICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlID0gU2hhcmVhYmxl
U3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIu
Z2V0KCksIGxheWVySUQsIHRpbGVJRCwgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUo
dXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1
cmZhY2VPZmZzZXQpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggYTkwY2U0MDI5MjNkYmNmMzVkN2ZjMWQ1
MzY4Mjk3OGI0NGEwMGYxMS4uNmMxNjNjODQyZDI3OWIyZGZiNTFhZWZhYzgxNmRmM2QwYjM2MzVj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJTdXJmYWNl
VXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgpAQCAtNTcsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2Vz
KCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeSk7
CiAgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOwotICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKLSAg
ICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJik7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mKTsKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCk7CiAgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25z
dCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CiAgICAgdm9pZCBkZXN0cm95RGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCAzMDEwM2Uz
NWNkOGZkY2NlOGExZmNkZjBlNjUxOGI0ODY0NmZhYTJiLi4yOGJiYWQxMWI4YThlOGUwZjlmNzkx
NTIxMTMxNjdiN2EwYTRlMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTIzLDggKzIzLDggQEAgbWVz
c2FnZXMgLT4gTGF5ZXJUcmVlSG9zdFByb3h5IHsKICAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hp
bGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCiAgICAgU2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCiAgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXll
cih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGls
ZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5m
byB1cGRhdGVJbmZvKQorICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBp
bnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQz
Ml90IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKQog
ICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IGQ2
ZTcyZTZmNjc5Njg0ZjU2N2MzOTRmNDBkZWEyODc4MjRlZGMwMDguLmFiYmQzYWEyYWY4ZDNmZDdj
MzgzZThmZTdhYzYxYjczYTRjNTQyNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGls
ZUlEKQogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKIHsKICAgICBSZWZQ
dHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXll
cklEKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNl
UmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5iaXRtYXAsIHVwZGF0ZS5vZmZzZXQpOwor
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1
cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOwogICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRl
eCAxODFiZTBjMDY4NGM2NGJiZjBkZGQ2NjUzMjNkZmI3ZmI1Yzg4ODZjLi4zNTdiMDg3ZjM2YTZk
NmQyMWQ5YzA0YTI1ZTNiNDk0NDI5NTk5YjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBX
ZWJMYXllclRyZWVSZW5kZXJlcl9oCiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLQog
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKQEAgLTQ4LDEyICs0OCwx
MiBAQCBwdWJsaWM6CiAgICAgc3RydWN0IFRpbGVVcGRhdGUgewogICAgICAgICBXZWJDb3JlOjpJ
bnRSZWN0IHNvdXJjZVJlY3Q7CiAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdDsK
LSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwOworICAgICAgICBSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4gc3VyZmFjZTsKICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zm
c2V0OwotICAgICAgICBUaWxlVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gbmV3Qml0bWFwLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbmV3T2Zmc2V0KQorICAgICAg
ICBUaWxlVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGFyZ2V0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG5ld1N1cmZh
Y2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCiAgICAgICAgICAgICA6IHNv
dXJjZVJlY3Qoc291cmNlKQogICAgICAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdldCkKLSAgICAg
ICAgICAgICwgYml0bWFwKG5ld0JpdG1hcCkKKyAgICAgICAgICAgICwgc3VyZmFjZShuZXdTdXJm
YWNlKQogICAgICAgICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQogICAgICAgICB7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IGZlZTBjOTA2MjIwZjQxOGRhNTNkMWIxYzRiMzNlZjNhODFmNTAwMDguLjc5OWM5
NTM1NThhNDNhZGE1MzE3MmMwODc2NDYxMTUxNjE0OGYwMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmNwcApAQCAtMzEsNyArMzEsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBC
dWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7Ci0gICAgaWYg
KCFtX2JhY2tCdWZmZXIpCisgICAgaWYgKCFtX3N1cmZhY2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KG1fdGFyZ2V0UmVjdCk7CkBAIC00OCwxOSArNDgsMTkg
QEAgdm9pZCBMYXllckJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKICAg
ICB9CiAKLSAgICBRSW1hZ2UgcUltYWdlID0gbV9iYWNrQnVmZmVyLT5jcmVhdGVRSW1hZ2UoKTsK
ICAgICBpZiAoc2hvdWxkUmVzZXQpCi0gICAgICAgIHRleHR1cmUtPnJlc2V0KG1fc291cmNlUmVj
dC5zaXplKCksIHFJbWFnZS5oYXNBbHBoYUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBv
cnRzQWxwaGEgOiAwKTsKLSAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhxSW1hZ2UuY29uc3RC
aXRzKCksIG1fc291cmNlUmVjdCwgbV9iaXRtYXBPZmZzZXQsIHFJbWFnZS5ieXRlc1BlckxpbmUo
KSk7Ci0gICAgbV9iYWNrQnVmZmVyLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmUtPnJlc2V0KG1f
dGFyZ2V0UmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKworICAg
IG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFj
ZU9mZnNldCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7CiB9CiAKLXZvaWQgTGF5ZXJCYWNraW5n
U3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBidWZmZXIs
IGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0
QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKIHsKICAgICBtX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwogICAgIG1fdGFy
Z2V0UmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgbV9iaXRtYXBPZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
bV9iYWNrQnVmZmVyID0gYnVmZmVyOworICAgIG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKKyAg
ICBtX3N1cmZhY2UgPSBidWZmZXI7CiB9CiAKIHZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0
ZVRpbGUoaW50IGlkLCBmbG9hdCBzY2FsZSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBMYXllckJh
Y2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShpbnQgaWQpCiB9CiAKIAotdm9pZCBMYXllckJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiYWNrQnVm
ZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQordm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBk
YXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYmFja0J1ZmZlciwgY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3Rv
cmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAh
PSBtX3RpbGVzLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllckJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
QmFja2luZ1N0b3JlLmgKaW5kZXggYTI0MWU0YzE3ZDBlYzBhMjU1ODhiZjhkZmFiMDdkMDJhYzNk
NzIxMy4uMjg1MmJjYWJkNTA5Mjc0NmYzZTQ5ZDRkZjBkYzQ1YmY1ZDhmNGM2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyQmFja2luZ1N0b3JlLmgKQEAgLTIyLDcg
KzIyLDcgQEAKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgogI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM5LDEzICszOSwxMyBAQCBwdWJsaWM6CiAK
ICAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAg
dm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBzZXRC
YWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKKyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGJ1
ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tCdWZmZXI7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+IG1fc3VyZmFjZTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2Jp
dG1hcE9mZnNldDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N1cmZhY2VPZmZzZXQ7CiAgICAg
ZmxvYXQgbV9zY2FsZTsKIH07CiAKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgTGF5ZXJCYWNraW5n
U3RvcmUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CiBwdWJs
aWM6CiAgICAgdm9pZCBjcmVhdGVUaWxlKGludCwgZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlVGls
ZShpbnQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+LCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxT
aGFyZWFibGVTdXJmYWNlPiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExheWVyQmFja2luZ1N0b3JlKTsgfQogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKaW5kZXgg
M2FmNjI1N2Q1MDk5YWVjODQ3YWM5NWFlOWNjOWVkNTE5N2JhNTdkMC4uYmFlOWEwZmIxYjk1OTRi
NTdmZGQ4Y2EyNDNjMmFmYzdmYmNmYTM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBA
IC01NTMsMTkgKzU1MywxOSBAQCBDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdT
dG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkg
PyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiB9CiAKLVBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
IGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK1Bhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5k
bGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgcmV0dXJuIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkg
PyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7CiB9
CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0KQogewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+Y3Jl
YXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3Qp
OwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvKTsKKyAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRS
ZWN0KTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IDI3ZmVjNTVlZDhmZTFhNWQ5OTRiZjIzOTYxMjZk
ZjJiZmE5NzMzYmEuLjUzMjljZGMyNzk2ZGM0MTI2NDYzN2Q3MWNiNjJkMjY1OTI2MjA2YTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC00Nyw4ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgV2ViR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUo
V2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJ
bmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCkgPSAw
OwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdCA9IDA7CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQ
b2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJs
ZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBv
aW50JikgPSAwOwogfTsKIH0KIApAQCAtMTI2LDEwICsxMjYsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAog
ICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRl
SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdl
YktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYp
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCiAgICAgdm9pZCBzZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCopOwogICAg
IHZvaWQgc3luY0NoaWxkcmVuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCmlu
ZGV4IGFlYjZlYmNiYmI1OGM0YTc0MDUzZWM4NTc4MGFjM2YwMjJmZGViZjguLjIxMjU2MDBiMTQ3
MTI4NTFlOTM0OWJjZGQ1ODU4YjY3Y2JlMDZjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGUuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZv
LmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKLSNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC03MiwyNyArNzIsMjUg
QEAgVmVjdG9yPEludFJlY3Q+IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRlQmFj
a0J1ZmZlcigpCiAgICAgaWYgKCFpc0RpcnR5KCkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8SW50
UmVjdD4oKTsKIAotICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRl
KG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5iaXRtYXBIYW5kbGUsIHVwZGF0ZUluZm8u
Yml0bWFwT2Zmc2V0KTsKKyAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNv
bnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUs
IHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CiAgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCiAg
ICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKICAgICBncmFwaGljc0NvbnRleHQtPnRy
YW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKICAgICBncmFwaGlj
c0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1Nj
YWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwogICAgIG1fdGls
ZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNz
Q29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5
UmVjdCkpOwogCi0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gbV9yZWN0OwotICAg
IEludFJlY3QgdXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0OwotICAgIHVwZGF0ZVJlY3QubW92ZSgt
bV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuYXBw
ZW5kKHVwZGF0ZVJlY3QpOwotICAgIHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3IgPSBtX3Rp
bGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCk7CisgICAgdXBkYXRlSW5mby51cGRhdGVS
ZWN0ID0gbV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVj
dC54KCksIC1tX3JlY3QueSgpKTsKKyAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxl
ZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOwogICAgIGdyYXBoaWNzQ29udGV4dC5yZWxl
YXNlKCk7CiAKICAgICBzdGF0aWMgaW50IGlkID0gMDsKICAgICBpZiAoIW1fSUQpIHsKICAgICAg
ICAgbV9JRCA9ICsraWQ7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0
ZUluZm8pOworICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBt
X3JlY3QpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lELCB1
cGRhdGVJbmZvKTsKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5m
bywgbV9yZWN0KTsKIAogICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgIHJldHVybiBW
ZWN0b3I8SW50UmVjdD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAppbmRleCBkZmMy
NTJlNjkwMjYwNmI3NzdiYjA1OTY2YWJkNWM0ODFhYjQ4YWZhLi5jYWUxMWU5YmI3N2FkMTQ0NDc5
YTRhYTJhYjgyZjRjOGFhOTIwOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAotI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKICNp
bmNsdWRlICJUaWxlLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJDb3JlL0ludFJlY3QuaCIKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgVGlsZWRCYWNraW5n
U3RvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQ2xpZW50OwotY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZv
OwogCiBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6
VGlsZSB7CiBwdWJsaWM6CkBAIC03NiwxMCArNzYsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJ
RCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6Oklu
dFBvaW50JikgPSAwOwogfTsKIAogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXgg
OWU0NjQxMzVmOWEwOWQ0NmQ0ZWQ2YTUzMThkNmMxMTBkN2RjODNmNi4uOTM4M2JjNTJkZWU0YzM5
OGFlMWNjZDJkODI2MGY5NmUwNjVmYjY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2ZsYWdzKGZsYWdzKQogewotICAgIG1f
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShkaW1lbnNp
b24sIGRpbWVuc2lvbiksIGZsYWdzKTsKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNl
OjpjcmVhdGUoSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbiksIGZsYWdzLCBTaGFyZWFibGVT
dXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSk7CiB9CiAKIHN0YXRpYyBpbnQgbmV4dFBv
d2VyT2ZUd28oaW50IG51bWJlcikKQEAgLTExMiwxMiArMTEyLDE0IEBAIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVy
KGNvbnN0IFdlCiAgICAgbV9idWZmZXJTdGF0ZXNbaW5kZXhdID0gVGFrZW47CiAgICAgb2Zmc2V0
ID0gb2Zmc2V0Rm9ySW5kZXgoaW5kZXgpOwogICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVy
bygpLCBzaXplKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQg
PSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LT50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LT5jbGlwKHJlY3QpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZUNvcHkpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgKGZs
YWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpID8gQ29sb3I6OnRyYW5zcGFy
ZW50IDogQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBncmFwaGljc0Nv
bnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dChJbnRSZWN0KG9mZnNldCwgc2l6ZSkpOworCisgICAgaWYgKGZsYWdz
KCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpIHsKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocmVjdCwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgfQorCiAgICAgcmV0dXJuIGdyYXBoaWNz
Q29udGV4dC5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5kZXggY2VmM2U5YzFkMDJjZjk5NzhiYmIwZmI4NzRkMGE5
MWU2MDRmMDlmNS4uOWQxMDk2MmEzN2EwYjlhNDUwNzk2OWMzODRkYWQzOGM5MjMzNjMwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKQEAg
LTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgVXBkYXRlQXRsYXNfaAogI2RlZmluZSBVcGRhdGVBdGxh
c19oCiAKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVT
dXJmYWNlLmgiCiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM0LDggKzM0LDggQEAgY2xhc3MgVXBkYXRlQXRsYXMgewogcHVibGljOgogICAg
IFVwZGF0ZUF0bGFzKGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwogCi0g
ICAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFw
OyB9Ci0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0bWFwLT5zaXplKCk7IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZh
Y2UoKSB7IHJldHVybiBtX3N1cmZhY2U7IH0KKyAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KIAogICAgIC8vIFJldHVy
bnMgYSBudWxsIHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KICAgICBQ
YXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxh
YmxlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KTsKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U3RhdGU+IG1fYnVm
ZmVyU3RhdGVzOwogICAgIFZlY3RvcjxpbnQ+IG1fbGF5b3V0OwogICAgIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MgbV9mbGFnczsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsK
KyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmNwcAppbmRleCAxM2VhOTZhYWZjOWI1YzJiZTVlNGVjNTY4Njk5NzllMWY5ZmI4NThlLi4x
NGU3Yzg2ZGEyNzgzYzAyMzU3Mzg4ZTExY2I3MmE1Yzg1MTA4YmQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgi
CisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgpAQCAtMzk5LDE2ICs0MDAsMTYgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3Jl
YXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQog
ewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdXBkYXRlSW5mbykpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRS
ZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbykKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5
OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVG
b3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAog
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlEKQpAQCAtNDgyLDEwICs0ODMsMTAgQEAgVXBkYXRlQXRsYXMmIExheWVyVHJlZUhvc3RR
dDo6Z2V0QXRsYXMoU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKICAgICByZXR1cm4gbV91
cGRhdGVBdGxhc2VzLmxhc3QoKTsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IExheWVyVHJlZUhvc3RRdDo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9zdFF0OjpiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncyBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6Oklu
dFBvaW50JiBvZmZzZXQpCiB7CiAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gZ2V0QXRsYXMoZmxh
Z3MpOwotICAgIGlmICghYXRsYXMuYml0bWFwKCktPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAg
IGlmICghYXRsYXMuc3VyZmFjZSgpLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0
dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigpOwogCiAgICAgLy8gVGhp
cyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmgKaW5kZXggNzkxMjg0MjQ5ZjcxNmI5ZGIwZTljZTQxYzU1NGQzYzFlMTk4MmY0NC4uYzI5
M2IxODM2ZWUxODYyMjYyY2JkODI4NjdlN2RhM2JmNTA1ZTg2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAt
NjQsOCArNjQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNr
aW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKGludDY0X3QpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBy
ZW5kZXJOZXh0RnJhbWUoKTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVh
bCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZp
cnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVw
ZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxl
U3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmQzNDMwMzI5ZWE0NWM1YzBjNGMwZjQw
MDQxMmNhZjQ3ZjBmMzZhMC4uMzA2NmRmN2Q4ZWQ0MjUwZTY0MjQ2N2I3OGVmZGQ4YTBhMGIzM2Q2
YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEyLTA0LTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhh
bEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJz
IGluIHRoZSB3ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg2NzUKKworICAgICAgICBFbmFibGUgZ3JhcGhpY3Mgc3VyZmFjZXMgb24g
TWFjIGZvciBRdC4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbi4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgor
CiAyMDEyLTA0LTA5ICBUYWthc2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVcGRhdGUgcHl3ZWJzb2NrZXQgdG8gMC43LjQuCmRpZmYgLS1naXQgYS9Ub29s
cy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGY3ZjYyNTllODg3ZTlmY2FmMTBjZmY5ZDMy
MTRjZjhhZjk2OWQzMTUuLmZlYTkxZDI4ZTlhMDZmZTE2Yzc4OTE5ZWVkNGM0ZjhlOWI0NjcwOWEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisr
KyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0xOCw2ICsx
OCwxMSBAQCBtZWVnb3RvdWNoIHsKICAgICBERUZJTkVTICs9IFdURl9VU0VfTUVFR09UT1VDSD0x
CiB9CiAKK21hYzogQ09ORklHICs9IGdyYXBoaWNzX3N1cmZhY2VzCitjb250YWlucyhDT05GSUcs
IGdyYXBoaWNzX3N1cmZhY2VzKSB7CisgICAgREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NV
UkZBQ0U9MQorfQorCiAjIyBsb2FkIG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlzIGF2YWls
YWJsZQogbG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136660</attachid>
            <date>2012-04-11 05:17:51 -0700</date>
            <delta_ts>2012-04-11 06:23:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78675-20120411051750.patch</filename>
            <type>text/plain</type>
            <size>1258</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNzM0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmM2OTNjNjE5YTliNTRmOWFkNGE0MjkzM2Y1ZWQwOThj
ZjM3ZGUyOS4uY2IzNDg4Y2E0ZjA4ODk1YjNkMjNlNGQ1Yjk2NTU1MzIwN2ViYWY0ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTA0LTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIE1hbmFnZSBncmFwaGljcyBidWZmZXJzIGluIHRoZSB3
ZWIgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzUKKyAKKyAgICAgICAgTWFrZSBncmFwaGljcyBzdXJmYWNlIGF2YWlsYWJsZSBvbmx5
IGZvciBRdCA1LCBhdHRlbXB0aW5nIHRvIGZpeAorICAgICAgICB0aGUgUXQtbWFjIGJ1aWxkLgor
CisgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgorCisgICAgICAgICogcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisKIDIwMTItMDQtMDkgIE5vJ2FtIFJvc2VudGhhbCAg
PG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gTWFuYWdlIGdy
YXBoaWNzIGJ1ZmZlcnMgaW4gdGhlIHdlYiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IDZlMTVmM2RlNTU2YjdjMWQzOWQ1ZTZlNWE0MTQ0MTAy
NzUxMmU4NDEuLmQyYjI4NTI3ZmNlZmY0ODJiNDU4ZDI4NGUzNjgzNzM4ZDU2YmRiZjAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0xOCw3ICsxOCwxMCBA
QCBtZWVnb3RvdWNoIHsKICAgICBERUZJTkVTICs9IFdURl9VU0VfTUVFR09UT1VDSD0xCiB9CiAK
LW1hYzogQ09ORklHICs9IGdyYXBoaWNzX3N1cmZhY2VzCitoYXZlUXQoNSkgeworICAgIG1hYzog
Q09ORklHICs9IGdyYXBoaWNzX3N1cmZhY2VzCit9CisKIGNvbnRhaW5zKENPTkZJRywgZ3JhcGhp
Y3Nfc3VyZmFjZXMpIHsKICAgICBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0x
CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>