<?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>122672</bug_id>
          
          <creation_ts>2013-10-11 12:31:15 -0700</creation_ts>
          <short_desc>Virtualize PlatformCALayer</short_desc>
          <delta_ts>2013-10-14 13:48:39 -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>Platform</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>938933</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-11 12:31:15 -0700</bug_when>
    <thetext>We&apos;re about to introduce a PlatformCALayer subclass for remote layer tree hosting which needs to co-exist (for now) with normal Mac PlatformCALayer. In order to do this, let&apos;s make PlatformCALayer virtual, and add PlatformCALayerWin and PlatformCALayerMac subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939361</commentid>
    <comment_count>1</comment_count>
      <attachid>214127</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-13 22:33:54 -0700</bug_when>
    <thetext>Created attachment 214127
take one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939362</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-13 22:35:33 -0700</bug_when>
    <thetext>Attachment 214127 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContext3DWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/FullscreenVideoController.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h:38:  The parameter name &quot;platformLayer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h:58:  The parameter name &quot;animation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h:143:  The parameter name &quot;layerType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h:143:  The parameter name &quot;layer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/PlatformCALayer.h:115:  The parameter name &quot;animation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/PlatformCALayer.h:191:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/graphics/ca/PlatformCALayer.h:192:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/graphics/ca/PlatformCALayer.h:193:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h:65:  The parameter name &quot;animation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h:144:  The parameter name &quot;layerType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h:144:  The parameter name &quot;layer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:59:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 12 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939363</commentid>
    <comment_count>3</comment_count>
      <attachid>214128</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-13 22:49:28 -0700</bug_when>
    <thetext>Created attachment 214128
take two</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939568</commentid>
    <comment_count>4</comment_count>
      <attachid>214172</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-14 11:40:48 -0700</bug_when>
    <thetext>Created attachment 214172
take three; fix filtersCanBeComposited</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939587</commentid>
    <comment_count>5</comment_count>
      <attachid>214172</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-14 12:08:53 -0700</bug_when>
    <thetext>Comment on attachment 214172
take three; fix filtersCanBeComposited

Attachment 214172 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/3950895</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939589</commentid>
    <comment_count>6</comment_count>
      <attachid>214178</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-14 12:15:15 -0700</bug_when>
    <thetext>Created attachment 214178
which broke the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939612</commentid>
    <comment_count>7</comment_count>
      <attachid>214178</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-14 13:16:24 -0700</bug_when>
    <thetext>Comment on attachment 214178
which broke the build

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

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h:153
&gt; +}

// namespace WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939624</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-14 13:48:39 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157419</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214127</attachid>
            <date>2013-10-13 22:33:54 -0700</date>
            <delta_ts>2013-10-13 22:49:28 -0700</delta_ts>
            <desc>take one</desc>
            <filename>virtualize.diff</filename>
            <type>text/plain</type>
            <size>92991</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NWQwMWNiLi4zZWQ5YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMg
QEAKKzIwMTMtMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9y
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIHNldEdlb21ldHJ5Rmxp
cHBlZCBpcyBvbiBQbGF0Zm9ybUNBTGF5ZXJNYWMgbm93LgorCisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgIEFkZCBQbGF0Zm9ybUNBTGF5ZXIuY3BwLCBQbGF0
Zm9ybUNBTGF5ZXJXaW4uaCwgYW5kIGxldCBWUyBkbyBpdHMKKyAgICAgICAgdGhpbmcgd2l0aCBz
b21lIG90aGVyIGZpbGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgUGxhdGZvcm1DQUxheWVyLmNwcCBhbmQgUGxhdGZvcm1DQUxh
eWVyTWFjLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVZGV3JhcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIE1ha2UgYSBQbGF0Zm9ybUNBTGF5
ZXJXaW4gZXhwbGljaXRseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0
ZVBsYXRmb3JtQ0FMYXllcik6CisgICAgICAgIEFkZGVkLiBEZWNpZGUgd2hldGhlciB0byBtYWtl
IGEgUGxhdGZvcm1DQUxheWVye01hYywgV2lufSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0uCisgICAg
ICAgIExhdGVyLCB3ZSB3aWxsIGRlY2lkZSBiZXR3ZWVuIG90aGVyIHN1YmNsYXNzZXMgYmFzZWQg
b24gb3RoZXIgdGhpbmdzLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6Okdy
YXBoaWNzTGF5ZXJDQSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENv
bnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOgorICAgICAgICBVc2UgY3JlYXRlUGxh
dGZvcm1DQUxheWVyIGluc3RlYWQgb2YgUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgSW5j
bHVkZSBQbGF0Zm9ybUNBTGF5ZXIuaCBoZXJlIHNvIHdlIGNhbiBnZXQgdGhlIExheWVyVHlwZSBl
bnVtLgorICAgICAgICAoTk9URS10by1iZS1yZW1vdmVkOiBpZiB0aGVyZSdzIGEgYmV0dGVyIHdh
eSB0byBkbyB0aGlzLCBJJ20gb3BlbiB0bworICAgICAgICBzdWdnZXN0aW9uczsgSSBjb3VsZG4n
dCBwdXp6bGUgb3V0IG5lc3RlZCAnZW51bSBjbGFzcycgc3R1ZmYpLgorCisgICAgICAgIEFkZCB0
aGUgY3JlYXRlUGxhdGZvcm1DQUxheWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaDoKKyAgICAgICAgRnJpZW5kIHRoZSBzdWJjbGFzc2Vz
IHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjp+UGxhdGZvcm1D
QUxheWVyKToKKyAgICAgICAgUHVsbCB0aGUgc2hhcmVkIHBhcnQgb2YgdGhlIFBsYXRmb3JtQ0FM
YXllciBkZXN0cnVjdG9yIG91dC4KKworICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKToKKyAgICAgICAgZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZCBpcyBzdGF0aWMgb24gUGxhdGZvcm1DQUxheWVyLCBzbyBpdCBjYW4ndCBiZSBpbgorICAgICAg
ICB0aGUgc3ViY2xhc3NlczsgZGVjaWRlIGhlcmUgYmFzZWQgb24gcGxhdGZvcm0gd2hpY2ggZmls
dGVycyBjYW4gYmUgYWNjZWxlcmF0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnNldE93
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVy
KToKKyAgICAgICAgVmlydHVhbGl6ZSBhbGwgdGhlIHRoaW5ncy4gTW92ZSBwbGF0Zm9ybSBzcGVj
aWZpYyBtZW1iZXJzIHRvIHRoZWlyIG5ldyBzdWJjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAg
ICBNb3ZlIHRoZSBQTEFURk9STShNQUMpIGltcGxlbWVudGF0aW9ucyBmcm9tIFBsYXRmb3JtQ0FM
YXllciB0byBQbGF0Zm9ybUNBTGF5ZXJNYWMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKToKKyAgICAgICAgVGhlIHBsYXRmb3JtQ0FMYXllciBsb29rdXAgZnVu
Y3Rpb24gaXMgc3RhdGljIG9uIFBsYXRmb3JtQ0FMYXllciwgc28gaXQgY2FuJ3QKKyAgICAgICAg
YmUgbW92ZWQgdG8gdGhlIHN1YmNsYXNzZXMuIEl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIGluIHRo
ZSBmdXR1cmUgdG8gbW92ZSB0b3dhcmRzCisgICAgICAgIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQg
bWVjaGFuaXNtIGZvciBsb29raW5nIHVwIFBsYXRmb3JtQ0FMYXllcnMgZnJvbSBQbGF0Zm9ybUxh
eWVycywKKyAgICAgICAgYW5kIHRvIGF2b2lkIG5lZWRpbmcgdG8gZG8gdGhpcyBhcyBvZnRlbiBh
cyB3ZSBkbyBub3cuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUNGTGF5ZXJUcmVl
SG9zdDo6Q0FDRkxheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICBNb3ZlIHRoZSBQTEFURk9STShX
SU4pIGltcGxlbWVudGF0aW9ucyBmcm9tIFBsYXRmb3JtQ0FMYXllciB0byBQbGF0Zm9ybUNBTGF5
ZXJXaW4uCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKToKKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKToKKyAgICAgICAgCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oOiBBZGRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNyZWF0ZUxheWVyRm9yTW92aWUpOgorICAgICAg
ICBJbmNsdWRlIFBsYXRmb3JtQ0FMYXllcldpbi5oIGFuZCBleHBsaWNpdGx5IG1ha2UgUGxhdGZv
cm1DQUxheWVyV2lucyBoZXJlLgorCiAyMDEzLTEwLTEyICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHBvc2l0aW9uRm9yUG9pbnQgdG8gUmVuZGVyVGV4
dExpbmVCb3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBhNmFkYzliLi44YzBhMDg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgpAQCAtNDg2LDcgKzQ4Niw2IEBAIF9fWk43V2ViQ29yZTE1SGl0VGVz
dExvY2F0aW9uMTJyZWN0Rm9yUG9pbnRFUktOU18xMUxheW91dFBvaW50RWpqamoKIF9fWk43V2Vi
Q29yZTE1SlNET01XaW5kb3dCYXNlOGNvbW1vblZNRXYKIF9fWk43V2ViQ29yZTE1UGFzdGVib2Fy
ZEltYWdlQzFFdgogX19aTjdXZWJDb3JlMTVQYXN0ZWJvYXJkSW1hZ2VEMUV2Ci1fX1pON1dlYkNv
cmUxNVBsYXRmb3JtQ0FMYXllcjE4c2V0R2VvbWV0cnlGbGlwcGVkRWIKIF9fWk43V2ViQ29yZTE1
UHJvdGVjdGlvblNwYWNlQzFFUktOM1dURjZTdHJpbmdFaU5TXzI1UHJvdGVjdGlvblNwYWNlU2Vy
dmVyVHlwZUVTNF9OU18zNVByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRQogX19a
TjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUV2CiBfX1pON1dlYkNvcmUxNVJlc291cmNlUmVx
dWVzdDIxaHR0cFBpcGVsaW5pbmdFbmFibGVkRXYKQEAgLTYxNCw2ICs2MTMsNyBAQCBfX1pON1dl
YkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUx
N3NldENvb2tpZXNGcm9tRE9NRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJM
RVM1X1JLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5T
VVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBOU181RnJhbWVFUk5TXzE1
RE9NV3JhcHBlcldvcmxkRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybUNBTGF5ZXJNYWMxOHNldEdl
b21ldHJ5RmxpcHBlZEViCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEwdW5pcXVl
TmFtZUV2CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9yVHlwZUVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNzdHJpbmdG
b3JUeXBlRVJLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKaW5kZXggMGQxYzhmZi4uN2M3OTgzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC03MTcwLDYgKzcxNzAs
NyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3Vu
ZGF0aW9uXGNmXEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkNGLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZDRi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25cSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xjYVxQbGF0Zm9ybUNBTGF5ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcR0xDb250ZXh0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhaXJvXEdyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
Ij4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBA
IC0xODY1Niw2ICsxODY1Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xhdmZvdW5kYXRpb25cY2ZcSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxlZ2FjeUFW
Q0YuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2
Zm91bmRhdGlvblxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVxQbGF0Zm9ybUNBRmlsdGVycy5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFBs
YXRmb3JtQ0FMYXllcldpbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcR0xDb250ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXFN1YmltYWdlQ2FjaGVXaXRo
VGltZXIuaCI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggN2QyMGI2YS4uMzZhYzAxYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
cwpAQCAtNjkwNyw2ICs2OTA3LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXG1lZGlhY29udHJvbHNcTWVkaWFDb250cm9sc0hvc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+
TW9kdWxlc1xtZWRpYWNvbnRyb2xzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcQ1NTR3JpZFRlbXBsYXRlVmFsdWUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclRleHRMaW5lQm94ZXMuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxl
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNh
XFBsYXRmb3JtQ0FMYXllci5jcHAiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xj
YTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91
cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cQ29vcmRp
bmF0ZXMuaCI+CkBAIC0xNDUxNyw2ICsxNDUyMywxMiBAQAogICAgICAgPEZpbHRlcj5EZXJpdmVk
U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFVzZXJBZ2VudFNjcmlwdHMuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmlkVGVtcGxhdGVWYWx1ZS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclRleHRMaW5lQm94ZXMuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0UGFpbnRTdHlsZS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2lu
XFBsYXRmb3JtQ0FMYXllcldpbi5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Nc
Y2Fcd2luPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRl
bUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmFtbWFyLnkuaW4iPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDFhZDYyZTIuLmYwNTBmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk1MCw2ICs5NTAsOCBAQAogCQkyRDVBNTkzMTE1MjUy
NUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8qIEltYWdl
T3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQu
aCAqLzsgfTsKIAkJMkQ2RTQ2ODQxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZF
NDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLzsgfTsKKwkJ
MkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTIxODA3NERERjAw
MDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovOyB9OworCQkyRDcwQkExNTE4MDc0Rjg2
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAvKiBQbGF0Zm9y
bUNBTGF5ZXIuY3BwICovOyB9OwogCQkyRDgyODdGNjE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVz
dExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEODI4N0Y0MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwICovOyB9
OwogCQkyRDgyODdGNzE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgyODdGNTE2RTRBMDM4
MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ4RkVCREMxNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Ny
b3NzZmFkZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEOEZFQkRBMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1ZS5jcHAg
Ki87IH07CkBAIC03NDI5LDYgKzc0MzEsOCBAQAogCQkyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAg
LyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENUJDNDI2MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2RTQ2
ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQREZEb2N1bWVudEltYWdlTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxh
dGZvcm1DQUxheWVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRm
b3JtQ0FMYXllck1hYy5oOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyogUGxh
dGZvcm1DQUxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBs
YXRmb3JtQ0FMYXllci5jcHA7IHBhdGggPSBjYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDgyODdGNDE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVz
dExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRl
c3RMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODI4N0Y1MTZF
NEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGl0VGVzdExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEOEZFQkRBMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDcm9zc2ZhZGVWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY4Myw2ICsxNDY4Nyw3IEBACiAJCQkJ
NDk1ODc4MUYxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0gKi8s
CiAJCQkJMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1t
ICovLAogCQkJCTQ5NTg3ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0gKi8sCisJCQkJMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1h
Yy5oICovLAogCQkJCTFBQTcxNjA5MTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5o
ICovLAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAq
LywKIAkJCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIu
aCAqLywKQEAgLTE0NzI3LDYgKzE0NzMyLDcgQEAKIAkJCQkyOTE3QjU2MDE0NzM0OTZDMDA1MkM5
RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oICovLAogCQkJCTQ5OUIzRURDMTI4REI1
MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi8sCiAJCQkJMEYxMzE2M0QxNkVE
MENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi8sCisJCQkJMkQ3MEJBMTQxODA3
NEY4NTAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi8sCiAJCQkJNDk5QjNFQzMxMjhD
Q0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oICovLAogCQkJCTQ5M0U1RTA4MTJENjQy
MDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCAqLywKIAkJCQk0OTRCQzQwQzEy
QUVERDlFMDA3NDNCRDIgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDQS5jcHAgKi8sCkBAIC0yNDUy
OSw2ICsyNDUzNSw3IEBACiAJCQkJMkU0MzQ2NTMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1
bkxvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODk5MTQ3RDM1RjkwMDEwQkMwNiAvKiBX
b3JrZXJSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUw
MDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQky
RDcwQkExMzE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGMzQ3NDJFOTEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVidWdT
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5REI2MTdEMTQxNTEwMDdGRjg0MiAvKiBK
U1JUQ0ljZUNhbmRpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdENkIzNDkwRjYxMTA0NTAw
Qjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU4Nyw2
ICsyNTU5NCw3IEBACiAJCQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYwOTAwMEE0MjM0IC8q
IEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjgwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ3MEJBMTUx
ODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNEQ1OEVCODE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2lu
dDNELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCBiOTVl
OTA0Li5iYjQ0ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNlbmRp
ZgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIKICNpbmNsdWRl
ICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKIApAQCAtMTU5Miw3ICsx
NTkyLDcgQEAgUGxhdGZvcm1MYXllciogQVZGV3JhcHBlcjo6cGxhdGZvcm1MYXllcigpCiAgICAg
aWYgKCFtX2xheWVyQ2xpZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fdmlkZW9MYXll
cldyYXBwZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgpKTsKKyAgICBtX3ZpZGVvTGF5ZXJXcmFwcGVy
ID0gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbV9sYXllckNsaWVudC5nZXQoKSk7CiAgICAgaWYgKCFtX3ZpZGVvTGF5ZXJXcmFwcGVy
KQogICAgICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNzEyNGEwZi4uNjJhNjNl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCkBAIC00OCw5ICs0OCwxNCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllck1hYy5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNlbmRpZgog
CisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgorI2Vu
ZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI4
MCw2ICsyODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyRmFjdG9yeSogZmFjdG8KIAogICAgIHJldHVybiBmYWN0
b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGNsaWVudCk7CiB9CisgICAgCitQYXNzUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVy
TWFjOjpjcmVhdGUobGF5ZXJUeXBlLCBvd25lcik7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAg
cmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKGxheWVyVHlwZSwgb3duZXIpOworI2Vu
ZGlmCit9CisgICAgCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNB
OjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0
dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHBsYXRmb3JtTGF5ZXIsIG93bmVyKTsKKyNl
bGlmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUo
cGxhdGZvcm1MYXllciwgb3duZXIpOworI2VuZGlmCit9CiAKIEdyYXBoaWNzTGF5ZXJDQTo6R3Jh
cGhpY3NMYXllckNBKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQpAQCAtMjk2LDcgKzMxOSw3IEBAIEdyYXBoaWNzTGF5ZXJDQTo6R3JhcGhp
Y3NMYXllckNBKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAgICAgbV9pc1BhZ2VU
aWxlZEJhY2tpbmdMYXllciA9IHRydWU7CiAgICAgfQogCi0gICAgbV9sYXllciA9IFBsYXRmb3Jt
Q0FMYXllcjo6Y3JlYXRlKGxheWVyVHlwZSwgdGhpcyk7CisgICAgbV9sYXllciA9IGNyZWF0ZVBs
YXRmb3JtQ0FMYXllcihsYXllclR5cGUsIHRoaXMpOwogICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChDb250ZW50c1NjYWxlQ2hhbmdlZCk7CiB9CiAKQEAgLTc4MSw3ICs4MDQsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogCiAgICAgaWYgKG1fY29udGVudHNTb2xpZENvbG9yLmlzVmFsaWQoKSkgewogICAgICAg
ICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckJhY2tncm91bmRDb2xv
cjsKLSAgICAgICAgbV9jb250ZW50c0xheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgIG1fY29udGVudHNM
YXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCB0aGlzKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0
TmFtZSgiQmFja2dyb3VuZCBDb2xvciBMYXllciIpOwogI2VuZGlmCkBAIC04NDcsNyArODcwLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVy
KiBtZWRpYUxheWVyKQogICAgIC8vIHRoZSBjcmVhdG9yIG9mIHRoZSByYXcgbGF5ZXIgaXMgdXNp
bmcgaXQgZm9yIHNvbWUgb3RoZXIgcHVycG9zZS4KICAgICAvLyBGb3Igbm93IHdlIGRvbid0IHN1
cHBvcnQgc3VjaCBhIGNhc2UuCiAgICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIg
PSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtZWRpYUxheWVyKTsKLSAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSBtZWRpYUxheWVyID8gKHBsYXRmb3JtQ0FMYXllciA/IHBsYXRmb3JtQ0FM
YXllciA6IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKG1lZGlhTGF5ZXIsIHRoaXMpKSA6IDA7Cisg
ICAgbV9jb250ZW50c0xheWVyID0gbWVkaWFMYXllciA/IChwbGF0Zm9ybUNBTGF5ZXIgPyBwbGF0
Zm9ybUNBTGF5ZXIgOiBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIobWVkaWFMYXllciwgdGhpcykpIDog
MDsKICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gbWVkaWFMYXllciA/IENvbnRlbnRzTGF5
ZXJGb3JNZWRpYSA6IE5vQ29udGVudHNMYXllcjsKIAogICAgIG5vdGVTdWJsYXllcnNDaGFuZ2Vk
KCk7CkBAIC04NjAsNyArODgzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciogY2FudmFzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICAvLyBDcmVhdGUgdGhlIFBsYXRmb3JtQ0FMYXllciB0byB3cmFwIHRoZSBpbmNvbWlu
ZyBsYXllcgotICAgIG1fY29udGVudHNMYXllciA9IGNhbnZhc0xheWVyID8gUGxhdGZvcm1DQUxh
eWVyOjpjcmVhdGUoY2FudmFzTGF5ZXIsIHRoaXMpIDogMDsKKyAgICBtX2NvbnRlbnRzTGF5ZXIg
PSBjYW52YXNMYXllciA/IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihjYW52YXNMYXllciwgdGhpcykg
OiAwOwogICAgIAogICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBjYW52YXNMYXllciA/IENv
bnRlbnRzTGF5ZXJGb3JDYW52YXMgOiBOb0NvbnRlbnRzTGF5ZXI7CiAKQEAgLTEwOTgsNyArMTEy
MSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0
IENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uCiAgICAgICAgIHN0YXRpYyBDb2xvciB3YXNo
RmlsbENvbG9yKDI1NSwgMCwgMCwgNTApOwogICAgICAgICBzdGF0aWMgQ29sb3Igd2FzaEJvcmRl
ckNvbG9yKDI1NSwgMCwgMCwgMTAwKTsKICAgICAgICAgCi0gICAgICAgIG1fdmlzaWJsZVRpbGVX
YXNoTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgbV92aXNpYmxlVGlsZVdhc2hMYXllciA9IGNyZWF0
ZVBsYXRmb3JtQ0FMYXllcihjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIsIHRoaXMpOwogICAgICAgICBT
dHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAlcCIs
IG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CiAgICAgICAgIG1fdmlz
aWJsZVRpbGVXYXNoTGF5ZXItPnNldE5hbWUobmFtZSk7CiAgICAgICAgIG1fdmlzaWJsZVRpbGVX
YXNoTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CkBAIC0xNjA2
LDcgKzE2MjksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVy
KFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICAgICAgICAgIG1fc3RydWN0dXJh
bExheWVyID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5ZXIpIHsK
LSAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciwgdGhpcyk7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyYWxMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyLCB0aGlzKTsKICAgICAgICAgICAgIHN0cnVj
dHVyYWxMYXllckNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTE2
MTQsNyArMTYzNyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5
ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlKQogICAgICAgICAgICAgbV9zdHJ1Y3R1
cmFsTGF5ZXIgPSAwOwogCiAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKLSAgICAg
ICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgICAgICBtX3N0cnVjdHVy
YWxMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUxheWVyLCB0aGlzKTsKICAgICAgICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTc3OCw3ICsxODAxLDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQogewogICAgIGlmIChtX3BlbmRpbmdDb250ZW50
c0ltYWdlKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXll
ciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCB0aGlzKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNl
dE5hbWUoIkltYWdlIExheWVyIik7CiAjZW5kaWYKQEAgLTE4NTksNyArMTg4Miw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKCkKICAgICBib29sIGdhaW5lZE9y
TG9zdENsaXBwaW5nTGF5ZXIgPSBmYWxzZTsKICAgICBpZiAoIW1fY29udGVudHNDbGlwcGluZ1Jl
Y3QuY29udGFpbnMobV9jb250ZW50c1JlY3QpKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0Ns
aXBwaW5nTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fY29udGVudHNDbGlwcGluZ0xheWVyID0gUGxh
dGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhp
cyk7CisgICAgICAgICAgICBtX2NvbnRlbnRzQ2xpcHBpbmdMYXllciA9IGNyZWF0ZVBsYXRmb3Jt
Q0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAg
ICAgIG1fY29udGVudHNDbGlwcGluZ0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwogICAg
ICAgICAgICAgbV9jb250ZW50c0NsaXBwaW5nTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoKSk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjg5OCw3ICsyOTIxLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKQogICAg
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSA9IHVzZVRpbGVkTGF5ZXIgPyBQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyIDogUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVXZWJMYXllcjsKICNlbmRpZgogCi0gICAgbV9sYXllciA9IFBsYXRmb3Jt
Q0FMYXllcjo6Y3JlYXRlKGxheWVyVHlwZSwgdGhpcyk7CisgICAgbV9sYXllciA9IGNyZWF0ZVBs
YXRmb3JtQ0FMYXllcihsYXllclR5cGUsIHRoaXMpOwogCiAgICAgbV91c2luZ1RpbGVkQmFja2lu
ZyA9IHVzZVRpbGVkTGF5ZXI7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGYzZTRjOGIuLjVhMTlmNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNs
aWVudC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KQEAgLTQzLDcgKzQ0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbGF0
Zm9ybUNBTGF5ZXI7CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKIAogY2xhc3MgR3JhcGhpY3NMYXll
ckNBIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQg
ewpAQCAtMTg1LDYgKzE4NSw5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
ICAgIHZvaWQgdXBkYXRlRmlsdGVycygpOwogI2VuZGlmCisgICAgCisgICAgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcik7CisgICAgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUxheWVyKiwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcik7CiAKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHByaW1h
cnlMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJhbExheWVyLmdldCgpID8gbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOyB9CiAgICAgUGxhdGZvcm1DQUxheWVy
KiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAppbmRleCAw
OTBkZWY1Li44ZGI1MDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCkBAIC01Myw2ICs1MywxMSBAQCBj
bGFzcyBUaW1pbmdGdW5jdGlvbjsKIGNsYXNzIFBsYXRmb3JtQ0FBbmltYXRpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxQbGF0Zm9ybUNBQW5pbWF0aW9uPiB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFBsYXRmb3JtQ0FMYXllcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgZnJpZW5kIGNsYXNz
IFBsYXRmb3JtQ0FMYXllck1hYzsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBmcmllbmQgY2xh
c3MgUGxhdGZvcm1DQUxheWVyV2luOworI2VuZGlmCiAgICAgCiAgICAgZW51bSBBbmltYXRpb25U
eXBlIHsgQmFzaWMsIEtleWZyYW1lIH07CiAgICAgZW51bSBGaWxsTW9kZVR5cGUgeyBOb0ZpbGxN
b2RlLCBGb3J3YXJkcywgQmFja3dhcmRzLCBCb3RoIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2ZkOTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcApAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5
ZXIuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJNYWMu
aCIKKyNlbmRpZgorCisjaWYgVVNFKENBKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRm
b3JtQ0FMYXllcjo6flBsYXRmb3JtQ0FMYXllcigpCit7CisgICAgLy8gQ2xlYXIgdGhlIG93bmVy
LCB3aGljaCBhbHNvIGNsZWFycyBpdCBpbiB0aGUgZGVsZWdhdGUgdG8gcHJldmVudCBhdHRlbXB0
cworICAgIC8vIHRvIHVzZSB0aGUgR3JhcGhpY3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRl
c3Ryb3llZC4KKyAgICBzZXRPd25lcigwKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
K2Jvb2wgUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIFVOVVNFRF9Q
QVJBTShmaWx0ZXJzKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIC8vIFJldHVy
biBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyB0byBhdm9pZCBuZWVkbGVzcyB3b3JrCisg
ICAgaWYgKCFmaWx0ZXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJzLmF0KGkpOworICAg
ICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAg
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTToKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3
ZSBjYW4gb25seSBoYW5kbGUgZHJvcC1zaGFkb3cgaXMgaWYgaXQncyBsYXN0IGluIHRoZSBsaXN0
CisgICAgICAgICAgICAgICAgaWYgKGkgPCAoZmlsdGVycy5zaXplKCkgLSAxKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30KKworI2VuZGlmIC8vIFVTRShDQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmgKaW5kZXggMDMwY2YxNC4uMDNiMGNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTUwLDYgKzUw
LDExIEBAIGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+ID4gUGxhdGZvcm1DQUxheWVyTGlzdDsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1DQUxheWVyPiB7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJNYWM7CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbjsKKyNlbmRpZgogcHVi
bGljOgogICAgIHN0YXRpYyBDRlRpbWVJbnRlcnZhbCBjdXJyZW50VGltZVRvTWVkaWFUaW1lKGRv
dWJsZSB0KSB7IHJldHVybiBDQUN1cnJlbnRNZWRpYVRpbWUoKSArIHQgLSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsgfQogCkBAIC02OSwxNzggKzc0LDE0NiBAQCBwdWJsaWM6CiAgICAg
fTsKICAgICBlbnVtIEZpbHRlclR5cGUgeyBMaW5lYXIsIE5lYXJlc3QsIFRyaWxpbmVhciB9Owog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKLSAgICAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHBh
c3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVj
YXVzZSBQbGF0Zm9ybUxheWVyCi0gICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2Jq
IEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZvaWQqIHBsYXRmb3Jt
TGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsK
IAotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqKSBjb25zdDsKLQotICAgIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKKyAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybUNBTGF5ZXIoKTsKICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUg
bGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVjYXVzZSBQbGF0
Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMr
Ky4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgogICAgIHN0YXRpYyBQ
bGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKTsKICAg
ICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0K
IAotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlUGFnZVRpbGVkQmFj
a2luZ0xheWVyIHx8IG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOyB9
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xheWVyKCkgY29uc3Qg
PSAwOwogCi0gICAgUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIoKSBjb25zdDsKLSAgICAKLSAg
ICAvLyBBIGxpc3Qgb2Ygc3VibGF5ZXJzIHRoYXQgR3JhcGhpY3NMYXllckNBIHNob3VsZCBtYWlu
dGFpbiBhcyB0aGUgZmlyc3Qgc3VibGF5ZXJzLgotICAgIGNvbnN0IFBsYXRmb3JtQ0FMYXllckxp
c3QqIGN1c3RvbVN1YmxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tU3VibGF5ZXJzLmdl
dCgpOyB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNWYWx1ZUZ1bmN0aW9uU3VwcG9ydGVkKCk7
Ci0gICAgCiAgICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXI7IH0KLSAgICB2b2lkIHNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCopOwot
Ci0gICAgdm9pZCBhbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7Ci0g
ICAgdm9pZCBlbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIHsgbV9vd25lciA9IG93bmVyOyB9
CiAKLSAgICAvLyBMYXlvdXQgc3VwcG9ydAotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
KiBkaXJ0eVJlY3QgPSAwKSA9IDA7CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApOwotICAgIAotICAgIC8vIFRoaXMgdGVsbHMgdGhlIGxh
eWVyIHRyZWUgdG8gY29tbWl0IGNoYW5nZXMgYW5kIHBlcmZvcm0gYSByZW5kZXIsIHdpdGhvdXQg
ZG8gYSBzZXROZWVkc0Rpc3BsYXkgb24gYW55IGxheWVyLgotICAgIHZvaWQgc2V0TmVlZHNDb21t
aXQoKTsKLQotICAgIHZvaWQgc2V0Q29udGVudHNDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzQ2hhbmdlZCgpID0gMDsKICAgICAKICAgICBMYXllclR5cGUgbGF5ZXJUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KIAotICAgIFBsYXRmb3JtQ0FMYXllciog
c3VwZXJsYXllcigpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAg
ICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7Ci0gICAgdm9p
ZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICB2b2lkIGFwcGVuZFN1YmxheWVyKFBsYXRmb3Jt
Q0FMYXllciopOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiwgc2l6
ZV90IGluZGV4KTsKLSAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJl
ZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKik7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIq
IHN1cGVybGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21TdXBl
cmxheWVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZv
cm1DQUxheWVyTGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJz
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllcios
IHNpemVfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5ZXIoUGxh
dGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciopID0gMDsKKworICAgIC8v
IEEgbGlzdCBvZiBzdWJsYXllcnMgdGhhdCBHcmFwaGljc0xheWVyQ0Egc2hvdWxkIG1haW50YWlu
IGFzIHRoZSBmaXJzdCBzdWJsYXllcnMuCisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybUNBTGF5
ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGlzIG1ldGhv
ZCByZW1vdmVzIHRoZSBzdWJsYXllcnMgZnJvbSB0aGUgc291cmNlIGFuZCByZXBhcmVudHMgdGhl
bSB0byB0aGUgY3VycmVudCBsYXllci4KICAgICAvLyBBbnkgc3VibGF5ZXJzIHByZXZpb3VzbHkg
aW4gdGhlIGN1cnJlbnQgbGF5ZXIgYXJlIHJlbW92ZWQuCi0gICAgdm9pZCBhZG9wdFN1YmxheWVy
cyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGFkb3B0U3VibGF5
ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKSA9IDA7CiAgICAgCi0gICAgdm9pZCBhZGRBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFuaW1h
dGlvbik7ICAgIAotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KTsKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtl
eSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKICAgICAKLSAgICB2b2lkIHNldE1h
c2soUGxhdGZvcm1DQUxheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2soUGxhdGZvcm1D
QUxheWVyKikgPSAwOwogICAgIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdDsKLSAgICB2b2lk
IHNldE9wYXF1ZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSA9IDA7CiAKLSAgICBGbG9hdFJlY3Qg
Ym91bmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jik7Cisg
ICAgdmlydHVhbCBGbG9hdFJlY3QgYm91bmRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgRmxvYXRQb2ludDNEIHBv
c2l0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0Qm
KTsKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJikgPSAwOwogICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEZsb2F0
UG9pbnQzRChwb3MueCgpLCBwb3MueSgpLCAwKSk7IH0KIAotICAgIEZsb2F0UG9pbnQzRCBhbmNo
b3JQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJik7CisgICAgdmlydHVhbCBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpID0g
MDsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVh
bCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKIAot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwor
ICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JikgPSAwOwogCi0gICAgdm9pZCBzZXRIaWRkZW4oYm9vbCk7CisgICAg
dmlydHVhbCB2b2lkIHNldEhpZGRlbihib29sKSA9IDA7CiAKLSAgICB2b2lkIHNldEdlb21ldHJ5
RmxpcHBlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wp
ID0gMDsKIAotICAgIGJvb2wgaXNEb3VibGVTaWRlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RG91
YmxlU2lkZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGlzRG91YmxlU2lkZWQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpID0gMDsKIAotICAgIGJv
b2wgbWFza3NUb0JvdW5kcygpIGNvbnN0OwotICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29s
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSA9IDA7CiAgICAgCi0gICAgYm9vbCBhY2Nl
bGVyYXRlc0RyYXdpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhi
b29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCkgPSAwOwogCi0gICAg
Q0ZUeXBlUmVmIGNvbnRlbnRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVS
ZWYpOworICAgIHZpcnR1YWwgQ0ZUeXBlUmVmIGNvbnRlbnRzKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVSZWYpID0gMDsKIAotICAgIHZvaWQgc2V0Q29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgdm9pZCBzZXRNaW5pZmljYXRpb25G
aWx0ZXIoRmlsdGVyVHlwZSk7Ci0gICAgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRl
clR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlw
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5
cGUpID0gMDsKIAotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCBDb2xvciBiYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpID0gMDsKIAotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCkgPSAwOwogCi0gICAgdm9p
ZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3Jk
ZXJDb2xvcihjb25zdCBDb2xvciYpID0gMDsKIAotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdDsK
LSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwogICAg
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmKSA9IDA7CiAgICAgc3RhdGljIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRl
ZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0gICAgdm9pZCBjb3B5RmlsdGVyc0Zyb20oY29u
c3QgUGxhdGZvcm1DQUxheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGNvcHlGaWx0ZXJzRnJvbShj
b25zdCBQbGF0Zm9ybUNBTGF5ZXIqKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TmFtZShj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKSA9
IDA7CiAKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKLSAgICB2b2lkIHNldFNwZWVk
KGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3BlZWQoZmxvYXQpID0gMDsKIAotICAgIHZv
aWQgc2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRp
bWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpID0gMDsKICAgICAKLSAgICBmbG9hdCBjb250ZW50c1Nj
YWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2aXJ0
dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAotICAgIFRpbGVkQmFja2luZyogdGlsZWRCYWNr
aW5nKCk7CisgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpID0gMDsKIAog
I2lmIFBMQVRGT1JNKFdJTikKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FB
bmltYXRpb24+ID4mIGFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FuaW1hdGlvbnM7IH0KLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhZGVmaW5lZChOREVCVUcpCi0gICAgdm9pZCBwcmlu
dFRyZWUoKSBjb25zdDsKLSNlbmRpZgorCXZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiByb290TGF5
ZXIoKSBjb25zdCA9IDA7CisJdmlydHVhbCB2b2lkIHNldE5lZWRzTGF5b3V0KCkgPSAwOworCXZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpID0gMDsKKyNpZm5kZWYgTkRFQlVHCisgICAgdmly
dHVhbCB2b2lkIHByaW50VHJlZSgpIGNvbnN0ID0gMDsKKyNlbmRpZiAvLyBOREVCVUcKKyNlbmRp
ZiAvLyBQTEFURk9STShXSU4pCiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzeW5jaHJv
bm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jaHJvbm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgUGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSwg
UGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIFBsYXRmb3JtQ0FM
YXllcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorICAgICAgICA6IG1fb3duZXIob3du
ZXIpCisgICAgewogCi1wcml2YXRlOgotICAgIEFWUGxheWVyTGF5ZXIqIHBsYXllckxheWVyKCkg
Y29uc3Q7Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG1fb3duZXI7Ci0gICAgTGF5ZXJU
eXBlIG1fbGF5ZXJUeXBlOworICAgIH0KICAgICAKLSAgICBPd25QdHI8UGxhdGZvcm1DQUxheWVy
TGlzdD4gbV9jdXN0b21TdWJsYXllcnM7Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShX
SU4pCi0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXI7Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmlt
YXRpb24+ID4gbV9hbmltYXRpb25zOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCi0jaWZk
ZWYgX19PQkpDX18KLSAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fZGVsZWdhdGU7Ci0jZWxzZQot
ICAgIFJldGFpblB0cjx2b2lkPiBtX2RlbGVnYXRlOwotI2VuZGlmCisgICAgdmlydHVhbCBBVlBs
YXllckxheWVyKiBwbGF5ZXJMYXllcigpIGNvbnN0ID0gMDsKICNlbmRpZgorCisgICAgTGF5ZXJU
eXBlIG1fbGF5ZXJUeXBlOworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX2xheWVyOwor
ICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogbV9vd25lcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
TGF5ZXJNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI5NWQ5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FMYXllck1hYy5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxh
dGZvcm1DQUxheWVyTWFjX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUxheWVyTWFjX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5o
IgorCitPQkpDX0NMQVNTIE5TT2JqZWN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFBsYXRmb3JtQ0FMYXllck1hYyBGSU5BTCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVy
VHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlv
biBwYXNzZXMgdGhlIGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVy
IGJlY2F1c2UgUGxhdGZvcm1MYXllcgorICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9y
IE9iaiBDIGFuZCBDKysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZSh2b2lkKiBwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKKworICAgIH5QbGF0Zm9ybUNBTGF5
ZXJNYWMoKTsKKworICAgIHZpcnR1YWwgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBsYXllclR5cGUoKSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNr
aW5nTGF5ZXIgfHwgbGF5ZXJUeXBlKCkgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
KiBkaXJ0eVJlY3QgPSAwKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c0NoYW5nZWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiBzdXBl
cmxheWVyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21TdXBl
cmxheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQ
bGF0Zm9ybUNBTGF5ZXJMaXN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFs
bFN1YmxheWVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdWJsYXllcihQ
bGF0Zm9ybUNBTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0U3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiwgc2l6ZV90IGluZGV4KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVwbGFjZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciogcmVmZXJlbmNlLCBQbGF0Zm9y
bUNBTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFBsYXRmb3JtQ0FMYXllckxp
c3QqIGN1c3RvbVN1YmxheWVycygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY3VzdG9tU3Vi
bGF5ZXJzLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFkb3B0U3VibGF5ZXJzKFBsYXRmb3Jt
Q0FMYXllciogc291cmNlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFuaW1hdGlv
bikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25z
dCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXll
ciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZs
b2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
RmxvYXRQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVy
VHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVy
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SGlkZGVuKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lk
IHNldEdlb21ldHJ5RmxpcHBlZChib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBp
c0RvdWJsZVNpZGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJs
ZVNpZGVkKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29s
KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5
cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZp
bHRlclR5cGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgo
ZmxvYXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0
IENvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisK
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3B5Rmls
dGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYKKworICAg
IHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVGlsZWRCYWNraW5n
KiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbm91
c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1D
QUxheWVyTWFjKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKworICAgIHZpcnR1YWwgQVZQbGF5ZXJMYXllciog
cGxheWVyTGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIFJldGFpblB0cjxOU09iamVjdD4g
bV9kZWxlZ2F0ZTsKKyAgICBPd25QdHI8UGxhdGZvcm1DQUxheWVyTGlzdD4gbV9jdXN0b21TdWJs
YXllcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNlbmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJNYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0KaW5kZXggZmI3Y2Y0Zi4uNWEyN2ZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNp
bXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyTWFjLmgi
CiAKICNpbXBvcnQgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRp
b25zLmgiCkBAIC00NSwxNyArNDUsMzcgQEAKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5k
YXRpb24uaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8d3Rm
L0N1cnJlbnRUaW1lLmg+Ci0jaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlv
bikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKLXVzaW5n
IHN0ZDo6bWluOwotdXNpbmcgc3RkOjptYXg7Ci0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllck1hYyhsYXllclR5cGUsIDAsIG93
bmVyKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyTWFjKExheWVy
VHlwZUN1c3RvbSwgc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBsYXRmb3JtTGF5ZXIpLCBv
d25lcikpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0Zm9ybUNBTGF5ZXJQb2lu
dGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgaWYgKCFw
bGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFBvaW50ZXIgdG8gUGxh
dGZvcm1DQUxheWVyIGlzIGtlcHQgaW4gYSBrZXkgb2YgdGhlIENBTGF5ZXIKKyAgICBQbGF0Zm9y
bUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciA9IG5pbDsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICBwbGF0Zm9ybUNBTGF5ZXIgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5
ZXIqPihbW3N0YXRpY19jYXN0PENBTGF5ZXIqPihwbGF0Zm9ybUxheWVyKSB2YWx1ZUZvcktleTpw
bGF0Zm9ybUNBTGF5ZXJQb2ludGVyXSBwb2ludGVyVmFsdWVdKTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCisgICAgcmV0dXJuIHBsYXRmb3JtQ0FMYXllcjsKK30KKwogLy8gVGhpcyB2
YWx1ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIGluIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0KIHN0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdLTm9uWmVyb0JlZ2luVGltZUZsYWcgPSBAIldLUGxhdGZv
cm1DQUFuaW1hdGlvbk5vblplcm9CZWdpblRpbWVGbGFnIjsKIApAQCAtMTEyLDE3ICsxMzIsOSBA
QCBzdGF0aWMgZG91YmxlIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkK
IC0gKEJPT0wpYWNjZWxlcmF0ZXNEcmF3aW5nOwogQGVuZAogCi1zdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7Ci0KLWJv
b2wgUGxhdGZvcm1DQUxheWVyOjppc1ZhbHVlRnVuY3Rpb25TdXBwb3J0ZWQoKQordm9pZCBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OnNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7
Ci0gICAgc3RhdGljIGJvb2wgc0hhdmVWYWx1ZUZ1bmN0aW9uID0gW0NBUHJvcGVydHlBbmltYXRp
b24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlRnVuY3Rpb246
KV07Ci0gICAgcmV0dXJuIHNIYXZlVmFsdWVGdW5jdGlvbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi17Ci0gICAgbV9v
d25lciA9IG93bmVyOworICAgIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3duZXIob3duZXIpOwogICAg
IAogICAgIC8vIENoYW5nZSB0aGUgZGVsZWdhdGUncyBvd25lciBpZiBuZWVkZWQKICAgICBpZiAo
bV9kZWxlZ2F0ZSkKQEAgLTE1OSwxOCArMTcxLDggQEAgc3RhdGljIE5TU3RyaW5nKiB0b0NBRmls
dGVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5cGUgdHlwZSkKICAgICB9CiB9CiAKLVBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShMYXllclR5
cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKLX0K
LQotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlQ3VzdG9tLCBzdGF0
aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7Ci19Ci0KLVBs
YXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRm
b3JtTGF5ZXIqIGxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotICAgIDogbV9v
d25lcihvd25lcikKK1BsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKQorICAgIDogUGxhdGZvcm1DQUxheWVyKG93bmVyKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogICAgIGlmIChsYXllcikgewpAQCAtMjMwLDEzICsyMzIsMTMg
QEAgUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwg
UGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXQKICAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVy
KCkpIHsKICAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBhZG9wdFB0cihuZXcgUGxhdGZvcm1D
QUxheWVyTGlzdCgxKSk7CiAgICAgICAgIENBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJM
YXllciA9IFtzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tpbmdMYXllciAqPihtX2xheWVyLmdldCgp
KSB0aWxlQ29udGFpbmVyTGF5ZXJdOwotICAgICAgICAoKm1fY3VzdG9tU3VibGF5ZXJzKVswXSA9
IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciwgMCk7
CisgICAgICAgICgqbV9jdXN0b21TdWJsYXllcnMpWzBdID0gUGxhdGZvcm1DQUxheWVyTWFjOjpj
cmVhdGUodGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyLCAwKTsKICAgICB9CiAgICAgCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBj
b25zdAorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1hYzo6Y2xv
bmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUg
dHlwZTsKICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0yNTEsOCArMjUzLDggQEAgUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y2xvbmUoUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcikKICAgICAgICAgdHlwZSA9IExheWVyVHlwZUxheWVyOwogICAg
ICAgICBicmVhazsKICAgICB9OwotICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG5ld0xheWVy
ID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUodHlwZSwgb3duZXIpOwotCisgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZSh0eXBl
LCBvd25lcik7CisgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwog
ICAgIG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwogICAgIG5ld0xheWVyLT5zZXRBbmNo
b3JQb2ludChhbmNob3JQb2ludCgpKTsKQEAgLTI3OSwxMyArMjgxLDkgQEAgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKICAgICByZXR1cm4gbmV3TGF5ZXI7CiB9CiAKLVBsYXRmb3JtQ0FMYXllcjo6
flBsYXRmb3JtQ0FMYXllcigpCitQbGF0Zm9ybUNBTGF5ZXJNYWM6On5QbGF0Zm9ybUNBTGF5ZXJN
YWMoKQogewogICAgIFttX2xheWVyLmdldCgpIHNldFZhbHVlOm5pbCBmb3JLZXk6cGxhdGZvcm1D
QUxheWVyUG9pbnRlcl07Ci0KLSAgICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFsc28gY2xl
YXJzIGl0IGluIHRoZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IGF0dGVtcHRzIAotICAgIC8vIHRvIHVz
ZSB0aGUgR3JhcGhpY3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICBz
ZXRPd25lcigwKTsKICAgICAKICAgICAvLyBSZW1vdmUgdGhlIG93bmVyIHBvaW50ZXIgZnJvbSB0
aGUgZGVsZWdhdGUgaW4gY2FzZSB0aGVyZSBpcyBhIHBlbmRpbmcgYW5pbWF0aW9uU3RhcnRlZCBl
dmVudC4KICAgICBbc3RhdGljX2Nhc3Q8V2ViQW5pbWF0aW9uRGVsZWdhdGUqPihtX2RlbGVnYXRl
LmdldCgpKSBzZXRPd25lcjpuaWxdOwpAQCAtMjk0LDMxICsyOTIsMTMgQEAgUGxhdGZvcm1DQUxh
eWVyOjp+UGxhdGZvcm1DQUxheWVyKCkKICAgICAgICAgW3N0YXRpY19jYXN0PFdlYlRpbGVkQmFj
a2luZ0xheWVyICo+KG1fbGF5ZXIuZ2V0KCkpIGludmFsaWRhdGVdOwogfQogCi1QbGF0Zm9ybUNB
TGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5
ZXIpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgCi0gICAgLy8gUG9pbnRlciB0byBQbGF0Zm9ybUNBTGF5ZXIgaXMga2VwdCBpbiBhIGtleSBv
ZiB0aGUgQ0FMYXllcgotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyID0gbmls
OwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIHBsYXRmb3JtQ0FMYXllciA9
IHN0YXRpY19jYXN0PFBsYXRmb3JtQ0FMYXllcio+KFtbc3RhdGljX2Nhc3Q8Q0FMYXllcio+KHBs
YXRmb3JtTGF5ZXIpIHZhbHVlRm9yS2V5OnBsYXRmb3JtQ0FMYXllclBvaW50ZXJdIHBvaW50ZXJW
YWx1ZV0pOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICByZXR1cm4gcGxhdGZv
cm1DQUxheWVyOwotfQotCi1QbGF0Zm9ybUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2xheWVyLmdldCgpOwotfQotCi12b2lkIFBs
YXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
Cit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZh
bCBiZWdpblRpbWUpCiB7CiAgICAgaWYgKG1fb3duZXIpCiAgICAgICAgIG1fb3duZXItPnBsYXRm
b3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYmVnaW5UaW1lKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBk
aXJ0eVJlY3QpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgaWYgKGRp
cnR5UmVjdCkKQEAgLTMyOCwyNiArMzA4LDI2IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QpCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogICAgIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRz
Q2hhbmdlZCgpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNDaGFuZ2VkKCkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBz
ZXRDb250ZW50c0NoYW5nZWRdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAot
UGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnN1cGVybGF5ZXIoKSBjb25zdAorUGxh
dGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnN1cGVybGF5ZXIoKSBjb25zdAogewog
ICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXIoW21fbGF5ZXIuZ2V0KCkgc3VwZXJsYXllcl0pOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJs
YXllcl07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QmIGxpc3QpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXll
ckxpc3QmIGxpc3QpCiB7CiAgICAgLy8gU2hvcnQgY2lyY3VpdGluZyBoZXJlIG5vdCBvbmx5IGF2
b2lkcyB0aGUgYWxsb2NhdGlvbiBvZiBzdWJsYXllcnMsIGJ1dCBhdm9pZHMgPHJkYXI6Ly9wcm9i
bGVtLzczOTA3MTY+IChzZWUgYmVsb3cpCiAgICAgaWYgKGxpc3Quc2l6ZSgpID09IDApIHsKQEAg
LTM2NSw3ICszNDUsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0U3VibGF5ZXJzKGNvbnN0
IFBsYXRmb3JtQ0FMYXllckxpc3QmIGxpc3QpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyTWFjOjpyZW1vdmVBbGxTdWJsYXllcnMoKQogewogICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS83MzkwNzE2PjogLVtDQUxheWVyIHNldFN1YmxheWVy
czpdIGNyYXNoZXMgaWYgc3VibGF5ZXJzIGlzIGFuIGVtcHR5IGFycmF5LCBvciBuaWwsIHVuZGVy
IEdDLgogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwpAQCAtMzc3LDcgKzM1Nyw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZW1vdmVBbGxTdWJsYXllcnMoKQogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFwcGVuZFN1Ymxh
eWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YXBw
ZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKICAgICBBU1NFUlQobV9sYXllciAhPSBsYXllci0+bV9sYXllcik7CkBA
IC0zODUsNyArMzY1LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFwcGVuZFN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciogbGF5ZXIpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQog
Ci12b2lkIFBsYXRmb3JtQ0FMYXllcjo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBs
YXllciwgc2l6ZV90IGluZGV4KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6Omluc2VydFN1Ymxh
eWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIsIHNpemVfdCBpbmRleCkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBBU1NFUlQobV9sYXllciAhPSBsYXllci0+bV9sYXll
cik7CkBAIC0zOTMsNyArMzczLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6Omluc2VydFN1Ymxh
eWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIsIHNpemVfdCBpbmRleCkKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZXBsYWNlU3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6cmVwbGFjZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciog
cmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogICAgIEFTU0VSVChtX2xheWVyICE9IGxheWVyLT5tX2xheWVyKTsKQEAg
LTQwMSw3ICszODEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6cmVwbGFjZVN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciogcmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5ZQogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkb3B0U3VibGF5ZXJz
KFBsYXRmb3JtQ0FMYXllciogc291cmNlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFkb3B0
U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKQogewogICAgIC8vIFdvcmthcm91bmQg
Zm9yIDxyZGFyOi8vcHJvYmxlbS83MzkwNzE2PjogLVtDQUxheWVyIHNldFN1YmxheWVyczpdIGNy
YXNoZXMgaWYgc3VibGF5ZXJzIGlzIGFuIGVtcHR5IGFycmF5LCBvciBuaWwsIHVuZGVyIEdDLgog
ICAgIE5TQXJyYXkqIHN1YmxheWVycyA9IFtzb3VyY2UtPm1fbGF5ZXIuZ2V0KCkgc3VibGF5ZXJz
XTsKQEAgLTQxOSw3ICszOTksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJsYXll
cnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0
cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiBhbmltYXRpb24pCit2b2lkIFBsYXRmb3Jt
Q0FMYXllck1hYzo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9y
bUNBQW5pbWF0aW9uKiBhbmltYXRpb24pCiB7CiAgICAgLy8gQWRkIHRoZSBkZWxlZ2F0ZQogICAg
IGlmICghbV9kZWxlZ2F0ZSkgewpAQCAtNDM3LDE0ICs0MTcsMTQgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFu
aW1hdGlvbioKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCit2b2lk
IFBsYXRmb3JtQ0FMYXllck1hYzo6cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdl
dCgpIHJlbW92ZUFuaW1hdGlvbkZvcktleTprZXldOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5
ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Bhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyTWFjOjphbmltYXRpb25Gb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogcHJvcGVydHlBbmltYXRp
b24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oW21fbGF5ZXIuZ2V0KCkgYW5p
bWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmltYXRpb24pCkBAIC00NTIs
NDQgKzQzMiw0NCBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllcjo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYgawogICAgIHJldHVybiBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24pOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRNYXNrOmxheWVy
ID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDBdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmlzT3BhcXVlKCkgY29uc3QKK2Jvb2wg
UGxhdGZvcm1DQUxheWVyTWFjOjppc09wYXF1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xh
eWVyLmdldCgpIGlzT3BhcXVlXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1
ZShib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE9wYXF1ZShib29sIHZh
bHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdl
dCgpIHNldE9wYXF1ZTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQog
Ci1GbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyOjpib3VuZHMoKSBjb25zdAorRmxvYXRSZWN0IFBs
YXRmb3JtQ0FMYXllck1hYzo6Ym91bmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIu
Z2V0KCkgYm91bmRzXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhjb25z
dCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgIFttX2xheWVyLmdldCgpIHNldEJvdW5kczp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlv
bigpIGNvbnN0CitGbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyTWFjOjpwb3NpdGlvbigpIGNv
bnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFttX2xheWVyLmdldCgpIHBvc2l0aW9uXTsKICAg
ICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50LnksIFttX2xheWVyLmdldCgpIHpQ
b3NpdGlvbl0pOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKHZhbHVl
LngoKSwgdmFsdWUueSgpKV07CkBAIC00OTcsNyArNDc3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNo
b3JQb2ludCgpIGNvbnN0CitGbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyTWFjOjphbmNob3JQ
b2ludCgpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFttX2xheWVyLmdldCgpIGFuY2hv
clBvaW50XTsKICAgICBmbG9hdCB6ID0gMDsKQEAgLTUwNSw3ICs0ODUsNyBAQCBGbG9hdFBvaW50
M0QgUGxhdGZvcm1DQUxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0CiAgICAgcmV0dXJuIEZsb2F0
UG9pbnQzRChwb2ludC54LCBwb2ludC55LCB6KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllck1hYzo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRB
bmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSldOwpAQCAtNTEzLDEx
OSArNDkzLDExOSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
LVRyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllcjo6dHJhbnNmb3JtKCkgY29uc3QK
K1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllck1hYzo6dHJhbnNmb3JtKCkgY29u
c3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgdHJhbnNmb3JtXTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06dmFsdWVdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxh
eWVyOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OnN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4g
W21fbGF5ZXIuZ2V0KCkgc3VibGF5ZXJUcmFuc2Zvcm1dOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZh
bHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5zZm9ybTp2YWx1ZV07
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0SGlkZGVuKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0SGlk
ZGVuKGJvb2wgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0SGlkZGVuOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRHZW9tZXRyeUZsaXBwZWQoYm9v
bCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRHZW9tZXRyeUZsaXBwZWQoYm9v
bCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXll
ci5nZXQoKSBzZXRHZW9tZXRyeUZsaXBwZWQ6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmlzRG91YmxlU2lkZWQoKSBjb25z
dAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmlzRG91YmxlU2lkZWQoKSBjb25zdAogewogICAg
IHJldHVybiBbbV9sYXllci5nZXQoKSBpc0RvdWJsZVNpZGVkXTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldERvdWJsZVNpZGVkKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6c2V0RG91YmxlU2lkZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXREb3VibGVTaWRlZDp2YWx1ZV07CiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1ib29sIFBsYXRmb3JtQ0FMYXllcjo6
bWFza3NUb0JvdW5kcygpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllck1hYzo6bWFza3NUb0Jv
dW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIG1hc2tzVG9Cb3VuZHNd
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBz
ZXRNYXNrc1RvQm91bmRzOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9
CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAorYm9v
bCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFjY2VsZXJhdGVzRHJhd2luZygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFttX2xheWVyLmdldCgpIGFjY2VsZXJhdGVzRHJhd2luZ107CiB9CiAKLXZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wg
YWNjZWxlcmF0ZXNEcmF3aW5nKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIFttX2xheWVyLmdldCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzphY2NlbGVyYXRlc0RyYXdp
bmddOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotQ0ZUeXBlUmVmIFBsYXRm
b3JtQ0FMYXllcjo6Y29udGVudHMoKSBjb25zdAorQ0ZUeXBlUmVmIFBsYXRmb3JtQ0FMYXllck1h
Yzo6Y29udGVudHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBjb250ZW50
c107CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50cyhDRlR5cGVSZWYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzOnN0YXRpY19jYXN0PGlkPihjb25zdF9jYXN0PHZvaWQqPih2YWx1ZSkpXTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250
ZW50c1JlY3Q6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJU
eXBlIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xh
eWVyLmdldCgpIHNldE1pbmlmaWNhdGlvbkZpbHRlcjp0b0NBRmlsdGVyVHlwZSh2YWx1ZSldOwog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldE1hZ25pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0TWFn
bmlmaWNhdGlvbkZpbHRlcjp0b0NBRmlsdGVyVHlwZSh2YWx1ZSldOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIH0KIAotQ29sb3IgUGxhdGZvcm1DQUxheWVyOjpiYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAorQ29sb3IgUGxhdGZvcm1DQUxheWVyTWFjOjpiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBiYWNrZ3JvdW5kQ29sb3JdOwogfQog
Ci12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2
YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImIHZhbHVlKQogewogICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKICAgICB2YWx1ZS5n
ZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBv
bmVudHNbM10pOwpAQCAtNjM4LDE0ICs2MTgsMTQgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm9yZGVyV2lkdGgoZmxv
YXQgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQg
dmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Qm9yZGVyV2lkdGg6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9y
JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCb3JkZXJDb2xvcihjb25zdCBD
b2xvciYgdmFsdWUpCiB7CiAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwogICAgIHZhbHVlLmdl
dFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9u
ZW50c1szXSk7CkBAIC02NTgsMTIgKzYzOCwxMiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKIH0KIAotZmxvYXQgUGxhdGZvcm1DQUxheWVyOjpvcGFjaXR5KCkgY29uc3QKK2Zsb2F0
IFBsYXRmb3JtQ0FMYXllck1hYzo6b3BhY2l0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xh
eWVyLmdldCgpIG9wYWNpdHldOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3BhY2l0
eShmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRPcGFjaXR5KGZsb2F0
IHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVy
LmdldCgpIHNldE9wYWNpdHk6dmFsdWVdOwpAQCAtNjcxLDg4ICs2NTEsNjAgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEZpbHRlcnMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKICAgICBQbGF0Zm9ybUNBRmlsdGVy
czo6c2V0RmlsdGVyc09uTGF5ZXIodGhpcywgZmlsdGVycyk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpjb3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKiBzb3VyY2VMYXll
cikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpjb3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZv
cm1DQUxheWVyKiBzb3VyY2VMYXllcikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRGaWx0ZXJzOltzb3VyY2VMYXllci0+cGxhdGZvcm1M
YXllcigpIGZpbHRlcnNdXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9Ci0KLWJv
b2wgUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGFyZSBu
byBmaWx0ZXJzIHRvIGF2b2lkIG5lZWRsZXNzIHdvcmsKLSAgICBpZiAoIWZpbHRlcnMuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKLSAgICAgICAgc3dpdGNoIChm
aWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFOgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlZBTElEQVRFRF9DVVNUT006Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICAgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgY2FuIG9ubHkgaGFuZGxlIGRyb3Atc2hhZG93IGlzIGlmIGl0
J3MgbGFzdCBpbiB0aGUgbGlzdAotICAgICAgICAgICAgaWYgKGkgPCAoZmlsdGVycy5zaXplKCkg
LSAxKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiB0cnVlOwotfQogI2VuZGlmCiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldE5hbWU6dmFsdWVdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZyYW1lKGNv
bnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RnJhbWUo
Y29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRGcmFtZTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0U3BlZWQoZmxvYXQg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
U3BlZWQ6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lk
IFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBz
ZXRUaW1lT2Zmc2V0OnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
LWZsb2F0IFBsYXRmb3JtQ0FMYXllcjo6Y29udGVudHNTY2FsZSgpIGNvbnN0CitmbG9hdCBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSBjb250ZW50c1NjYWxlXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOnZhbHVlXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyOjp0aWxlZEJhY2tpbmcoKQorVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRp
bGVkQmFja2luZygpCiB7CiAgICAgaWYgKCF1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC03NjEsNyArNzEzLDcgQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNB
TGF5ZXI6OnRpbGVkQmFja2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxl
ZEJhY2tpbmddOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25vdXNseURpc3Bs
YXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc3Niw3ICs3MjgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1BVlBsYXllckxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXllckxheWVyKCkgY29uc3QKK0FWUGxheWVyTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllck1hYzo6cGxheWVyTGF5ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChbbV9sYXllci5nZXQo
KSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAgICAgcmV0dXJuIChB
VlBsYXllckxheWVyKiltX2xheWVyLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggMWZmZTI5Ny4uNWQwYzM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCkBAIC0zMiw3
ICszMiw3IEBACiAjaW5jbHVkZSAiRGVmV25kUHJvY1dpbmRvd0NsYXNzLmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaGFuZ2VzRmx1c2hlci5oIgogI2luY2x1ZGUgIkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyV2luLmgiCiAjaW5jbHVkZSAiV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSW5zdGFuY2VIYW5kbGUuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTEyMyw3
ICsxMjMsNyBAQCBQYXNzUmVmUHRyPENBQ0ZMYXllclRyZWVIb3N0PiBDQUNGTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKCkKIAogQ0FDRkxheWVyVHJlZUhvc3Q6OkNBQ0ZMYXllclRyZWVIb3N0KCkKICAg
ICA6IG1fY2xpZW50KDApCi0gICAgLCBtX3Jvb3RMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0
ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllciwgMCkpCisgICAgLCBtX3Jvb3RM
YXllcihQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVJvb3RMYXllciwgMCkpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9zaG91bGRGbHVzaFBl
bmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1faXNGbHVzaGluZ0xheWVy
Q2hhbmdlcyhmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXggMzU4NTNhNi4u
OWZlNzlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIlBsYXRmb3Jt
Q0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgogCiAjaW5jbHVkZSAi
QWJzdHJhY3RDQUNGTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTQwLDE0
ICs0MCwxNCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotYm9vbCBQbGF0Zm9ybUNB
TGF5ZXI6OmlzVmFsdWVGdW5jdGlvblN1cHBvcnRlZCgpCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihsYXllclR5cGUsIDAsIG93bmVyKSk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKQorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldp
bjo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpCiB7Ci0gICAgbV9vd25lciA9IG93bmVyOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGxhdGZvcm1DQUxheWVyV2luKExheWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwg
b3duZXIpKTsKIH0KIAogc3RhdGljIENGU3RyaW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpAQCAtODUsMTQgKzg1LDEzIEBAIHN0YXRpYyBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogaW50ZXJuKHZvaWQqIGxheWVyKQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCo+KENBQ0ZMYXllckdldFVzZXJE
YXRhKHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4obGF5ZXIpKSk7CiB9CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShMYXllclR5cGUgbGF5ZXJU
eXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHZvaWQqIHBsYXRm
b3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCitQbGF0Zm9ybUNBTGF5ZXIq
IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlQ3VzdG9t
LCBzdGF0aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7Cisg
ICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXll
cik7CisgICAgcmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwog
fQogCiBzdGF0aWMgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29udGV4dFJlZiBjb250ZXh0KQpAQCAtMTA4LDggKzEwNyw4IEBAIHN0YXRpYyB2b2lkIGxheW91
dFN1YmxheWVyc1Byb2MoQ0FDRkxheWVyUmVmIGNhTGF5ZXIpCiAgICAgICAgIGxheWVyLT5vd25l
cigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKGxheWVyKTsKIH0KIAot
UGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBt
X293bmVyKG93bmVyKQorUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpCisgICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCiB7CiAgICAgaWYgKGxh
eWVyKSB7CiAgICAgICAgIG1fbGF5ZXJUeXBlID0gTGF5ZXJUeXBlQ3VzdG9tOwpAQCAtMTI5LDcg
KzEyOCw3IEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgfQogfQogCi1QbGF0Zm9ybUNB
TGF5ZXI6On5QbGF0Zm9ybUNBTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1D
QUxheWVyV2luKCkKIHsKICAgICAvLyBUb3NzIGFsbCB0aGUga2lkcwogICAgIHJlbW92ZUFsbFN1
YmxheWVycygpOwpAQCAtMTM4LDI5ICsxMzcsMTYgQEAgUGxhdGZvcm1DQUxheWVyOjp+UGxhdGZv
cm1DQUxheWVyKCkKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4g
PSBpbnRlcm4odGhpcyk7CiAgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5nZXQoKSwg
MCk7CiAKLSAgICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFsc28gY2xlYXJzIGl0IGluIHRo
ZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IGF0dGVtcHRzIAotICAgIC8vIHRvIHVzZSB0aGUgR3JhcGhp
Y3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICBzZXRPd25lcigwKTsK
LQogICAgIENBQ0ZMYXllclJlbW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogCiAg
ICAgZGVsZXRlIGxheWVySW50ZXJuOwogfQogCi1QbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCi17Ci0gICAgaWYgKCFw
bGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXllcik7Ci0gICAg
cmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwotfQotCi1QYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBs
YXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29u
c3QKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgp
ID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAg
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXI7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIg
PSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAKICAgICBuZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24oKSk7CiAgICAgbmV3
TGF5ZXItPnNldEJvdW5kcyhib3VuZHMoKSk7CkBAIC0xODAsMTggKzE2NiwxMyBAQCBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQqIG93bmVyKQogICAgIHJldHVybiBuZXdMYXllcjsKIH0KIAotUGxhdGZvcm1MYXll
ciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9sYXllci5nZXQoKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnJv
b3RMYXllcigpIGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcldpbjo6cm9v
dExheWVyKCkgY29uc3QKIHsKICAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0KiBob3N0ID0g
bGF5ZXJUcmVlSG9zdEZvckxheWVyKHRoaXMpOwogICAgIHJldHVybiBob3N0ID8gaG9zdC0+cm9v
dExheWVyKCkgOiAwOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6YW5p
bWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCiB7CiAgICAgLy8gVXBkYXRl
IHN0YXJ0IHRpbWUgZm9yIGFueSBhbmltYXRpb24gbm90IHlldCBzdGFydGVkCiAgICAgQ0ZUaW1l
SW50ZXJ2YWwgY2FjZkJlZ2luVGltZSA9IGN1cnJlbnRUaW1lVG9NZWRpYVRpbWUoYmVnaW5UaW1l
KTsKQEAgLTIwNCwzNiArMTg1LDE5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25T
dGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKICAgICAgICAgbV9vd25lci0+cGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi1zdGF0aWMgdm9pZCBy
ZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKLXsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIENBQ0ZM
YXllckFkZEFuaW1hdGlvbihsYXllci0+cGxhdGZvcm1MYXllcigpLCBpdC0+a2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjplbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCkKLXsKLSAgICBy
ZXN1Ym1pdEFsbEFuaW1hdGlvbnModGhpcyk7Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXJMaXN0IGNo
aWxkcmVuOwotICAgIGludGVybih0aGlzKS0+Z2V0U3VibGF5ZXJzKGNoaWxkcmVuKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBjaGls
ZHJlbltpXS0+ZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRp
cnR5UmVjdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3Qp
OwogfQogICAgIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzQ29tbWl0KCkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyV2luOjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQWJzdHJhY3RDQUNG
TGF5ZXJUcmVlSG9zdCogaG9zdCA9IGxheWVyVHJlZUhvc3RGb3JMYXllcih0aGlzKTsKICAgICBp
ZiAoaG9zdCkKICAgICAgICAgaG9zdC0+bGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50c0NoYW5nZWQoKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldENvbnRlbnRzQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5v
IGVxdWl2YWxlbnQgb2Ygc2V0Q29udGVudHNDaGFuZ2VkIGluIENBQ0YuIEZvciBub3cgSSB3aWxs
CiAgICAgLy8gc2V0IGNvbnRlbnRzIHRvIDAgYW5kIHRoZW4gYmFjayB0byBpdHMgb3JpZ2luYWwg
dmFsdWUgdG8gc2VlIGlmIHRoYXQKQEAgLTI0NCw3ICsyMDgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0Q29udGVudHNDaGFuZ2VkKCkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNMYXlvdXQoKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldE5lZWRzTGF5b3V0KCkKIHsKICAgICBpZiAoIW1fb3duZXIgfHwgIW1fb3duZXIt
PnBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI1MywzOSArMjE3LDM5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0xh
eW91dCgpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGxhdGZvcm1DQUxheWVyKiBQbGF0
Zm9ybUNBTGF5ZXI6OnN1cGVybGF5ZXIoKSBjb25zdAorUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNB
TGF5ZXIoQ0FDRkxheWVyR2V0U3VwZXJsYXllcihtX2xheWVyLmdldCgpKSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIENBQ0ZMYXllclJlbW92ZUZy
b21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVy
TGlzdCYgbGlzdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllcnMoY29uc3Qg
UGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldFN1Ymxh
eWVycyhsaXN0KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVy
cygpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAg
ICBpbnRlcm4odGhpcyktPnJlbW92ZUFsbFN1YmxheWVycygpOwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjphcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQog
ewogICAgIC8vIFRoaXMgbXVzdCBiZSBpbiB0ZXJtcyBvZiBpbnNlcnRTdWJsYXllciBpbnN0ZWFk
IG9mIGEgZGlyZWN0IGNhbGwgc28gUGxhdGZvcm1DQUxheWVySW50ZXJuYWwgY2FuIG92ZXJyaWRl
LgogICAgIGluc2VydFN1YmxheWVyKGxheWVyLCBpbnRlcm4odGhpcyktPnN1YmxheWVyQ291bnQo
KSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjppbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6aW5z
ZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllciwgc2l6ZV90IGluZGV4KQogewogICAg
IGludGVybih0aGlzKS0+aW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4KTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5j
ZSwgUGxhdGZvcm1DQUxheWVyKiBuZXdMYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpy
ZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXll
ciogbmV3TGF5ZXIpCiB7CiAgICAgLy8gVGhpcyBtdXN0IG5vdCB1c2UgZGlyZWN0IGNhbGxzIHRv
IGFsbG93IFBsYXRmb3JtQ0FMYXllckludGVybmFsIHRvIG92ZXJyaWRlLgogICAgIEFTU0VSVF9B
UkcocmVmZXJlbmNlLCByZWZlcmVuY2UpOwpAQCAtMzA3LDcgKzI3MSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBs
YXRmb3JtQ0FMYXllCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJs
YXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCiB7CiAgICAgUGxhdGZvcm1D
QUxheWVyTGlzdCBzdWJsYXllcnM7CiAgICAgaW50ZXJuKHNvdXJjZSktPmdldFN1YmxheWVycyhz
dWJsYXllcnMpOwpAQCAtMzE2LDcgKzI4MCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9w
dFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKICAgICBzZXRTdWJsYXllcnMoc3Vi
bGF5ZXJzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwg
UGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQogewogICAgIC8vIEFkZCBpdCB0byB0aGUg
YW5pbWF0aW9uIGxpc3QKICAgICBtX2FuaW1hdGlvbnMuYWRkKGtleSwgYW5pbWF0aW9uKTsKQEAg
LTMzMCw3ICsyOTQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgICAgICBob3N0LT5h
ZGRQZW5kaW5nQW5pbWF0ZWRMYXllcih0aGlzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAg
ICAgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIGFuaW1hdGlvbiBsaXN0CiAgICAgbV9hbmltYXRpb25z
LnJlbW92ZShrZXkpOwpAQCAtMzQ0LDcgKzMwOCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpy
ZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiAgICAgc2V0TmVlZHNDb21t
aXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5
ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Bhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyV2luOjphbmltYXRpb25Gb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXkpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKGtleSk7CiAgICAgaWYg
KGl0ID09IG1fYW5pbWF0aW9ucy5lbmQoKSkKQEAgLTM1MywxNjAgKzMxNywxNjAgQEAgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGsKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBDQUNG
TGF5ZXJTZXRNYXNrKG1fbGF5ZXIuZ2V0KCksIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSA6IDApOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVy
Ojppc09wYXF1ZSgpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllcldpbjo6aXNPcGFxdWUoKSBj
b25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJJc09wYXF1ZShtX2xheWVyLmdldCgpKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1ZShib29sIHZhbHVlKQordm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW46OnNldE9wYXF1ZShib29sIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNl
dE9wYXF1ZShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0K
IAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0Zsb2F0UmVjdCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXll
ckdldEJvdW5kcyhtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+
c2V0Qm91bmRzKHZhbHVlKTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQogCi1GbG9hdFBvaW50
M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitGbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyV2luOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENB
Q0ZMYXllckdldFBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHJldHVybiBGbG9hdFBvaW50
M0QocG9pbnQueCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkp
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbihtX2xheWVy
LmdldCgpLCBDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSkpOwogICAgIENBQ0ZMYXll
clNldFpQb3NpdGlvbihtX2xheWVyLmdldCgpLCB2YWx1ZS56KCkpOwogICAgIHNldE5lZWRzQ29t
bWl0KCk7CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkg
Y29uc3QKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuY2hvclBvaW50KCkgY29u
c3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0QW5jaG9yUG9pbnQobV9sYXll
ci5nZXQoKSk7CiAgICAgZmxvYXQgeiA9IENBQ0ZMYXllckdldEFuY2hvclBvaW50WihtX2xheWVy
LmdldCgpKTsKICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50LnksIHopOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFuY2hvclBvaW50KG1f
bGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKSk7CiAgICAgQ0FD
RkxheWVyU2V0QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnooKSk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVy
Ojp0cmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVy
V2luOjp0cmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRUcmFuc2Zv
cm0obV9sYXllci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7
CiAgICAgQ0FDRkxheWVyU2V0VHJhbnNmb3JtKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBz
ZXROZWVkc0NvbW1pdCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5
ZXI6OnN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRm
b3JtQ0FMYXllcldpbjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBD
QUNGTGF5ZXJHZXRTdWJsYXllclRyYW5zZm9ybShtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVy
U2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRz
Q29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRkZW4oYm9vbCB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRIaWRkZW4oYm9vbCB2YWx1ZSkKIHsKICAg
ICBDQUNGTGF5ZXJTZXRIaWRkZW4obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRz
Q29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRHZW9tZXRyeUZsaXBwZWQo
Ym9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRHZW9tZXRyeUZsaXBwZWQo
Ym9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRHZW9tZXRyeUZsaXBwZWQobV9sYXllci5n
ZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1D
QUxheWVyOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luOjpp
c0RvdWJsZVNpZGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVySXNEb3VibGVTaWRl
ZChtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldERvdWJsZVNp
ZGVkKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0RG91YmxlU2lkZWQo
Ym9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXREb3VibGVTaWRlZChtX2xheWVyLmdldCgp
LCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5
ZXI6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46Om1hc2tz
VG9Cb3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRNYXNrc1RvQm91bmRz
KG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFza3NUb0Jv
dW5kcyhib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1hc2tzVG9Cb3Vu
ZHMoYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRNYXNrc1RvQm91bmRzKG1fbGF5ZXIu
Z2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1ib29sIFBsYXRmb3Jt
Q0FMYXllcjo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVy
V2luOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQogewogfQog
Ci1DRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50cygpIGNvbnN0CitDRlR5cGVSZWYg
UGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZM
YXllckdldENvbnRlbnRzKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldENvbnRlbnRzKENGVHlwZVJlZiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRDb250ZW50
cyhtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldENvbnRlbnRzUmVjdChtX2xheWVyLmdldCgp
LCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewog
ICAgIENBQ0ZMYXllclNldE1pbmlmaWNhdGlvbkZpbHRlcihtX2xheWVyLmdldCgpLCB0b0NBQ0ZG
aWx0ZXJUeXBlKHZhbHVlKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRNYWduaWZp
Y2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewogICAgIENBQ0ZMYXll
clNldE1hZ25pZmljYXRpb25GaWx0ZXIobV9sYXllci5nZXQoKSwgdG9DQUNGRmlsdGVyVHlwZSh2
YWx1ZSkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUNvbG9yIFBsYXRmb3JtQ0FMYXll
cjo6YmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFBsYXRmb3JtQ0FMYXllcldpbjo6YmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0QmFja2dyb3Vu
ZENvbG9yKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewogICAgIENHRmxvYXQg
Y29tcG9uZW50c1s0XTsKICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVu
dHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwpAQCAtNTE4LDEzICs0ODIsMTMg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYg
dmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRo
KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkK
IHsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0UkdCQShjb21wb25l
bnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKQEAg
LTUzNiwxMiArNTAwLDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihj
b25zdCBDb2xvciYgdmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotZmxvYXQgUGxh
dGZvcm1DQUxheWVyOjpvcGFjaXR5KCkgY29uc3QKK2Zsb2F0IFBsYXRmb3JtQ0FMYXllcldpbjo6
b3BhY2l0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldE9wYWNpdHkobV9sYXll
ci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZh
bHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7
CiAgICAgQ0FDRkxheWVyU2V0T3BhY2l0eShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKQEAgLTU0OSw1NyArNTEzLDQ3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKQogewogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNGcm9tKGNvbnN0
IFBsYXRmb3JtQ0FMYXllciopCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6Y29weUZpbHRlcnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopCiB7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVy
OjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgQ0FD
RkxheWVyU2V0TmFtZShtX2xheWVyLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0cmluZygpLmdldCgp
KTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpz
ZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0
RnJhbWUodmFsdWUpOwogICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRTcGVlZChmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpz
ZXRTcGVlZChmbG9hdCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRTcGVlZChtX2xheWVyLmdl
dCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKIHsKICAgICBD
QUNGTGF5ZXJTZXRUaW1lT2Zmc2V0KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVk
c0NvbW1pdCgpOwogfQogCi1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAorZmxvYXQgUGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gMTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzU2Nh
bGUoZmxvYXQpCi17Ci19Ci0KLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyOjp0aWxlZEJh
Y2tpbmcoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQp
CiB7Ci0gICAgcmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03MTEsNyArNjY1LDcg
QEAgc3RhdGljIHZvaWQgcHJpbnRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBp
bnQgaW5kZW50KQogICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjpwcmludFRyZWUoKSBjb25zdAordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnBy
aW50VHJlZSgpIGNvbnN0CiB7CiAgICAgLy8gUHJpbnQgaGVhZGluZyBpbmZvCiAgICAgQ0dSZWN0
IHJvb3RCb3VuZHMgPSBib3VuZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGEwZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5o
CkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxheWVyV2luX2gKKyNk
ZWZpbmUgUGxhdGZvcm1DQUxheWVyV2luX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBGSU5BTCA6IHB1YmxpYyBQbGF0Zm9ybUNB
TGF5ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4g
Y3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgCisgICAgflBsYXRmb3JtQ0FMYXll
cldpbigpOworCisgICAgdmlydHVhbCBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0ID0gMCkgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNDaGFuZ2VkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtQ0FMYXllciogc3VwZXJsYXllcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciosIHNpemVfdCBpbmRleCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5
ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBj
b25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGFkb3B0U3VibGF5ZXJzKFBs
YXRmb3JtQ0FMYXllciogc291cmNlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRB
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFu
aW1hdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwg
YmVnaW5UaW1lKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3Jt
Q0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1
YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1
YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SGlkZGVuKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc0RvdWJsZVNpZGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dERvdWJsZVNpZGVkKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIG1hc2tzVG9C
b3VuZHMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5k
cyhib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmco
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZp
bHRlclR5cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmls
dGVyKEZpbHRlclR5cGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVy
V2lkdGgoZmxvYXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9y
KGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJ
REU7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRl
cnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBj
b3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYK
KworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERSB7IHJldHVybiBudWxscHRyOyB9CisgICAg
CisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0xheW91dCgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpIE9WRVJSSURFOworCisjaWZuZGVmIE5ERUJVRworICAg
IHZpcnR1YWwgdm9pZCBwcmludFRyZWUoKSBjb25zdCBPVkVSUklERTsKKyNlbmRpZgorCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1D
QUxheWVyV2luKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4+IG1fYW5pbWF0aW9uczsKK307CisKK30KKworI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFBsYXRmb3JtQ0FMYXll
cldpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0M0RXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNwcAppbmRleCA2YWJiMDQ5Li4wNWUxNTA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0M0RXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBVU0UoM0Rf
R1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllcldpbi5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC04NSw3ICs4Niw3IEBAIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzLCBICiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICNpZiBVU0Uo
Q0EpCi0gICAgbV93ZWJHTExheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVMYXllciwgMCk7CisgICAgbV93ZWJHTExheWVyID0gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgMCk7CiAj
ZW5kaWYKIAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAppbmRleCA5ZGQyNWYyLi5lOTExMzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCkBAIC02Miw3ICs2Miw3IEBACiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllcldpbi5oIgogI2luY2x1ZGUgIldLQ0FJbWFnZVF1ZXVlLmgiCiAjZW5kaWYKIApA
QCAtMTE5MywxNCArMTE5MywxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6OmNyZWF0ZUxheWVyRm9yTW92aWUoKQogCiAgICAgLy8gQ3JlYXRlIGEgUGxh
dGZvcm1DQUxheWVyIHdoaWNoIHdpbGwgdHJhbnNmb3JtIHRoZSBjb250ZW50cyBvZiB0aGUgdmlk
ZW8gbGF5ZXIKICAgICAvLyB3aGljaCBpcyBpbiBtX3F0VmlkZW9MYXllci4KLSAgICBtX3RyYW5z
Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbV9sYXllckNsaWVudC5nZXQoKSk7CisgICAgbV90cmFuc2Zvcm1MYXllciA9
IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5
ZXIsIG1fbGF5ZXJDbGllbnQuZ2V0KCkpOwogICAgIGlmICghbV90cmFuc2Zvcm1MYXllcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYW5jaG9yZWQgaW4gdGhl
IHRvcCBsZWZ0LgogICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgpKTsKIAotICAgIG1fcXRWaWRlb0xheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgMCk7CisgICAgbV9xdFZpZGVvTGF5ZXIg
PSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCAwKTsKICAgICBpZiAoIW1fcXRWaWRlb0xheWVyKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwppbmRleCAxNWI1YTU1Li42MjFiYTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTMtMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyKToKKyAgICAgICAgSW5jbHVkZSBQbGF0Zm9ybUNBTGF5ZXJXaW4u
aCBhbmQgZXhwbGljaXRseSBtYWtlIFBsYXRmb3JtQ0FMYXllcldpbnMgaGVyZS4KKwogMjAxMy0x
MC0xMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHVuaXF1
ZV9wdHIgaW5zdGVhZCBvZiBkZWxldGUgaW4gYSBmZXcgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCmluZGV4IGZiNDc0NjYuLmVhMDEx
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
Y3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNBTGF5ZXJXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRSdW4uaD4KICNp
bmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAj
aW5jbHVkZSA8d2luZG93c3guaD4KQEAgLTI0OCw3ICsyNDgsNyBAQCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKCkKICAgICAsIG1fdGltZXIodGhp
cywgJkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9sYXllckNsaWVudChhZG9wdFB0cihuZXcgTGF5
ZXJDbGllbnQodGhpcykpKQotICAgICwgbV9yb290Q2hpbGQoUGxhdGZvcm1DQUxheWVyOjpjcmVh
dGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbV9sYXllckNsaWVudC5nZXQoKSkp
CisgICAgLCBtX3Jvb3RDaGlsZChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgpKSkKICNlbmRpZgogICAg
ICwgbV9mdWxsc2NyZWVuV2luZG93KGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxs
c2NyZWVuV2luZG93KHRoaXMpKSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214128</attachid>
            <date>2013-10-13 22:49:28 -0700</date>
            <delta_ts>2013-10-14 11:40:48 -0700</delta_ts>
            <desc>take two</desc>
            <filename>virtualize.diff</filename>
            <type>text/plain</type>
            <size>93248</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NWQwMWNiLi5iMjU5MjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTMtMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9y
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIHNldEdlb21ldHJ5Rmxp
cHBlZCBpcyBvbiBQbGF0Zm9ybUNBTGF5ZXJNYWMgbm93LgorCisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgIEFkZCBQbGF0Zm9ybUNBTGF5ZXIuY3BwLCBQbGF0
Zm9ybUNBTGF5ZXJXaW4uaCwgYW5kIGxldCBWUyBkbyBpdHMKKyAgICAgICAgdGhpbmcgd2l0aCBz
b21lIG90aGVyIGZpbGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgUGxhdGZvcm1DQUxheWVyLmNwcCBhbmQgUGxhdGZvcm1DQUxh
eWVyTWFjLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVZGV3JhcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIE1ha2UgYSBQbGF0Zm9ybUNBTGF5
ZXJXaW4gZXhwbGljaXRseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0
ZVBsYXRmb3JtQ0FMYXllcik6CisgICAgICAgIEFkZGVkLiBEZWNpZGUgd2hldGhlciB0byBtYWtl
IGEgUGxhdGZvcm1DQUxheWVye01hYywgV2lufSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0uCisgICAg
ICAgIExhdGVyLCB3ZSB3aWxsIGRlY2lkZSBiZXR3ZWVuIG90aGVyIHN1YmNsYXNzZXMgYmFzZWQg
b24gb3RoZXIgdGhpbmdzLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6Okdy
YXBoaWNzTGF5ZXJDQSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENv
bnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb01lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIpOgorICAgICAgICBVc2UgY3JlYXRlUGxh
dGZvcm1DQUxheWVyIGluc3RlYWQgb2YgUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgSW5j
bHVkZSBQbGF0Zm9ybUNBTGF5ZXIuaCBoZXJlIHNvIHdlIGNhbiBnZXQgdGhlIExheWVyVHlwZSBl
bnVtLgorICAgICAgICAoTk9URS10by1iZS1yZW1vdmVkOiBpZiB0aGVyZSdzIGEgYmV0dGVyIHdh
eSB0byBkbyB0aGlzLCBJJ20gb3BlbiB0bworICAgICAgICBzdWdnZXN0aW9uczsgSSBjb3VsZG4n
dCBwdXp6bGUgb3V0IG5lc3RlZCAnZW51bSBjbGFzcycgc3R1ZmYpLgorCisgICAgICAgIEFkZCB0
aGUgY3JlYXRlUGxhdGZvcm1DQUxheWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaDoKKyAgICAgICAgRnJpZW5kIHRoZSBzdWJjbGFzc2Vz
IHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjp+UGxhdGZvcm1D
QUxheWVyKToKKyAgICAgICAgUHVsbCB0aGUgc2hhcmVkIHBhcnQgb2YgdGhlIFBsYXRmb3JtQ0FM
YXllciBkZXN0cnVjdG9yIG91dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6c2V0T3duZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgor
ICAgICAgICBWaXJ0dWFsaXplIGFsbCB0aGUgdGhpbmdzLiBNb3ZlIHBsYXRmb3JtIHNwZWNpZmlj
IG1lbWJlcnMgdG8gdGhlaXIgbmV3IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW06CisgICAgICAgIE1v
dmUgdGhlIFBMQVRGT1JNKE1BQykgaW1wbGVtZW50YXRpb25zIGZyb20gUGxhdGZvcm1DQUxheWVy
IHRvIFBsYXRmb3JtQ0FMYXllck1hYy4KKworICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUNBTGF5ZXIpOgorICAgICAgICBUaGUgcGxhdGZvcm1DQUxheWVyIGxvb2t1cCBmdW5jdGlv
biBpcyBzdGF0aWMgb24gUGxhdGZvcm1DQUxheWVyLCBzbyBpdCBjYW4ndAorICAgICAgICBiZSBt
b3ZlZCB0byB0aGUgc3ViY2xhc3Nlcy4gSXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgaW4gdGhlIGZ1
dHVyZSB0byBtb3ZlIHRvd2FyZHMKKyAgICAgICAgYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBtZWNo
YW5pc20gZm9yIGxvb2tpbmcgdXAgUGxhdGZvcm1DQUxheWVycyBmcm9tIFBsYXRmb3JtTGF5ZXJz
LAorICAgICAgICBhbmQgdG8gYXZvaWQgbmVlZGluZyB0byBkbyB0aGlzIGFzIG9mdGVuIGFzIHdl
IGRvIG5vdy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NB
Q0ZMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQ0ZMYXllclRyZWVIb3N0
OjpDQUNGTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6CisgICAgICAgIE1vdmUgdGhlIFBMQVRGT1JNKFdJTikg
aW1wbGVtZW50YXRpb25zIGZyb20gUGxhdGZvcm1DQUxheWVyIHRvIFBsYXRmb3JtQ0FMYXllcldp
bi4KKworICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUpOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIpOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmg6IEFkZGVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3JlYXRlTGF5ZXJGb3JNb3ZpZSk6CisgICAgICAgIElu
Y2x1ZGUgUGxhdGZvcm1DQUxheWVyV2luLmggYW5kIGV4cGxpY2l0bHkgbWFrZSBQbGF0Zm9ybUNB
TGF5ZXJXaW5zIGhlcmUuCisKIDIwMTMtMTAtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIE1vdmUgcG9zaXRpb25Gb3JQb2ludCB0byBSZW5kZXJUZXh0TGlu
ZUJveGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGE2YWRjOWIuLjhjMGEwODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCkBAIC00ODYsNyArNDg2LDYgQEAgX19aTjdXZWJDb3JlMTVIaXRUZXN0TG9j
YXRpb24xMnJlY3RGb3JQb2ludEVSS05TXzExTGF5b3V0UG9pbnRFampqagogX19aTjdXZWJDb3Jl
MTVKU0RPTVdpbmRvd0Jhc2U4Y29tbW9uVk1FdgogX19aTjdXZWJDb3JlMTVQYXN0ZWJvYXJkSW1h
Z2VDMUV2CiBfX1pON1dlYkNvcmUxNVBhc3RlYm9hcmRJbWFnZUQxRXYKLV9fWk43V2ViQ29yZTE1
UGxhdGZvcm1DQUxheWVyMThzZXRHZW9tZXRyeUZsaXBwZWRFYgogX19aTjdXZWJDb3JlMTVQcm90
ZWN0aW9uU3BhY2VDMUVSS04zV1RGNlN0cmluZ0VpTlNfMjVQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJU
eXBlRVM0X05TXzM1UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVFCiBfX1pON1dl
YkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRXYKIF9fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0
MjFodHRwUGlwZWxpbmluZ0VuYWJsZWRFdgpAQCAtNjE0LDYgKzYxMyw3IEBAIF9fWk43V2ViQ29y
ZTE3b3BlblRlbXBvcmFyeUZpbGVFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTE3c2V0
Q29va2llc0Zyb21ET01FUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVf
UktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwK
IF9fWk43V2ViQ29yZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVSTlNfMTVET01X
cmFwcGVyV29ybGRFCitfX1pON1dlYkNvcmUxOFBsYXRmb3JtQ0FMYXllck1hYzE4c2V0R2VvbWV0
cnlGbGlwcGVkRWIKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTB1bmlxdWVOYW1l
RXYKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNidWZmZXJGb3JUeXBlRVJLTjNX
VEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxM3N0cmluZ0ZvclR5
cGVFUktOM1dURjZTdHJpbmdFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagppbmRleCAwZDFjOGZmLi43Yzc5ODM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTcxNzAsNiArNzE3MCw3IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRp
b25cY2ZcSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWQ0YuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3VuZGF0aW9uXGNmXEluYmFuZFRleHRU
cmFja1ByaXZhdGVMZWdhY3lBVkNGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNh
XFBsYXRmb3JtQ0FMYXllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHTENvbnRleHQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAiPgog
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTE4
NjU2LDYgKzE4NjU3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGF2Zm91bmRhdGlvblxjZlxJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZDRi5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3Vu
ZGF0aW9uXEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXFBsYXRmb3JtQ0FGaWx0ZXJzLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxhdGZv
cm1DQUxheWVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xHTENvbnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5oIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwppbmRleCA3ZDIwYjZhLi4zNmFjMDFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBA
IC02OTA3LDYgKzY5MDcsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
bWVkaWFjb250cm9sc1xNZWRpYUNvbnRyb2xzSG9zdC5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1
bGVzXG1lZGlhY29udHJvbHM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmlkVGVtcGxhdGVWYWx1ZS5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2FcUGxh
dGZvcm1DQUxheWVyLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxDb29yZGluYXRl
cy5oIj4KQEAgLTE0NTE3LDYgKzE0NTIzLDEyIEBACiAgICAgICA8RmlsdGVyPkRlcml2ZWRTb3Vy
Y2VzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcVXNlckFnZW50U2NyaXB0cy5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cY3NzXENTU0dyaWRUZW1wbGF0ZVZhbHVlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dExpbmVCb3hlcy5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxh
dGZvcm1DQUxheWVyV2luLmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3
aW48L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3Jv
dXA+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWFk
NjJlMi4uZjA1MGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtOTUwLDYgKzk1MCw4IEBACiAJCTJENUE1OTMxMTUyNTI1RDAw
MDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmll
bnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVC
QzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICov
OyB9OwogCQkyRDZFNDY4NDE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0Njgy
MTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OworCQkyRDcw
QkExMzE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggKi87IH07CisJCTJENzBCQTE1MTgwNzRGODYwMDAx
OTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FM
YXllci5jcHAgKi87IH07CiAJCTJEODI4N0Y2MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ4Mjg3RjQxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5jcHAgKi87IH07CiAJ
CTJEODI4N0Y3MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODI4N0Y1MTZFNEEwMzgwMDg2
QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyRDhGRUJEQzE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3Nm
YWRlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ4RkVCREExNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmNwcCAqLzsg
fTsKQEAgLTc0MjksNiArNzQzMSw4IEBACiAJCTJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBT
ZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ1QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5Vmlv
bGF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5Vmlv
bGF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZFNDY4MjE3
RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9y
bUNBTGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1D
QUxheWVyTWFjLmg7IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAvKiBQbGF0Zm9y
bUNBTGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGxhdGZv
cm1DQUxheWVyLmNwcDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEODI4N0Y0MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9j
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGl0VGVzdExv
Y2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4Mjg3RjUxNkU0QTAz
ODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIaXRUZXN0TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQ4RkVCREExNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Nyb3NzZmFkZVZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjgzLDYgKzE0Njg3LDcgQEAKIAkJCQk0OTU4
NzgxRjEyQTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSAqLywKIAkJ
CQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi8s
CiAJCQkJNDk1ODc4MjAxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSAq
LywKKwkJCQkyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmgg
Ki8sCiAJCQkJMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8s
CiAJCQkJMUFBNzE2MDgxNDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovLAog
CQkJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICov
LApAQCAtMTQ3MjcsNiArMTQ3MzIsNyBAQAogCQkJCTI5MTdCNTYwMTQ3MzQ5NkMwMDUyQzlEMCAv
KiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggKi8sCiAJCQkJNDk5QjNFREMxMjhEQjUwMTAw
RTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCAqLywKIAkJCQkwRjEzMTYzRDE2RUQwQ0M4
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLywKKwkJCQkyRDcwQkExNDE4MDc0Rjg1
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLywKIAkJCQk0OTlCM0VDMzEyOENDQzQ3
MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmggKi8sCiAJCQkJNDkzRTVFMDgxMkQ2NDIwNTAw
MDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oICovLAogCQkJCTQ5NEJDNDBDMTJBRURE
OUUwMDc0M0JEMiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcCAqLywKQEAgLTI0NTI5LDYg
KzI0NTM1LDcgQEAKIAkJCQkyRTQzNDY1MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVuTG9v
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MjA4OTkxNDdEMzVGOTAwMTBCQzA2IC8qIFdvcmtl
clJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBNjQzRjIwRUMwOTcyNTAwNzc5
NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENzBC
QTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUYzNDc0MkU5MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQjYxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRD
SWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlG
RDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTg3LDYgKzI1
NTk0LDcgQEAKIAkJCQk0OUVDRUI2RjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA0RDBBMTU0RjA5MDAwQTQyMzQgLyogRml4
ZWRUYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2ODBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDcwQkExNTE4MDc0
Rjg2MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
RDU4RUI4MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IGI5NWU5MDQu
LmJiNDQ4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2VuZGlmCiAj
aW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgogI2luY2x1ZGUgIlNv
ZnRMaW5raW5nLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCkBAIC0xNTkyLDcgKzE1OTIs
NyBAQCBQbGF0Zm9ybUxheWVyKiBBVkZXcmFwcGVyOjpwbGF0Zm9ybUxheWVyKCkKICAgICBpZiAo
IW1fbGF5ZXJDbGllbnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV92aWRlb0xheWVyV3Jh
cHBlciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXIsIG1fbGF5ZXJDbGllbnQuZ2V0KCkpOworICAgIG1fdmlkZW9MYXllcldyYXBwZXIgPSBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBtX2xheWVyQ2xpZW50LmdldCgpKTsKICAgICBpZiAoIW1fdmlkZW9MYXllcldyYXBwZXIpCiAg
ICAgICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA3MTI0YTBmLi42MmE2M2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKQEAgLTQ4LDkgKzQ4LDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVy
TWFjLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2VuZGlmCiAKKyNp
ZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luLmgiCisjZW5kaWYK
KwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjgwLDYg
KzI4NSwyNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0bwogCiAgICAgcmV0dXJuIGZhY3Rvcnkt
PmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKIH0KKyAgICAKK1Bhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1
cm4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUobGF5ZXJUeXBlLCBvd25lcik7CisjZW5kaWYK
K30KKyAgICAKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmNy
ZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqIG93bmVyKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4g
UGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUocGxhdGZvcm1MYXllciwgb3duZXIpOworI2VsaWYg
UExBVEZPUk0oV0lOKQorICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShwbGF0
Zm9ybUxheWVyLCBvd25lcik7CisjZW5kaWYKK30KIAogR3JhcGhpY3NMYXllckNBOjpHcmFwaGlj
c0xheWVyQ0EoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXll
cihjbGllbnQpCkBAIC0yOTYsNyArMzE5LDcgQEAgR3JhcGhpY3NMYXllckNBOjpHcmFwaGljc0xh
eWVyQ0EoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgICAgICBtX2lzUGFnZVRpbGVk
QmFja2luZ0xheWVyID0gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2xheWVyID0gUGxhdGZvcm1DQUxh
eWVyOjpjcmVhdGUobGF5ZXJUeXBlLCB0aGlzKTsKKyAgICBtX2xheWVyID0gY3JlYXRlUGxhdGZv
cm1DQUxheWVyKGxheWVyVHlwZSwgdGhpcyk7CiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzU2NhbGVDaGFuZ2VkKTsKIH0KIApAQCAtNzgxLDcgKzgwNCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiAKICAgICBpZiAobV9jb250ZW50c1NvbGlkQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIG1f
Y29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yQmFja2dyb3VuZENvbG9yOwot
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVy
ID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIs
IHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROYW1l
KCJCYWNrZ3JvdW5kIENvbG9yIExheWVyIik7CiAjZW5kaWYKQEAgLTg0Nyw3ICs4NzAsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1l
ZGlhTGF5ZXIpCiAgICAgLy8gdGhlIGNyZWF0b3Igb2YgdGhlIHJhdyBsYXllciBpcyB1c2luZyBp
dCBmb3Igc29tZSBvdGhlciBwdXJwb3NlLgogICAgIC8vIEZvciBub3cgd2UgZG9uJ3Qgc3VwcG9y
dCBzdWNoIGEgY2FzZS4KICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciA9IFBs
YXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1lZGlhTGF5ZXIpOwotICAgIG1fY29udGVu
dHNMYXllciA9IG1lZGlhTGF5ZXIgPyAocGxhdGZvcm1DQUxheWVyID8gcGxhdGZvcm1DQUxheWVy
IDogUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUobWVkaWFMYXllciwgdGhpcykpIDogMDsKKyAgICBt
X2NvbnRlbnRzTGF5ZXIgPSBtZWRpYUxheWVyID8gKHBsYXRmb3JtQ0FMYXllciA/IHBsYXRmb3Jt
Q0FMYXllciA6IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihtZWRpYUxheWVyLCB0aGlzKSkgOiAwOwog
ICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBtZWRpYUxheWVyID8gQ29udGVudHNMYXllckZv
ck1lZGlhIDogTm9Db250ZW50c0xheWVyOwogCiAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsK
QEAgLTg2MCw3ICs4ODMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIC8vIENyZWF0ZSB0aGUgUGxhdGZvcm1DQUxheWVyIHRvIHdyYXAgdGhlIGluY29taW5nIGxh
eWVyCi0gICAgbV9jb250ZW50c0xheWVyID0gY2FudmFzTGF5ZXIgPyBQbGF0Zm9ybUNBTGF5ZXI6
OmNyZWF0ZShjYW52YXNMYXllciwgdGhpcykgOiAwOworICAgIG1fY29udGVudHNMYXllciA9IGNh
bnZhc0xheWVyID8gY3JlYXRlUGxhdGZvcm1DQUxheWVyKGNhbnZhc0xheWVyLCB0aGlzKSA6IDA7
CiAgICAgCiAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IGNhbnZhc0xheWVyID8gQ29udGVu
dHNMYXllckZvckNhbnZhcyA6IE5vQ29udGVudHNMYXllcjsKIApAQCAtMTA5OCw3ICsxMTIxLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29uc3QgQ29t
bWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb24KICAgICAgICAgc3RhdGljIENvbG9yIHdhc2hGaWxs
Q29sb3IoMjU1LCAwLCAwLCA1MCk7CiAgICAgICAgIHN0YXRpYyBDb2xvciB3YXNoQm9yZGVyQ29s
b3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKLSAgICAgICAgbV92aXNpYmxlVGlsZVdhc2hM
YXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXIsIHRoaXMpOworICAgICAgICBtX3Zpc2libGVUaWxlV2FzaExheWVyID0gY3JlYXRlUGxh
dGZvcm1DQUxheWVyKGNyZWF0ZVBsYXRmb3JtQ0FMYXllciwgdGhpcyk7CiAgICAgICAgIFN0cmlu
ZyBuYW1lID0gU3RyaW5nOjpmb3JtYXQoIlZpc2libGUgVGlsZSBXYXNoIExheWVyICVwIiwgbV92
aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKTsKICAgICAgICAgbV92aXNpYmxl
VGlsZVdhc2hMYXllci0+c2V0TmFtZShuYW1lKTsKICAgICAgICAgbV92aXNpYmxlVGlsZVdhc2hM
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKQEAgLTE2MDYsNyAr
MTYyOSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3Ry
dWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlKQogICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5
ZXIgPSAwOwogICAgICAgICAKICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikgewotICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyLCB0aGlzKTsKKyAgICAgICAgICAg
IG1fc3RydWN0dXJhbExheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsIHRoaXMpOwogICAgICAgICAgICAgc3RydWN0dXJh
bExheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTYxNCw3
ICsxNjM3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihT
dHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAgICAgICAgICBtX3N0cnVjdHVyYWxM
YXllciA9IDA7CiAKICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikgewotICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExh
eWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5
ZXIsIHRoaXMpOwogICAgICAgICAgICAgc3RydWN0dXJhbExheWVyQ2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNzc4LDcgKzE4MDEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlQ29udGVudHNJbWFnZSgpCiB7CiAgICAgaWYgKG1fcGVuZGluZ0NvbnRlbnRzSW1h
Z2UpIHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpIHsKLSAgICAgICAgICAg
IG1fY29udGVudHNMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0g
Y3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRo
aXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0TmFt
ZSgiSW1hZ2UgTGF5ZXIiKTsKICNlbmRpZgpAQCAtMTg1OSw3ICsxODgyLDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdHMoKQogICAgIGJvb2wgZ2FpbmVkT3JMb3N0
Q2xpcHBpbmdMYXllciA9IGZhbHNlOwogICAgIGlmICghbV9jb250ZW50c0NsaXBwaW5nUmVjdC5j
b250YWlucyhtX2NvbnRlbnRzUmVjdCkpIHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRzQ2xpcHBp
bmdMYXllcikgewotICAgICAgICAgICAgbV9jb250ZW50c0NsaXBwaW5nTGF5ZXIgPSBQbGF0Zm9y
bUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsK
KyAgICAgICAgICAgIG1fY29udGVudHNDbGlwcGluZ0xheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOwogICAgICAgICAgICAg
bV9jb250ZW50c0NsaXBwaW5nTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAgICAgICAg
ICAgICBtX2NvbnRlbnRzQ2xpcHBpbmdMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgp
KTsKICNpZm5kZWYgTkRFQlVHCkBAIC0yODk4LDcgKzI5MjEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpCiAgICAgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlID0gdXNlVGlsZWRMYXllciA/IFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIgOiBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVdlYkxheWVyOwogI2VuZGlmCiAKLSAgICBtX2xheWVyID0gUGxhdGZvcm1DQUxh
eWVyOjpjcmVhdGUobGF5ZXJUeXBlLCB0aGlzKTsKKyAgICBtX2xheWVyID0gY3JlYXRlUGxhdGZv
cm1DQUxheWVyKGxheWVyVHlwZSwgdGhpcyk7CiAKICAgICBtX3VzaW5nVGlsZWRCYWNraW5nID0g
dXNlVGlsZWRMYXllcjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggZjNlNGM4Yi4uNWExOWY1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtNDMsNyArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBsYXRmb3Jt
Q0FMYXllcjsKIGNsYXNzIFRyYW5zZm9ybVN0YXRlOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ0Eg
OiBwdWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIFBsYXRmb3JtQ0FMYXllckNsaWVudCB7CkBA
IC0xODUsNiArMTg1LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAg
dm9pZCB1cGRhdGVGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICAKKyAgICBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKyAgICBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKIAogICAgIFBsYXRmb3JtQ0FMYXllciogcHJpbWFyeUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgPyBtX3N0cnVjdHVy
YWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGhv
c3RMYXllckZvclN1YmxheWVycygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCmluZGV4IDA5MGRl
ZjUuLjhkYjUwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKQEAgLTUzLDYgKzUzLDExIEBAIGNsYXNz
IFRpbWluZ0Z1bmN0aW9uOwogY2xhc3MgUGxhdGZvcm1DQUFuaW1hdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFBsYXRmb3JtQ0FBbmltYXRpb24+IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3Mg
UGxhdGZvcm1DQUxheWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBmcmllbmQgY2xhc3MgUGxh
dGZvcm1DQUxheWVyTWFjOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIGZyaWVuZCBjbGFzcyBQ
bGF0Zm9ybUNBTGF5ZXJXaW47CisjZW5kaWYKICAgICAKICAgICBlbnVtIEFuaW1hdGlvblR5cGUg
eyBCYXNpYywgS2V5ZnJhbWUgfTsKICAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUs
IEZvcndhcmRzLCBCYWNrd2FyZHMsIEJvdGggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjhiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5o
IgorCisjaWYgVVNFKENBKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtQ0FMYXll
cjo6flBsYXRmb3JtQ0FMYXllcigpCit7CisgICAgLy8gQ2xlYXIgdGhlIG93bmVyLCB3aGljaCBh
bHNvIGNsZWFycyBpdCBpbiB0aGUgZGVsZWdhdGUgdG8gcHJldmVudCBhdHRlbXB0cworICAgIC8v
IHRvIHVzZSB0aGUgR3JhcGhpY3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4K
KyAgICBzZXRPd25lcigwKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENBKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApp
bmRleCAwMzBjZjE0Li5iMDA3MmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtMjAsNyArMjAsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFBsYXRmb3JtQ0FMYXllcl9oCkBAIC01MCw2ICs1
MCwxMSBAQCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiA+IFBsYXRmb3JtQ0FMYXllckxpc3Q7CiAKIGNsYXNzIFBsYXRmb3JtQ0FM
YXllciA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXRmb3JtQ0FMYXllcj4geworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyTWFjOworI2VsaWYgUExBVEZP
Uk0oV0lOKQorICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJXaW47CisjZW5kaWYKIHB1
YmxpYzoKICAgICBzdGF0aWMgQ0ZUaW1lSW50ZXJ2YWwgY3VycmVudFRpbWVUb01lZGlhVGltZShk
b3VibGUgdCkgeyByZXR1cm4gQ0FDdXJyZW50TWVkaWFUaW1lKCkgKyB0IC0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCk7IH0KIApAQCAtNjksMTc4ICs3NCwxNDYgQEAgcHVibGljOgogICAg
IH07CiAgICAgZW51bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIgfTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlw
ZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7Ci0gICAgCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBw
YXNzZXMgdGhlIGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJl
Y2F1c2UgUGxhdGZvcm1MYXllcgotICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9i
aiBDIGFuZCBDKysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZSh2b2lkKiBwbGF0Zm9y
bUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7
CiAKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVy
Q2xpZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyKCk7CiAKLSAgICB+
UGxhdGZvcm1DQUxheWVyKCk7Ci0gICAgCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBwYXNzZXMgdGhl
IGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJlY2F1c2UgUGxh
dGZvcm1MYXllcgogICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9iaiBDIGFuZCBD
KysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KICAgICBzdGF0aWMg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIodm9pZCogcGxhdGZvcm1MYXllcik7Ci0g
ICAgCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCi0jaWYgUExB
VEZPUk0oV0lOKQotICAgIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xheWVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSNlbHNlCi0gICAgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2xheWVyVHlwZSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIg
fHwgbV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7IH0KLSNlbmRpZgor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
LmdldCgpOyB9CiAKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0OwotICAg
IAotICAgIC8vIEEgbGlzdCBvZiBzdWJsYXllcnMgdGhhdCBHcmFwaGljc0xheWVyQ0Egc2hvdWxk
IG1haW50YWluIGFzIHRoZSBmaXJzdCBzdWJsYXllcnMuCi0gICAgY29uc3QgUGxhdGZvcm1DQUxh
eWVyTGlzdCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21TdWJsYXll
cnMuZ2V0KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbHVlRnVuY3Rpb25TdXBwb3J0
ZWQoKTsKLSAgICAKLSAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lcjsgfQotICAgIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50
Kik7CisgICAgdmlydHVhbCBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNvbnN0ID0gMDsK
IAotICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpOwot
ICAgIHZvaWQgZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOworICAgIFBsYXRmb3JtQ0FMYXll
ckNsaWVudCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisgICAgdmlydHVhbCB2
b2lkIHNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIHsgbV9vd25lciA9IG93
bmVyOyB9CiAKLSAgICAvLyBMYXlvdXQgc3VwcG9ydAotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdp
blRpbWUpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxv
YXRSZWN0KiBkaXJ0eVJlY3QgPSAwKSA9IDA7CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShj
b25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApOwotICAgIAotICAgIC8vIFRoaXMgdGVsbHMg
dGhlIGxheWVyIHRyZWUgdG8gY29tbWl0IGNoYW5nZXMgYW5kIHBlcmZvcm0gYSByZW5kZXIsIHdp
dGhvdXQgZG8gYSBzZXROZWVkc0Rpc3BsYXkgb24gYW55IGxheWVyLgotICAgIHZvaWQgc2V0TmVl
ZHNDb21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNDaGFuZ2VkKCkgPSAwOwog
Ci0gICAgdm9pZCBzZXRDb250ZW50c0NoYW5nZWQoKTsKLSAgICAKICAgICBMYXllclR5cGUgbGF5
ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KIAotICAgIFBsYXRmb3JtQ0FM
YXllciogc3VwZXJsYXllcigpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIo
KTsKLSAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7Ci0g
ICAgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICB2b2lkIGFwcGVuZFN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciopOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVy
Kiwgc2l6ZV90IGluZGV4KTsKLSAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5
ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKik7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNB
TGF5ZXIqIHN1cGVybGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZy
b21TdXBlcmxheWVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3Qg
UGxhdGZvcm1DQUxheWVyTGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3Vi
bGF5ZXJzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FM
YXllciosIHNpemVfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciopID0gMDsKKwor
ICAgIC8vIEEgbGlzdCBvZiBzdWJsYXllcnMgdGhhdCBHcmFwaGljc0xheWVyQ0Egc2hvdWxkIG1h
aW50YWluIGFzIHRoZSBmaXJzdCBzdWJsYXllcnMuCisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9y
bUNBTGF5ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGlz
IG1ldGhvZCByZW1vdmVzIHRoZSBzdWJsYXllcnMgZnJvbSB0aGUgc291cmNlIGFuZCByZXBhcmVu
dHMgdGhlbSB0byB0aGUgY3VycmVudCBsYXllci4KICAgICAvLyBBbnkgc3VibGF5ZXJzIHByZXZp
b3VzbHkgaW4gdGhlIGN1cnJlbnQgbGF5ZXIgYXJlIHJlbW92ZWQuCi0gICAgdm9pZCBhZG9wdFN1
YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFuaW1h
dGlvbik7ICAgIAotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KTsKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSk7Ci0gICAgCi0gICAgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FM
YXllciopOwotICAgIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9w
YXF1ZShib29sKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICB2b2lkIHNl
dEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigp
IGNvbnN0OwotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAg
dmlydHVhbCB2b2lkIGFkb3B0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5
LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqKSA9IDA7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldE9wYXF1ZShib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3VuZHMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJikgPSAwOwog
ICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9u
KEZsb2F0UG9pbnQzRChwb3MueCgpLCBwb3MueSgpLCAwKSk7IH0KIAotICAgIEZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxv
YXRQb2ludDNEJik7CisgICAgdmlydHVhbCBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYpID0gMDsKKworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1
YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXll
clRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEhpZGRl
bihib29sKSA9IDA7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9y
bSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wp
ID0gMDsKIAotICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBpc0Rv
dWJsZVNpZGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREb3VibGVTaWRlZChi
b29sKSA9IDA7CiAKLSAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TWFza3NUb0JvdW5kcyhib29sKSA9IDA7CiAKLSAgICBib29sIGlzRG91YmxlU2lkZWQoKSBjb25z
dDsKLSAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBhY2Nl
bGVyYXRlc0RyYXdpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVzRHJhd2luZyhib29sKSA9IDA7CiAKLSAgICBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdDsK
LSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgCi0gICAgYm9vbCBhY2NlbGVy
YXRlc0RyYXdpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29s
KTsKKyAgICB2aXJ0dWFsIENGVHlwZVJlZiBjb250ZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSA9IDA7CiAKLSAgICBDRlR5cGVSZWYgY29u
dGVudHMoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRzKENGVHlwZVJlZik7CisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKLSAgICB2
b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKSA9IDA7CiAKLSAgICB2b2lkIHNldE1p
bmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKTsKLSAgICB2b2lkIHNldE1hZ25pZmljYXRpb25G
aWx0ZXIoRmlsdGVyVHlwZSk7CisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYpID0gMDsKIAotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIHNldEJv
cmRlcldpZHRoKGZsb2F0KSA9IDA7CiAKLSAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKSA9IDA7CiAKLSAg
ICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCBmbG9hdCBv
cGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9
IDA7CiAKLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPcGFjaXR5KGZs
b2F0KTsKLSAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRGaWx0ZXJz
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsdGVycyhj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwogICAgIHN0YXRpYyBib29sIGZpbHRlcnNDYW5C
ZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHZvaWQgY29weUZpbHRl
cnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBjb3B5Rmls
dGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgPSAwOwogI2VuZGlmCiAKLSAgICB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJikgPSAwOwogCi0gICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgdm9p
ZCBzZXRTcGVlZChmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSA9IDA7
CiAKLSAgICB2b2lkIHNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpOwotICAgIAotICAgIGZs
b2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxv
YXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSA9IDA7
CiAKLSAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpOworICAgIHZpcnR1YWwgZmxvYXQg
Y29udGVudHNTY2FsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCkgPSAwOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1f
YW5pbWF0aW9uczsgfQotI2VuZGlmCisgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFj
a2luZygpID0gMDsKIAotI2lmIFBMQVRGT1JNKFdJTikgJiYgIWRlZmluZWQoTkRFQlVHKQotICAg
IHZvaWQgcHJpbnRUcmVlKCkgY29uc3Q7Ci0jZW5kaWYKKyNpZiBQTEFURk9STShXSU4pCisgICAg
dmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNMYXlvdXQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
Q29tbWl0KCkgPSAwOworI2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRUcmVl
KCkgY29uc3QgPSAwOworI2VuZGlmIC8vIE5ERUJVRworI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikK
IAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIHN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJ
blJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3VzbHlE
aXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2VuZGlmCiAKIHByb3Rl
Y3RlZDoKLSAgICBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgQVZQbGF5ZXJMYXllciogcGxh
eWVyTGF5ZXIoKSBjb25zdDsKKyAgICBQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKKyAgICAgICAgOiBtX293bmVyKG93bmVyKQorICAgIHsKIAotICAgIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogbV9vd25lcjsKLSAgICBMYXllclR5cGUgbV9sYXllclR5cGU7Ci0g
ICAgCi0gICAgT3duUHRyPFBsYXRmb3JtQ0FMYXllckxpc3Q+IG1fY3VzdG9tU3VibGF5ZXJzOwot
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxQbGF0Zm9y
bUxheWVyPiBtX2xheWVyOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKLSNl
bmRpZgorICAgIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotICAgIFJl
dGFpblB0cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKLSNlbHNlCi0gICAgUmV0YWluUHRyPHZvaWQ+
IG1fZGVsZWdhdGU7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIEFWUGxheWVyTGF5ZXIqIHBsYXllckxh
eWVyKCkgY29uc3QgPSAwOwogI2VuZGlmCisKKyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7Cisg
ICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXI7CisgICAgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBtX293bmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTQ1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFj
LmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUNBTGF5ZXJNYWNfaAor
I2RlZmluZSBQbGF0Zm9ybUNBTGF5ZXJNYWNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisKK09CSkNfQ0xBU1MgTlNP
YmplY3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1DQUxheWVyTWFj
IEZJTkFMIDogcHVibGljIFBsYXRmb3JtQ0FMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQqKTsKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIg
YXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxh
eWVyCisgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhp
cyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCopOworCisgICAgflBsYXRmb3JtQ0FMYXllck1hYygpOworCisgICAgdmly
dHVhbCBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IGxheWVyVHlwZSgpID09IExheWVyVHlwZVBhZ2VUaWxlZEJhY2tpbmdMYXllciB8fCBsYXllclR5
cGUoKSA9PSBMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcjsgfQorCisgICAgdmlydHVhbCB2b2lk
IHNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzQ2hhbmdlZCgpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHN1cGVybGF5ZXIoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3Qm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIq
LCBzaXplX3QgaW5kZXgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCogY3VzdG9tU3VibGF5ZXJz
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jdXN0b21TdWJsYXllcnMuZ2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJp
bmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXko
Y29uc3QgU3RyaW5nJiBrZXkpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25T
dGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFx
dWUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3VuZHMoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBGbG9hdFBvaW50M0QgcG9zaXRpb24oKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNE
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludCgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEhpZGRlbihib29sKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEb3VibGVTaWRlZCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXREb3VibGVTaWRlZChib29sKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgYWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgQ0ZU
eXBlUmVmIGNvbnRlbnRzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzKENGVHlwZVJlZikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNl
dE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dE9wYWNpdHkoZmxvYXQpIE9WRVJSSURFOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IHZpcnR1YWwgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUZpbHRlcnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXll
ciopIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9h
dFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVlZChmbG9hdCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IE9WRVJSSURF
OworCitwcml2YXRlOgorICAgIFBsYXRmb3JtQ0FMYXllck1hYyhMYXllclR5cGUsIFBsYXRmb3Jt
TGF5ZXIqLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKworICAgIHZpcnR1YWwgQVZQ
bGF5ZXJMYXllciogcGxheWVyTGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIFJldGFpblB0
cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKKyAgICBPd25QdHI8UGxhdGZvcm1DQUxheWVyTGlzdD4g
bV9jdXN0b21TdWJsYXllcnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJNYWNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXll
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KaW5kZXggZmI3Y2Y0Zi4uNzdlOWJjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLm1tCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKLSNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2ltcG9ydCAiUGxhdGZvcm1D
QUxheWVyTWFjLmgiCiAKICNpbXBvcnQgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCkBAIC00NSwxNyArNDUsNjcgQEAKICNpbXBvcnQgPEFWRm91bmRh
dGlvbi9BVkZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgog
I2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFM
KEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5
ZXIpCiAKLXVzaW5nIHN0ZDo6bWluOwotdXNpbmcgc3RkOjptYXg7Ci0KIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVy
TWFjOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllck1hYyhsYXll
clR5cGUsIDAsIG93bmVyKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQqIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxh
eWVyTWFjKExheWVyVHlwZUN1c3RvbSwgc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBsYXRm
b3JtTGF5ZXIpLCBvd25lcikpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBQ
bGF0Zm9ybUNBTGF5ZXI6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIGZp
bHRlcnMgdG8gYXZvaWQgbmVlZGxlc3Mgd29yaworICAgIGlmICghZmlsdGVycy5zaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0
ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVy
T3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRp
b24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNVU1RPTToKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRF
RF9DVVNUT006CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAgICAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UgY2FuIG9ubHkgaGFuZGxlIGRyb3Atc2hhZG93IGlzIGlmIGl0J3MgbGFzdCBpbiB0
aGUgbGlzdAorICAgICAgICAgICAgaWYgKGkgPCAoZmlsdGVycy5zaXplKCkgLSAxKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisjZW5kaWYKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGxhdGZvcm1DQUxh
eWVyUG9pbnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIiOworUGxhdGZvcm1DQUxheWVyKiBQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKQoreworICAg
IGlmICghcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBQb2ludGVy
IHRvIFBsYXRmb3JtQ0FMYXllciBpcyBrZXB0IGluIGEga2V5IG9mIHRoZSBDQUxheWVyCisgICAg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIgPSBuaWw7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgcGxhdGZvcm1DQUxheWVyID0gc3RhdGljX2Nhc3Q8UGxhdGZv
cm1DQUxheWVyKj4oW1tzdGF0aWNfY2FzdDxDQUxheWVyKj4ocGxhdGZvcm1MYXllcikgdmFsdWVG
b3JLZXk6cGxhdGZvcm1DQUxheWVyUG9pbnRlcl0gcG9pbnRlclZhbHVlXSk7CisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXI7Cit9CisKIC8v
IFRoaXMgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyBpbiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFj
Lm1tCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXS05vblplcm9CZWdpblRpbWVGbGFnID0gQCJX
S1BsYXRmb3JtQ0FBbmltYXRpb25Ob25aZXJvQmVnaW5UaW1lRmxhZyI7CiAKQEAgLTExMiwxNyAr
MTYyLDkgQEAgc3RhdGljIGRvdWJsZSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENGVGltZUludGVy
dmFsIHQpCiAtIChCT09MKWFjY2VsZXJhdGVzRHJhd2luZzsKIEBlbmQKIAotc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIi
OwotCi1ib29sIFBsYXRmb3JtQ0FMYXllcjo6aXNWYWx1ZUZ1bmN0aW9uU3VwcG9ydGVkKCkKLXsK
LSAgICBzdGF0aWMgYm9vbCBzSGF2ZVZhbHVlRnVuY3Rpb24gPSBbQ0FQcm9wZXJ0eUFuaW1hdGlv
biBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0VmFsdWVGdW5jdGlvbjop
XTsKLSAgICByZXR1cm4gc0hhdmVWYWx1ZUZ1bmN0aW9uOwotfQotCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjpzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQogewot
ICAgIG1fb3duZXIgPSBvd25lcjsKKyAgICBQbGF0Zm9ybUNBTGF5ZXI6OnNldE93bmVyKG93bmVy
KTsKICAgICAKICAgICAvLyBDaGFuZ2UgdGhlIGRlbGVnYXRlJ3Mgb3duZXIgaWYgbmVlZGVkCiAg
ICAgaWYgKG1fZGVsZWdhdGUpCkBAIC0xNTksMTggKzIwMSw4IEBAIHN0YXRpYyBOU1N0cmluZyog
dG9DQUZpbHRlclR5cGUoUGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlIHR5cGUpCiAgICAgfQog
fQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllcihsYXllclR5cGUsIDAsIG93bmVy
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNy
ZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyKExheWVyVHlwZUN1c3Rv
bSwgc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBsYXRmb3JtTGF5ZXIpLCBvd25lcikpOwot
fQotCi1QbGF0Zm9ybUNBTGF5ZXI6OlBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBl
LCBQbGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLSAg
ICA6IG1fb3duZXIob3duZXIpCitQbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRmb3JtQ0FMYXllck1h
YyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lcikKKyAgICA6IFBsYXRmb3JtQ0FMYXllcihvd25lcikKIHsKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAobGF5ZXIpIHsKQEAgLTIzMCwxMyAr
MjYyLDEzIEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgaWYgKHVzZXNUaWxlZEJhY2tp
bmdMYXllcigpKSB7CiAgICAgICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gYWRvcHRQdHIobmV3IFBs
YXRmb3JtQ0FMYXllckxpc3QoMSkpOwogICAgICAgICBDQUxheWVyKiB0aWxlQ2FjaGVUaWxlQ29u
dGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXll
ci5nZXQoKSkgdGlsZUNvbnRhaW5lckxheWVyXTsKLSAgICAgICAgKCptX2N1c3RvbVN1YmxheWVy
cylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5
ZXIsIDApOworICAgICAgICAoKm1fY3VzdG9tU3VibGF5ZXJzKVswXSA9IFBsYXRmb3JtQ0FMYXll
ck1hYzo6Y3JlYXRlKHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciwgMCk7CiAgICAgfQogICAg
IAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikgY29uc3QKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CiB7CiAgICAgTGF5
ZXJUeXBlIHR5cGU7CiAgICAgc3dpdGNoIChsYXllclR5cGUoKSkgewpAQCAtMjUxLDggKzI4Myw4
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiAgICAgICAgIHR5cGUgPSBMYXllclR5cGVMYXll
cjsKICAgICAgICAgYnJlYWs7CiAgICAgfTsKLSAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBu
ZXdMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKLQorICAgIFJl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVh
dGUodHlwZSwgb3duZXIpOworICAgIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlv
bigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKICAgICBuZXdMYXllci0+
c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CkBAIC0yNzksMTMgKzMxMSw5IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNsb25lKFBsYXRmb3JtQ0FM
YXllckNsaWVudCogb3duZXIpCiAgICAgcmV0dXJuIG5ld0xheWVyOwogfQogCi1QbGF0Zm9ybUNB
TGF5ZXI6On5QbGF0Zm9ybUNBTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyTWFjOjp+UGxhdGZvcm1D
QUxheWVyTWFjKCkKIHsKICAgICBbbV9sYXllci5nZXQoKSBzZXRWYWx1ZTpuaWwgZm9yS2V5OnBs
YXRmb3JtQ0FMYXllclBvaW50ZXJdOwotCi0gICAgLy8gQ2xlYXIgdGhlIG93bmVyLCB3aGljaCBh
bHNvIGNsZWFycyBpdCBpbiB0aGUgZGVsZWdhdGUgdG8gcHJldmVudCBhdHRlbXB0cyAKLSAgICAv
LyB0byB1c2UgdGhlIEdyYXBoaWNzTGF5ZXJDQSBhZnRlciBpdCBoYXMgYmVlbiBkZXN0cm95ZWQu
Ci0gICAgc2V0T3duZXIoMCk7CiAgICAgCiAgICAgLy8gUmVtb3ZlIHRoZSBvd25lciBwb2ludGVy
IGZyb20gdGhlIGRlbGVnYXRlIGluIGNhc2UgdGhlcmUgaXMgYSBwZW5kaW5nIGFuaW1hdGlvblN0
YXJ0ZWQgZXZlbnQuCiAgICAgW3N0YXRpY19jYXN0PFdlYkFuaW1hdGlvbkRlbGVnYXRlKj4obV9k
ZWxlZ2F0ZS5nZXQoKSkgc2V0T3duZXI6bmlsXTsKQEAgLTI5NCwzMSArMzIyLDEzIEBAIFBsYXRm
b3JtQ0FMYXllcjo6flBsYXRmb3JtQ0FMYXllcigpCiAgICAgICAgIFtzdGF0aWNfY2FzdDxXZWJU
aWxlZEJhY2tpbmdMYXllciAqPihtX2xheWVyLmdldCgpKSBpbnZhbGlkYXRlXTsKIH0KIAotUGxh
dGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0
Zm9ybUxheWVyKQotewotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIAotICAgIC8vIFBvaW50ZXIgdG8gUGxhdGZvcm1DQUxheWVyIGlzIGtlcHQgaW4g
YSBrZXkgb2YgdGhlIENBTGF5ZXIKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXll
ciA9IG5pbDsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBwbGF0Zm9ybUNB
TGF5ZXIgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXIqPihbW3N0YXRpY19jYXN0PENBTGF5
ZXIqPihwbGF0Zm9ybUxheWVyKSB2YWx1ZUZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyXSBw
b2ludGVyVmFsdWVdKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgcmV0dXJu
IHBsYXRmb3JtQ0FMYXllcjsKLX0KLQotUGxhdGZvcm1MYXllciogUGxhdGZvcm1DQUxheWVyOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllci5nZXQoKTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVn
aW5UaW1lKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1l
SW50ZXJ2YWwgYmVnaW5UaW1lKQogewogICAgIGlmIChtX293bmVyKQogICAgICAgICBtX293bmVy
LT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGJlZ2luVGltZSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJl
Y3QpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0
UmVjdCogZGlydHlSZWN0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAg
IGlmIChkaXJ0eVJlY3QpCkBAIC0zMjgsMjYgKzMzOCwyNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KICAgICAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRD
b250ZW50c0NoYW5nZWQoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRzQ2hh
bmdlZCgpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHNDaGFuZ2VkXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiB9CiAKLVBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjpzdXBlcmxheWVyKCkgY29u
c3QKK1BsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyTWFjOjpzdXBlcmxheWVyKCkgY29u
c3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1DQUxheWVyKFttX2xheWVyLmdldCgpIHN1cGVybGF5
ZXJdKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUZyb21TdXBlcmxheWVyKCkK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBs
aXN0KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9y
bUNBTGF5ZXJMaXN0JiBsaXN0KQogewogICAgIC8vIFNob3J0IGNpcmN1aXRpbmcgaGVyZSBub3Qg
b25seSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2Ygc3VibGF5ZXJzLCBidXQgYXZvaWRzIDxyZGFy
Oi8vcHJvYmxlbS83MzkwNzE2PiAoc2VlIGJlbG93KQogICAgIGlmIChsaXN0LnNpemUoKSA9PSAw
KSB7CkBAIC0zNjUsNyArMzc1LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVy
cyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBsaXN0KQogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVycygp
Cit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAgICAv
LyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNzM5MDcxNj46IC1bQ0FMYXllciBzZXRT
dWJsYXllcnM6XSBjcmFzaGVzIGlmIHN1YmxheWVycyBpcyBhbiBlbXB0eSBhcnJheSwgb3Igbmls
LCB1bmRlciBHQy4KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKQEAgLTM3Nyw3ICsz
ODcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjphcHBl
bmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmFwcGVuZFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXItPm1fbGF5
ZXIpOwpAQCAtMzg1LDcgKzM5NSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphcHBlbmRTdWJs
YXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6Omluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FM
YXllciogbGF5ZXIsIHNpemVfdCBpbmRleCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjppbnNl
cnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXIt
Pm1fbGF5ZXIpOwpAQCAtMzkzLDcgKzQwMyw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjppbnNl
cnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6cmVwbGFj
ZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciogcmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5ZXIqIGxh
eWVyKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBBU1NFUlQobV9sYXllciAhPSBsYXllci0+bV9sYXll
cik7CkBAIC00MDEsNyArNDExLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJs
YXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWUKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9wdFN1
YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFj
OjphZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKIHsKICAgICAvLyBXb3Jr
YXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNzM5MDcxNj46IC1bQ0FMYXllciBzZXRTdWJsYXll
cnM6XSBjcmFzaGVzIGlmIHN1YmxheWVycyBpcyBhbiBlbXB0eSBhcnJheSwgb3IgbmlsLCB1bmRl
ciBHQy4KICAgICBOU0FycmF5KiBzdWJsYXllcnMgPSBbc291cmNlLT5tX2xheWVyLmdldCgpIHN1
YmxheWVyc107CkBAIC00MTksNyArNDI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkb3B0
U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKQogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwg
UGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQogewogICAgIC8vIEFkZCB0aGUgZGVsZWdh
dGUKICAgICBpZiAoIW1fZGVsZWdhdGUpIHsKQEAgLTQzNywxNCArNDQ3LDE0IEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRm
b3JtQ0FBbmltYXRpb24qCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9s
YXllci5nZXQoKSByZW1vdmVBbmltYXRpb25Gb3JLZXk6a2V5XTsKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZv
cm1DQUxheWVyOjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCitQYXNzUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllck1hYzo6YW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIENBUHJvcGVydHlBbmltYXRpb24qIHByb3BlcnR5
QW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KFttX2xheWVyLmdl
dCgpIGFuaW1hdGlvbkZvcktleTprZXldKTsKICAgICBpZiAoIXByb3BlcnR5QW5pbWF0aW9uKQpA
QCAtNDUyLDQ0ICs0NjIsNDQgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0
Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGsKICAgICByZXR1cm4g
UGxhdGZvcm1DQUFuaW1hdGlvbjo6Y3JlYXRlKHByb3BlcnR5QW5pbWF0aW9uKTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyTWFjOjpzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0TWFz
azpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwXTsKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjppc09wYXF1ZSgpIGNvbnN0
Citib29sIFBsYXRmb3JtQ0FMYXllck1hYzo6aXNPcGFxdWUoKSBjb25zdAogewogICAgIHJldHVy
biBbbV9sYXllci5nZXQoKSBpc09wYXF1ZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpz
ZXRPcGFxdWUoYm9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRPcGFxdWUo
Ym9vbCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9s
YXllci5nZXQoKSBzZXRPcGFxdWU6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0Zsb2F0
UmVjdCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtt
X2xheWVyLmdldCgpIGJvdW5kc107CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3Vu
ZHMoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRC
b3VuZHMoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRCb3VuZHM6dmFsdWVdOwogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6
cG9zaXRpb24oKSBjb25zdAorRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllck1hYzo6cG9zaXRp
b24oKSBjb25zdAogewogICAgIENHUG9pbnQgcG9pbnQgPSBbbV9sYXllci5nZXQoKSBwb3NpdGlv
bl07CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwb2ludC54LCBwb2ludC55LCBbbV9sYXllci5n
ZXQoKSB6UG9zaXRpb25dKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRQb3NpdGlvbjpDR1BvaW50TWFr
ZSh2YWx1ZS54KCksIHZhbHVlLnkoKSldOwpAQCAtNDk3LDcgKzUwNyw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXll
cjo6YW5jaG9yUG9pbnQoKSBjb25zdAorRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllck1hYzo6
YW5jaG9yUG9pbnQoKSBjb25zdAogewogICAgIENHUG9pbnQgcG9pbnQgPSBbbV9sYXllci5nZXQo
KSBhbmNob3JQb2ludF07CiAgICAgZmxvYXQgeiA9IDA7CkBAIC01MDUsNyArNTE1LDcgQEAgRmxv
YXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6YW5jaG9yUG9pbnQoKSBjb25zdAogICAgIHJldHVy
biBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgeik7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0
KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKQEAg
LTUxMywxMTkgKzUyMywxMTkgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXI6OnRyYW5zZm9ybSgp
IGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRyYW5zZm9y
bSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIHRyYW5zZm9ybV07CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0VHJhbnNmb3JtOnZhbHVlXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRm
b3JtQ0FMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRy
aXggUGxhdGZvcm1DQUxheWVyTWFjOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFttX2xheWVyLmdldCgpIHN1YmxheWVyVHJhbnNmb3JtXTsKIH0KIAotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRTdWJsYXllclRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U3VibGF5ZXJUcmFuc2Zvcm06
dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldEhpZGRlbihib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OnNldEhpZGRlbihib29sIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgIFttX2xheWVyLmdldCgpIHNldEhpZGRlbjp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0R2VvbWV0cnlGbGlw
cGVkKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0R2VvbWV0cnlGbGlw
cGVkKGJvb2wgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0R2VvbWV0cnlGbGlwcGVkOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjppc0RvdWJsZVNpZGVk
KCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjppc0RvdWJsZVNpZGVkKCkgY29uc3QK
IHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgaXNEb3VibGVTaWRlZF07CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXREb3VibGVTaWRlZChib29sIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OnNldERvdWJsZVNpZGVkKGJvb2wgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RG91YmxlU2lkZWQ6dmFs
dWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNB
TGF5ZXI6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJNYWM6Om1h
c2tzVG9Cb3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBtYXNrc1Rv
Qm91bmRzXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9v
bCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
dmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0TWFza3NUb0JvdW5kczp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCi1ib29sIFBsYXRmb3JtQ0FMYXllcjo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29u
c3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAog
ewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBhY2NlbGVyYXRlc0RyYXdpbmddOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0
ZXNEcmF3aW5nKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEFjY2VsZXJhdGVzRHJhd2lu
Zyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6YWNjZWxlcmF0
ZXNEcmF3aW5nXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUNGVHlwZVJl
ZiBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzKCkgY29uc3QKK0NGVHlwZVJlZiBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OmNvbnRlbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkg
Y29udGVudHNdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHMoQ0ZUeXBl
UmVmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRzKENGVHlwZVJl
ZiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXll
ci5nZXQoKSBzZXRDb250ZW50czpzdGF0aWNfY2FzdDxpZD4oY29uc3RfY2FzdDx2b2lkKj4odmFs
dWUpKV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBs
YXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkg
c2V0Q29udGVudHNSZWN0OnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlw
ZSB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRNaW5pZmljYXRpb25GaWx0ZXIo
RmlsdGVyVHlwZSB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAg
ICBbbV9sYXllci5nZXQoKSBzZXRNaW5pZmljYXRpb25GaWx0ZXI6dG9DQUZpbHRlclR5cGUodmFs
dWUpXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBs
YXRmb3JtQ0FMYXllck1hYzo6c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldE1hZ25pZmljYXRpb25GaWx0ZXI6dG9DQUZpbHRlclR5cGUodmFsdWUpXTsKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUNvbG9yIFBsYXRmb3JtQ0FMYXllcjo6YmFja2dy
b3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFBsYXRmb3JtQ0FMYXllck1hYzo6YmFja2dyb3VuZENv
bG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgYmFja2dyb3VuZENvbG9y
XTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAg
dmFsdWUuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJd
LCBjb21wb25lbnRzWzNdKTsKQEAgLTYzOCwxNCArNjQ4LDE0IEBAIHZvaWQgUGxhdGZvcm1DQUxh
eWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvcmRlcldp
ZHRoKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEJvcmRlcldpZHRo
KGZsb2F0IHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFtt
X2xheWVyLmdldCgpIHNldEJvcmRlcldpZHRoOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihjb25z
dCBDb2xvciYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Qm9yZGVyQ29sb3Io
Y29uc3QgQ29sb3ImIHZhbHVlKQogewogICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKICAgICB2
YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0s
IGNvbXBvbmVudHNbM10pOwpAQCAtNjU4LDEyICs2NjgsMTIgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKLWZsb2F0IFBsYXRmb3JtQ0FMYXllcjo6b3BhY2l0eSgpIGNvbnN0
CitmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJNYWM6Om9wYWNpdHkoKSBjb25zdAogewogICAgIHJldHVy
biBbbV9sYXllci5nZXQoKSBvcGFjaXR5XTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dE9wYWNpdHkoZmxvYXQgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0T3BhY2l0
eShmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBb
bV9sYXllci5nZXQoKSBzZXRPcGFjaXR5OnZhbHVlXTsKQEAgLTY3MSw4OCArNjgxLDYwIEBAIHZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQogfQogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZpbHRlcnMoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRG
aWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgUGxhdGZvcm1D
QUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKHRoaXMsIGZpbHRlcnMpOwogfQogCi12b2lkIFBs
YXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciogc291
cmNlTGF5ZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6Y29weUZpbHRlcnNGcm9tKGNvbnN0
IFBsYXRmb3JtQ0FMYXllciogc291cmNlTGF5ZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RmlsdGVyczpbc291cmNlTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSBmaWx0ZXJzXV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
fQotCi1ib29sIFBsYXRmb3JtQ0FMYXllcjo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVy
ZSBhcmUgbm8gZmlsdGVycyB0byBhdm9pZCBuZWVkbGVzcyB3b3JrCi0gICAgaWYgKCFmaWx0ZXJz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NOgotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGNhbiBvbmx5IGhhbmRsZSBkcm9wLXNoYWRvdyBp
cyBpZiBpdCdzIGxhc3QgaW4gdGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChpIDwgKGZpbHRlcnMu
c2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KICNlbmRpZgogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXROYW1lOnZhbHVlXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRG
cmFtZShjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNl
dEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dmFsdWVdOwogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFNwZWVk
KGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFNwZWVkKGZsb2F0IHZh
bHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdl
dCgpIHNldFNwZWVkOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwg
dmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0VGltZU9mZnNldDp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAorZmxv
YXQgUGxhdGZvcm1DQUxheWVyTWFjOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gW21fbGF5ZXIuZ2V0KCkgY29udGVudHNTY2FsZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxh
eWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTp2YWx1ZV07
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1UaWxlZEJhY2tpbmcqIFBsYXRm
b3JtQ0FMYXllcjo6dGlsZWRCYWNraW5nKCkKK1RpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVy
TWFjOjp0aWxlZEJhY2tpbmcoKQogewogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xheWVyKCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtNzYxLDcgKzc0Myw3IEBAIFRpbGVkQmFja2luZyogUGxh
dGZvcm1DQUxheWVyOjp0aWxlZEJhY2tpbmcoKQogICAgIHJldHVybiBbdGlsZWRCYWNraW5nTGF5
ZXIgdGlsZWRCYWNraW5nXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OnN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIGlmIChtX2xheWVyVHlwZSAhPSBMYXllclR5cGVXZWJUaWxlZExh
eWVyKQogICAgICAgICByZXR1cm47CkBAIC03NzYsNyArNzU4LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotQVZQbGF5ZXJMYXllciog
UGxhdGZvcm1DQUxheWVyOjpwbGF5ZXJMYXllcigpIGNvbnN0CitBVlBsYXllckxheWVyKiBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OnBsYXllckxheWVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQoW21fbGF5
ZXIuZ2V0KCkgaXNLaW5kT2ZDbGFzczpnZXRBVlBsYXllckxheWVyQ2xhc3MoKV0pOwogICAgIHJl
dHVybiAoQVZQbGF5ZXJMYXllciopbV9sYXllci5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDFmZmUyOTcuLjVkMGMzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcApA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkRlZlduZFByb2NXaW5kb3dDbGFzcy5oIgogI2lu
Y2x1ZGUgIkxheWVyQ2hhbmdlc0ZsdXNoZXIuaCIKICNpbmNsdWRlICJMZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllcldpbi5oIgogI2luY2x1ZGUgIldLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBA
IC0xMjMsNyArMTIzLDcgQEAgUGFzc1JlZlB0cjxDQUNGTGF5ZXJUcmVlSG9zdD4gQ0FDRkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZSgpCiAKIENBQ0ZMYXllclRyZWVIb3N0OjpDQUNGTGF5ZXJUcmVlSG9z
dCgpCiAgICAgOiBtX2NsaWVudCgwKQotICAgICwgbV9yb290TGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVSb290TGF5ZXIsIDApKQorICAgICwg
bV9yb290TGF5ZXIoUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVSb290TGF5ZXIsIDApKQogICAgICwgbV93aW5kb3coMCkKICAgICAsIG1fc2hvdWxk
Rmx1c2hQZW5kaW5nR3JhcGhpY3NMYXllckNoYW5nZXMoZmFsc2UpCiAgICAgLCBtX2lzRmx1c2hp
bmdMYXllckNoYW5nZXMoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDM1
ODUzYTYuLmZhZDMyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0yNyw3ICsy
Nyw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIKIAogI2lu
Y2x1ZGUgIkFic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJGb250LmgiCkBA
IC00MCwxNiArNDAsMjMgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWJvb2wgUGxh
dGZvcm1DQUxheWVyOjppc1ZhbHVlRnVuY3Rpb25TdXBwb3J0ZWQoKQorUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKExheWVyVHlwZSBsYXllclR5
cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBlLCAwLCBv
d25lcikpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3duZXIoUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lcikKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNB
TGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyKQogewotICAgIG1fb3duZXIgPSBvd25lcjsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3Jt
TGF5ZXIsIG93bmVyKSk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIFBsYXRm
b3JtQ0FMYXllcjo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogc3RhdGljIENGU3RyaW5nUmVm
IHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQogewogICAg
IHJldHVybiAodHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVy
KSA/IGtDQUNGVHJhbnNmb3JtTGF5ZXIgOiBrQ0FDRkxheWVyOwpAQCAtODUsMTQgKzkyLDEzIEBA
IHN0YXRpYyBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogaW50ZXJuKHZvaWQqIGxheWVyKQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCo+KENBQ0ZM
YXllckdldFVzZXJEYXRhKHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4obGF5ZXIpKSk7CiB9CiAK
LVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZSwgMCwgb3duZXIpKTsK
LX0KLQotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRl
KHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCitQbGF0
Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRm
b3JtTGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXIoTGF5
ZXJUeXBlQ3VzdG9tLCBzdGF0aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciks
IG93bmVyKSk7CisgICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4o
cGxhdGZvcm1MYXllcik7CisgICAgcmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93
bmVyKCkgOiAwOwogfQogCiBzdGF0aWMgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVm
IGNhTGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMTA4LDggKzExNCw4IEBAIHN0YXRp
YyB2b2lkIGxheW91dFN1YmxheWVyc1Byb2MoQ0FDRkxheWVyUmVmIGNhTGF5ZXIpCiAgICAgICAg
IGxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKGxh
eWVyKTsKIH0KIAotUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQorUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNB
TGF5ZXJXaW4oTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpCisgICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCiB7
CiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIG1fbGF5ZXJUeXBlID0gTGF5ZXJUeXBlQ3VzdG9t
OwpAQCAtMTI5LDcgKzEzNSw3IEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgfQogfQog
Ci1QbGF0Zm9ybUNBTGF5ZXI6On5QbGF0Zm9ybUNBTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyV2lu
Ojp+UGxhdGZvcm1DQUxheWVyV2luKCkKIHsKICAgICAvLyBUb3NzIGFsbCB0aGUga2lkcwogICAg
IHJlbW92ZUFsbFN1YmxheWVycygpOwpAQCAtMTM4LDI5ICsxNDQsMTYgQEAgUGxhdGZvcm1DQUxh
eWVyOjp+UGxhdGZvcm1DQUxheWVyKCkKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCog
bGF5ZXJJbnRlcm4gPSBpbnRlcm4odGhpcyk7CiAgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9s
YXllci5nZXQoKSwgMCk7CiAKLSAgICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFsc28gY2xl
YXJzIGl0IGluIHRoZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IGF0dGVtcHRzIAotICAgIC8vIHRvIHVz
ZSB0aGUgR3JhcGhpY3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICBz
ZXRPd25lcigwKTsKLQogICAgIENBQ0ZMYXllclJlbW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIu
Z2V0KCkpOwogCiAgICAgZGVsZXRlIGxheWVySW50ZXJuOwogfQogCi1QbGF0Zm9ybUNBTGF5ZXIq
IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCi17
Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1M
YXllcik7Ci0gICAgcmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAw
OwotfQotCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9u
ZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAorUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlID0g
KGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIp
ID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciA6IFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAg
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNy
ZWF0ZSh0eXBlLCBvd25lcik7CiAKICAgICBuZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24o
KSk7CiAgICAgbmV3TGF5ZXItPnNldEJvdW5kcyhib3VuZHMoKSk7CkBAIC0xODAsMTggKzE3Mywx
MyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQogICAgIHJldHVybiBuZXdMYXllcjsKIH0KIAot
UGxhdGZvcm1MYXllciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9sYXllci5nZXQoKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6OnJvb3RMYXllcigpIGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllcldpbjo6cm9vdExheWVyKCkgY29uc3QKIHsKICAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVI
b3N0KiBob3N0ID0gbGF5ZXJUcmVlSG9zdEZvckxheWVyKHRoaXMpOwogICAgIHJldHVybiBob3N0
ID8gaG9zdC0+cm9vdExheWVyKCkgOiAwOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YW5p
bWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCit2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6YW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCiB7CiAg
ICAgLy8gVXBkYXRlIHN0YXJ0IHRpbWUgZm9yIGFueSBhbmltYXRpb24gbm90IHlldCBzdGFydGVk
CiAgICAgQ0ZUaW1lSW50ZXJ2YWwgY2FjZkJlZ2luVGltZSA9IGN1cnJlbnRUaW1lVG9NZWRpYVRp
bWUoYmVnaW5UaW1lKTsKQEAgLTIwNCwzNiArMTkyLDE5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKICAgICAgICAgbV9v
d25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi1z
dGF0aWMgdm9pZCByZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikK
LXsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIENBQ0ZMYXllckFkZEFuaW1hdGlvbihsYXllci0+cGxhdGZvcm1MYXllcigpLCBpdC0+
a2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24o
KSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyOjplbnN1cmVBbmltYXRpb25zU3VibWl0dGVk
KCkKLXsKLSAgICByZXN1Ym1pdEFsbEFuaW1hdGlvbnModGhpcyk7Ci0KLSAgICBQbGF0Zm9ybUNB
TGF5ZXJMaXN0IGNoaWxkcmVuOwotICAgIGludGVybih0aGlzKS0+Z2V0U3VibGF5ZXJzKGNoaWxk
cmVuKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQot
ICAgICAgICBjaGlsZHJlbltpXS0+ZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOwotfQotCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGly
dHlSZWN0KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QqIGRpcnR5UmVjdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldE5lZWRzRGlzcGxh
eShkaXJ0eVJlY3QpOwogfQogICAgIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzQ29t
bWl0KCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAg
QWJzdHJhY3RDQUNGTGF5ZXJUcmVlSG9zdCogaG9zdCA9IGxheWVyVHJlZUhvc3RGb3JMYXllcih0
aGlzKTsKICAgICBpZiAoaG9zdCkKICAgICAgICAgaG9zdC0+bGF5ZXJUcmVlRGlkQ2hhbmdlKCk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50c0NoYW5nZWQoKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklYTUU6
IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgb2Ygc2V0Q29udGVudHNDaGFuZ2VkIGluIENBQ0YuIEZv
ciBub3cgSSB3aWxsCiAgICAgLy8gc2V0IGNvbnRlbnRzIHRvIDAgYW5kIHRoZW4gYmFjayB0byBp
dHMgb3JpZ2luYWwgdmFsdWUgdG8gc2VlIGlmIHRoYXQKQEAgLTI0NCw3ICsyMTUsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNDaGFuZ2VkKCkKICAgICBzZXROZWVkc0NvbW1p
dCgpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNMYXlvdXQoKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OnNldE5lZWRzTGF5b3V0KCkKIHsKICAgICBpZiAoIW1fb3duZXIg
fHwgIW1fb3duZXItPnBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI1MywzOSArMjI0LDM5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXROZWVkc0xheW91dCgpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGxhdGZvcm1D
QUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnN1cGVybGF5ZXIoKSBjb25zdAorUGxhdGZvcm1DQUxh
eWVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW46OnN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJldHVy
biBwbGF0Zm9ybUNBTGF5ZXIoQ0FDRkxheWVyR2V0U3VwZXJsYXllcihtX2xheWVyLmdldCgpKSk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIENBQ0ZM
YXllclJlbW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHNldE5lZWRzQ29t
bWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxh
dGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJs
YXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKIHsKICAgICBpbnRlcm4odGhp
cyktPnNldFN1YmxheWVycyhsaXN0KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92
ZUFsbFN1YmxheWVycygpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQWxsU3VibGF5
ZXJzKCkKIHsKICAgICBpbnRlcm4odGhpcyktPnJlbW92ZUFsbFN1YmxheWVycygpOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXll
cikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjphcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5
ZXIqIGxheWVyKQogewogICAgIC8vIFRoaXMgbXVzdCBiZSBpbiB0ZXJtcyBvZiBpbnNlcnRTdWJs
YXllciBpbnN0ZWFkIG9mIGEgZGlyZWN0IGNhbGwgc28gUGxhdGZvcm1DQUxheWVySW50ZXJuYWwg
Y2FuIG92ZXJyaWRlLgogICAgIGluc2VydFN1YmxheWVyKGxheWVyLCBpbnRlcm4odGhpcyktPnN1
YmxheWVyQ291bnQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjppbnNlcnRTdWJsYXll
cihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCit2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllciwgc2l6ZV90IGlu
ZGV4KQogewogICAgIGludGVybih0aGlzKS0+aW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4KTsK
IH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5
ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKiBuZXdMYXllcikKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBs
YXRmb3JtQ0FMYXllciogbmV3TGF5ZXIpCiB7CiAgICAgLy8gVGhpcyBtdXN0IG5vdCB1c2UgZGly
ZWN0IGNhbGxzIHRvIGFsbG93IFBsYXRmb3JtQ0FMYXllckludGVybmFsIHRvIG92ZXJyaWRlLgog
ICAgIEFTU0VSVF9BUkcocmVmZXJlbmNlLCByZWZlcmVuY2UpOwpAQCAtMzA3LDcgKzI3OCw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBy
ZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCiB7CiAg
ICAgUGxhdGZvcm1DQUxheWVyTGlzdCBzdWJsYXllcnM7CiAgICAgaW50ZXJuKHNvdXJjZSktPmdl
dFN1YmxheWVycyhzdWJsYXllcnMpOwpAQCAtMzE2LDcgKzI4Nyw3IEBAIHZvaWQgUGxhdGZvcm1D
QUxheWVyOjphZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKICAgICBzZXRT
dWJsYXllcnMoc3VibGF5ZXJzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkZEFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0
aW9uKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQogewogICAgIC8vIEFk
ZCBpdCB0byB0aGUgYW5pbWF0aW9uIGxpc3QKICAgICBtX2FuaW1hdGlvbnMuYWRkKGtleSwgYW5p
bWF0aW9uKTsKQEAgLTMzMCw3ICszMDEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5p
bWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAg
ICAgICBob3N0LT5hZGRQZW5kaW5nQW5pbWF0ZWRMYXllcih0aGlzKTsKIH0KIAotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyV2luOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5n
JiBrZXkpCiB7CiAgICAgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIGFuaW1hdGlvbiBsaXN0CiAgICAg
bV9hbmltYXRpb25zLnJlbW92ZShrZXkpOwpAQCAtMzQ0LDcgKzMxNSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Bhc3NS
ZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyV2luOjphbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQ
bGF0Zm9ybUNBQW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKGtl
eSk7CiAgICAgaWYgKGl0ID09IG1fYW5pbWF0aW9ucy5lbmQoKSkKQEAgLTM1MywxNjAgKzMyNCwx
NjAgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGsKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
Ci12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikK
IHsKICAgICBDQUNGTGF5ZXJTZXRNYXNrKG1fbGF5ZXIuZ2V0KCksIGxheWVyID8gbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSA6IDApOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxh
dGZvcm1DQUxheWVyOjppc09wYXF1ZSgpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllcldpbjo6
aXNPcGFxdWUoKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJJc09wYXF1ZShtX2xheWVy
LmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1ZShib29sIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYXF1ZShib29sIHZhbHVlKQogewogICAg
IENBQ0ZMYXllclNldE9wYXF1ZShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHND
b21taXQoKTsKIH0KIAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QK
K0Zsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIENBQ0ZMYXllckdldEJvdW5kcyhtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGlu
dGVybih0aGlzKS0+c2V0Qm91bmRzKHZhbHVlKTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQog
Ci1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitGbG9hdFBv
aW50M0QgUGxhdGZvcm1DQUxheWVyV2luOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2lu
dCBwb2ludCA9IENBQ0ZMYXllckdldFBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHJldHVy
biBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1f
bGF5ZXIuZ2V0KCkpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRQb3Np
dGlvbihtX2xheWVyLmdldCgpLCBDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSkpOwog
ICAgIENBQ0ZMYXllclNldFpQb3NpdGlvbihtX2xheWVyLmdldCgpLCB2YWx1ZS56KCkpOwogICAg
IHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFu
Y2hvclBvaW50KCkgY29uc3QKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuY2hv
clBvaW50KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0QW5jaG9y
UG9pbnQobV9sYXllci5nZXQoKSk7CiAgICAgZmxvYXQgeiA9IENBQ0ZMYXllckdldEFuY2hvclBv
aW50WihtX2xheWVyLmdldCgpKTsKICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBv
aW50LnksIHopOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29u
c3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRBbmNo
b3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFu
Y2hvclBvaW50KG1fbGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgp
KSk7CiAgICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnoo
KSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxh
dGZvcm1DQUxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXggUGxh
dGZvcm1DQUxheWVyV2luOjp0cmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5
ZXJHZXRUcmFuc2Zvcm0obV9sYXllci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0VHJhbnNmb3JtKG1fbGF5ZXIuZ2V0KCksIHZh
bHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQ
bGF0Zm9ybUNBTGF5ZXI6OnN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9u
TWF0cml4IFBsYXRmb3JtQ0FMYXllcldpbjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewog
ICAgIHJldHVybiBDQUNGTGF5ZXJHZXRTdWJsYXllclRyYW5zZm9ybShtX2xheWVyLmdldCgpKTsK
IH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRT
dWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAg
ICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9sYXllci5nZXQoKSwgdmFsdWUpOwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRk
ZW4oYm9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRIaWRkZW4oYm9vbCB2
YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRIaWRkZW4obV9sYXllci5nZXQoKSwgdmFsdWUpOwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRHZW9t
ZXRyeUZsaXBwZWQoYm9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRHZW9t
ZXRyeUZsaXBwZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRHZW9tZXRyeUZsaXBw
ZWQobV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJv
b2wgUGxhdGZvcm1DQUxheWVyOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1D
QUxheWVyV2luOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVy
SXNEb3VibGVTaWRlZChtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldERvdWJsZVNpZGVkKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0
RG91YmxlU2lkZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXREb3VibGVTaWRlZCht
X2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotYm9vbCBQ
bGF0Zm9ybUNBTGF5ZXI6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5
ZXJXaW46Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRN
YXNrc1RvQm91bmRzKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRNYXNrc1RvQm91
bmRzKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1i
b29sIFBsYXRmb3JtQ0FMYXllcjo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK2Jvb2wgUGxh
dGZvcm1DQUxheWVyV2luOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAogewogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFjY2VsZXJhdGVzRHJhd2lu
Zyhib29sKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEFjY2VsZXJhdGVzRHJhd2luZyhi
b29sKQogewogfQogCi1DRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50cygpIGNvbnN0
CitDRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50cygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIENBQ0ZMYXllckdldENvbnRlbnRzKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBs
YXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldENvbnRlbnRzKENGVHlwZVJlZiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5
ZXJTZXRDb250ZW50cyhtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9h
dFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzUmVjdChj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldENvbnRlbnRzUmVjdCht
X2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBl
IHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldE1pbmlmaWNhdGlvbkZpbHRlcihtX2xheWVyLmdl
dCgpLCB0b0NBQ0ZGaWx0ZXJUeXBlKHZhbHVlKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewog
ICAgIENBQ0ZMYXllclNldE1hZ25pZmljYXRpb25GaWx0ZXIobV9sYXllci5nZXQoKSwgdG9DQUNG
RmlsdGVyVHlwZSh2YWx1ZSkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUNvbG9yIFBs
YXRmb3JtQ0FMYXllcjo6YmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFBsYXRmb3JtQ0FM
YXllcldpbjo6YmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVy
R2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyV2luOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewog
ICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNb
MF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwpAQCAtNTE4
LDEzICs0ODksMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYgdmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewogICAgIENBQ0ZMYXllclNl
dEJvcmRlcldpZHRoKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3Im
IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKGNvbnN0IENv
bG9yJiB2YWx1ZSkKIHsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0
UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25l
bnRzWzNdKTsKQEAgLTUzNiwxMiArNTA3LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRC
b3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0K
IAotZmxvYXQgUGxhdGZvcm1DQUxheWVyOjpvcGFjaXR5KCkgY29uc3QKK2Zsb2F0IFBsYXRmb3Jt
Q0FMYXllcldpbjo6b3BhY2l0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldE9w
YWNpdHkobV9sYXllci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFj
aXR5KGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYWNpdHkoZmxv
YXQgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0T3BhY2l0eShtX2xheWVyLmdldCgpLCB2YWx1
ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKQEAgLTU0OSw1NyArNTIwLDQ3IEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRGaWx0ZXJzKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKQogewogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRl
cnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
Y29weUZpbHRlcnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopCiB7CiB9CiAKLWJvb2wgUGxh
dGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShDU1NfRklM
VEVSUykKIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7CiAgICAgQ0FDRkxheWVyU2V0TmFtZShtX2xheWVyLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0
cmluZygpLmdldCgpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVy
bih0aGlzKS0+c2V0RnJhbWUodmFsdWUpOwogICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTcGVlZChmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpzZXRTcGVlZChmbG9hdCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRTcGVl
ZChtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2
b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1
ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRUaW1lT2Zmc2V0KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRl
bnRzU2NhbGUoKSBjb25zdAorZmxvYXQgUGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50c1NjYWxl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dENvbnRlbnRzU2NhbGUoZmxvYXQpCi17Ci19Ci0KLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyOjp0aWxlZEJhY2tpbmcoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRz
U2NhbGUoZmxvYXQpCiB7Ci0gICAgcmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03
MTEsNyArNjcyLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5
ZXIqIGxheWVyLCBpbnQgaW5kZW50KQogICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpwcmludFRyZWUoKSBjb25zdAordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW46OnByaW50VHJlZSgpIGNvbnN0CiB7CiAgICAgLy8gUHJpbnQgaGVhZGluZyBpbmZv
CiAgICAgQ0dSZWN0IHJvb3RCb3VuZHMgPSBib3VuZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGFjZDQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxh
eWVyV2luX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUxheWVyV2luX2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBGSU5BTCA6IHB1Ymxp
YyBQbGF0Zm9ybUNBTGF5ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxhdGZvcm1MYXll
ciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIAorICAgIH5QbGF0Zm9ybUNBTGF5ZXJX
aW4oKTsKKworICAgIHZpcnR1YWwgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzQ2hhbmdlZCgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQ
bGF0Zm9ybUNBTGF5ZXIqIHN1cGVybGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqLCBzaXplX3QgaW5kZXgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVy
KiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgY29u
c3QgUGxhdGZvcm1DQUxheWVyTGlzdCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQbGF0
Zm9ybUNBTGF5ZXIqIHNvdXJjZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5p
bWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJp
bmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmlt
YXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIE9W
RVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRC
b3VuZHMoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9p
bnQzRCBwb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRQ
b2ludDNEIGFuY2hvclBvaW50KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNm
b3JtKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SGlkZGVuKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEdl
b21ldHJ5RmxpcHBlZChib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJs
ZVNpZGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVk
KGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5
cGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9y
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1
YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1l
T2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxvYXQgY29u
dGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxl
ZEJhY2tpbmcoKSBPVkVSUklERSB7IHJldHVybiBudWxscHRyOyB9CisgICAgCisgICAgdmlydHVh
bCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0xheW91dCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0NvbW1pdCgpIE9WRVJSSURFOworCisjaWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwgdm9p
ZCBwcmludFRyZWUoKSBjb25zdCBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1DQUxheWVyV2luKExh
eWVyVHlwZSwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpOwor
CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4gbV9hbmlt
YXRpb25zOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0RXaW4u
Y3BwCmluZGV4IDZhYmIwNDkuLjA1ZTE1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVy
V2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAKQEAgLTg1LDcgKzg2LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEgKICAgICB2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKTsKIAogI2lmIFVTRShDQSkKLSAgICBtX3dlYkdMTGF5ZXIgPSBQbGF0
Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsK
KyAgICBtX3dlYkdMTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKICNlbmRpZgogCiAgICAgaWYgKHJlbmRlclN0eWxl
ID09IFJlbmRlck9mZnNjcmVlbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCmluZGV4IDlkZDI1ZjIuLmU5MTEzN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiUGxhdGZv
cm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luLmgiCiAjaW5jbHVkZSAi
V0tDQUltYWdlUXVldWUuaCIKICNlbmRpZgogCkBAIC0xMTkzLDE0ICsxMTkzLDE0IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3JlYXRlTGF5ZXJGb3JN
b3ZpZSgpCiAKICAgICAvLyBDcmVhdGUgYSBQbGF0Zm9ybUNBTGF5ZXIgd2hpY2ggd2lsbCB0cmFu
c2Zvcm0gdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbyBsYXllcgogICAgIC8vIHdoaWNoIGlzIGlu
IG1fcXRWaWRlb0xheWVyLgotICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6
OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVyQ2xpZW50Lmdl
dCgpKTsKKyAgICBtX3RyYW5zZm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbV9sYXllckNsaWVudC5nZXQoKSk7CiAg
ICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJr
IHRoZSBsYXllciBhcyBhbmNob3JlZCBpbiB0aGUgdG9wIGxlZnQuCiAgICAgbV90cmFuc2Zvcm1M
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogCi0gICAgbV9xdFZpZGVvTGF5
ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCAwKTsKKyAgICBtX3F0VmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRl
KFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIDApOwogICAgIGlmICghbV9xdFZpZGVv
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDE1YjVhNTUuLjYy
MWJhNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0xMC0xMyAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IFBsYXRmb3JtQ0FMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpOgorICAgICAg
ICBJbmNsdWRlIFBsYXRmb3JtQ0FMYXllcldpbi5oIGFuZCBleHBsaWNpdGx5IG1ha2UgUGxhdGZv
cm1DQUxheWVyV2lucyBoZXJlLgorCiAyMDEzLTEwLTEyICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIGRlbGV0ZSBpbiBh
IGZldyBwbGFjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlci5jcHAKaW5kZXggZmI0NzQ2Ni4uZWEwMTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERD
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllcldpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgpAQCAtMjQ4
LDcgKzI0OCw3IEBAIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIoKQogICAgICwgbV90aW1lcih0aGlzLCAmRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
cjo6dGltZXJGaXJlZCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBt
X2xheWVyQ2xpZW50KGFkb3B0UHRyKG5ldyBMYXllckNsaWVudCh0aGlzKSkpCi0gICAgLCBtX3Jv
b3RDaGlsZChQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgpKSkKKyAgICAsIG1fcm9vdENoaWxkKFBsYXRmb3Jt
Q0FMYXllcldpbjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5
ZXJDbGllbnQuZ2V0KCkpKQogI2VuZGlmCiAgICAgLCBtX2Z1bGxzY3JlZW5XaW5kb3coYWRvcHRQ
dHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3codGhpcykpKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214172</attachid>
            <date>2013-10-14 11:40:48 -0700</date>
            <delta_ts>2013-10-14 12:15:15 -0700</delta_ts>
            <desc>take three; fix filtersCanBeComposited</desc>
            <filename>virtualize.diff</filename>
            <type>text/plain</type>
            <size>94506</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1OTA1N2RlLi43ZWU0NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIg
QEAKKzIwMTMtMTAtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9y
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIHNldEdlb21ldHJ5Rmxp
cHBlZCBpcyBvbiBQbGF0Zm9ybUNBTGF5ZXJNYWMgbm93LgorCisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgIEFkZCBQbGF0Zm9ybUNBTGF5ZXIuY3BwLCBQbGF0
Zm9ybUNBTGF5ZXJXaW4uaCwgYW5kIGxldCBWUyBkbyBpdHMKKyAgICAgICAgdGhpbmcgd2l0aCBz
b21lIG90aGVyIGZpbGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgUGxhdGZvcm1DQUxheWVyLmNwcCBhbmQgUGxhdGZvcm1DQUxh
eWVyTWFjLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVZGV3JhcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIE1ha2UgYSBQbGF0Zm9ybUNBTGF5
ZXJXaW4gZXhwbGljaXRseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0
ZVBsYXRmb3JtQ0FMYXllcik6CisgICAgICAgIEFkZGVkLiBEZWNpZGUgd2hldGhlciB0byBtYWtl
IGEgUGxhdGZvcm1DQUxheWVye01hYywgV2lufSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0uCisgICAg
ICAgIExhdGVyLCB3ZSB3aWxsIGRlY2lkZSBiZXR3ZWVuIG90aGVyIHN1YmNsYXNzZXMgYmFzZWQg
b24gb3RoZXIgdGhpbmdzLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmZp
bHRlcnNDYW5CZUNvbXBvc2l0ZWQpOgorICAgICAgICBEbyB0aGUgc2FtZSB0aGluZyBmb3IgZmls
dGVyc0NhbkJlQ29tcG9zaXRlZC4KKworICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpHcmFwaGljc0xheWVyQ0EpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpz
ZXRDb250ZW50c1RvU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgVXNlIGNyZWF0
ZVBsYXRmb3JtQ0FMYXllciBpbnN0ZWFkIG9mIFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAg
IEluY2x1ZGUgUGxhdGZvcm1DQUxheWVyLmggaGVyZSBzbyB3ZSBjYW4gZ2V0IHRoZSBMYXllclR5
cGUgZW51bS4KKyAgICAgICAgKE5PVEUtdG8tYmUtcmVtb3ZlZDogaWYgdGhlcmUncyBhIGJldHRl
ciB3YXkgdG8gZG8gdGhpcywgSSdtIG9wZW4gdG8KKyAgICAgICAgc3VnZ2VzdGlvbnM7IEkgY291
bGRuJ3QgcHV6emxlIG91dCBuZXN0ZWQgJ2VudW0gY2xhc3MnIHN0dWZmKS4KKworICAgICAgICBB
ZGQgdGhlIGNyZWF0ZVBsYXRmb3JtQ0FMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6CisgICAgICAgIEZyaWVuZCB0aGUgc3ViY2xh
c3NlcyB0b28uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6flBsYXRm
b3JtQ0FMYXllcik6CisgICAgICAgIFB1bGwgdGhlIHNoYXJlZCBwYXJ0IG9mIHRoZSBQbGF0Zm9y
bUNBTGF5ZXIgZGVzdHJ1Y3RvciBvdXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnNldE93
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVy
KToKKyAgICAgICAgVmlydHVhbGl6ZSBhbGwgdGhlIHRoaW5ncy4gTW92ZSBwbGF0Zm9ybSBzcGVj
aWZpYyBtZW1iZXJzIHRvIHRoZWlyIG5ldyBzdWJjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAg
ICBNb3ZlIHRoZSBQTEFURk9STShNQUMpIGltcGxlbWVudGF0aW9ucyBmcm9tIFBsYXRmb3JtQ0FM
YXllciB0byBQbGF0Zm9ybUNBTGF5ZXJNYWMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKToKKyAgICAgICAgVGhlIHBsYXRmb3JtQ0FMYXllciBsb29rdXAgZnVu
Y3Rpb24gaXMgc3RhdGljIG9uIFBsYXRmb3JtQ0FMYXllciwgc28gaXQgY2FuJ3QKKyAgICAgICAg
YmUgbW92ZWQgdG8gdGhlIHN1YmNsYXNzZXMuIEl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIGluIHRo
ZSBmdXR1cmUgdG8gbW92ZSB0b3dhcmRzCisgICAgICAgIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQg
bWVjaGFuaXNtIGZvciBsb29raW5nIHVwIFBsYXRmb3JtQ0FMYXllcnMgZnJvbSBQbGF0Zm9ybUxh
eWVycywKKyAgICAgICAgYW5kIHRvIGF2b2lkIG5lZWRpbmcgdG8gZG8gdGhpcyBhcyBvZnRlbiBh
cyB3ZSBkbyBub3cuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUNGTGF5ZXJUcmVl
SG9zdDo6Q0FDRkxheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICBNb3ZlIHRoZSBQTEFURk9STShX
SU4pIGltcGxlbWVudGF0aW9ucyBmcm9tIFBsYXRmb3JtQ0FMYXllciB0byBQbGF0Zm9ybUNBTGF5
ZXJXaW4uCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKToKKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKToKKyAgICAgICAgCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oOiBBZGRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlj
a1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNyZWF0ZUxheWVyRm9yTW92aWUpOgorICAgICAg
ICBJbmNsdWRlIFBsYXRmb3JtQ0FMYXllcldpbi5oIGFuZCBleHBsaWNpdGx5IG1ha2UgUGxhdGZv
cm1DQUxheWVyV2lucyBoZXJlLgorCiAyMDEzLTEwLTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ1RURTogQWRkIG1vcmUgbm9kZSBjb252ZXJzaW9uIGhlbHBlcnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTZhZGM5Yi4uOGMwYTA4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTQ4Niw3ICs0ODYsNiBAQCBfX1pON1dlYkNvcmUxNUhpdFRlc3RMb2NhdGlvbjEy
cmVjdEZvclBvaW50RVJLTlNfMTFMYXlvdXRQb2ludEVqampqCiBfX1pON1dlYkNvcmUxNUpTRE9N
V2luZG93QmFzZThjb21tb25WTUV2CiBfX1pON1dlYkNvcmUxNVBhc3RlYm9hcmRJbWFnZUMxRXYK
IF9fWk43V2ViQ29yZTE1UGFzdGVib2FyZEltYWdlRDFFdgotX19aTjdXZWJDb3JlMTVQbGF0Zm9y
bUNBTGF5ZXIxOHNldEdlb21ldHJ5RmxpcHBlZEViCiBfX1pON1dlYkNvcmUxNVByb3RlY3Rpb25T
cGFjZUMxRVJLTjNXVEY2U3RyaW5nRWlOU18yNVByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVFUzRf
TlNfMzVQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUUKIF9fWk43V2ViQ29yZTE1
UHJvdGVjdGlvblNwYWNlQzFFdgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyMWh0dHBQ
aXBlbGluaW5nRW5hYmxlZEV2CkBAIC02MTQsNiArNjEzLDcgQEAgX19aTjdXZWJDb3JlMTdvcGVu
VGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdzZXRDb29raWVz
RnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVTNV9SS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3dXNlclZpc2libGVTdHJpbmdFUDVOU1VSTAogX19aTjdX
ZWJDb3JlMThET01XaW5kb3dFeHRlbnNpb25DMUVQTlNfNUZyYW1lRVJOU18xNURPTVdyYXBwZXJX
b3JsZEUKK19fWk43V2ViQ29yZTE4UGxhdGZvcm1DQUxheWVyTWFjMThzZXRHZW9tZXRyeUZsaXBw
ZWRFYgogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxMHVuaXF1ZU5hbWVFdgogX19a
TjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxM2J1ZmZlckZvclR5cGVFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzc3RyaW5nRm9yVHlwZUVSS04z
V1RGNlN0cmluZ0UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCmluZGV4IGJjM2Q0MTAuLjZjZWNjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNzE3MCw2ICs3MTcwLDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZDRi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25cY2ZcSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUxlZ2FjeUFWQ0YuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcYXZmb3VuZGF0aW9uXEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2FcUGxhdGZv
cm1DQUxheWVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEdMQ29udGV4dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xjYWlyb1xHcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCI+CiAgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTg2NTUsNiAr
MTg2NTYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
YXZmb3VuZGF0aW9uXGNmXEluYmFuZFRleHRUcmFja1ByaXZhdGVMZWdhY3lBVkNGLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25c
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2FcUGxhdGZvcm1DQUZpbHRlcnMuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBTGF5
ZXJXaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEdMQ29udGV4dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCmluZGV4IGZjNmE2YTcuLmQwYWU1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY5MDQs
NiArNjkwNCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtZWRpYWNv
bnRyb2xzXE1lZGlhQ29udHJvbHNIb3N0LmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNcbWVk
aWFjb250cm9sczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cY3NzXENTU0dyaWRUZW1wbGF0ZVZhbHVlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUZXh0TGluZUJveGVzLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0UGFpbnRTdHlsZS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVxQbGF0Zm9ybUNB
TGF5ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcY2E8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGdlb2xvY2F0aW9uXENvb3JkaW5hdGVzLmgiPgpA
QCAtMTQ1MTcsNiArMTQ1MjMsMTIgQEAKICAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xVc2VyQWdlbnRTY3JpcHRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjc3NcQ1NTR3JpZFRlbXBsYXRlVmFsdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUZXh0TGluZUJveGVzLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNB
TGF5ZXJXaW4uaCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpbjwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxjc3NcQ1NTR3JhbW1hci55LmluIj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0NjE3ZTI4Li5m
YWJmNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC05NDksNiArOTQ5LDggQEAKIAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUx
IC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1
QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZG
ODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi87IH07CiAJ
CTJENkU0Njg0MTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2RTQ2ODIxN0Q2NjBG
NTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gKi87IH07CisJCTJENzBCQTEzMTgw
NzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQ
bGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLzsgfTsKKwkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhBIC8q
IFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNw
cCAqLzsgfTsKIAkJMkQ4Mjg3RjYxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgyODdG
NDE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMkQ4Mjg3
RjcxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4Mjg3RjUxNkU0QTAzODAwODZCRDAwIC8q
IEhpdFRlc3RMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJEOEZFQkRDMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDhG
RUJEQTE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwICovOyB9OwpAQCAt
NzQyOCw2ICs3NDMwLDggQEAKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5
UG9saWN5VmlvbGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDVCQzQyNjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25F
dmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25F
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkU0NjgyMTdENjYwRjUw
MEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXll
ck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXJN
YWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXll
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbGF0Zm9ybUNBTGF5
ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ4Mjg3RjQxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0TG9jYXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDgyODdGNTE2RTRBMDM4MDA4NkJE
MDAgLyogSGl0VGVzdExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhpdFRlc3RMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDhGRUJE
QTE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2ODMsNiArMTQ2ODcsNyBAQAogCQkJCTQ5NTg3ODFGMTJB
NTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tICovLAogCQkJCTBGMTMx
NjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLywKIAkJCQk0
OTU4NzgyMDEyQTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUxheWVyTWFjLm1tICovLAorCQkJ
CTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLywKIAkJ
CQkxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLywKIAkJCQkx
QUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJMEY1
ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi8sCkBAIC0x
NDcyNyw2ICsxNDczMiw3IEBACiAJCQkJMjkxN0I1NjAxNDczNDk2QzAwNTJDOUQwIC8qIExheWVy
Rmx1c2hTY2hlZHVsZXJDbGllbnQuaCAqLywKIAkJCQk0OTlCM0VEQzEyOERCNTAxMDBFNzI2QzIg
LyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oICovLAogCQkJCTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0Mw
NCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovLAorCQkJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwICovLAogCQkJCTQ5OUIzRUMzMTI4Q0NDNDcwMEU3MjZD
MiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCAqLywKIAkJCQk0OTNFNUUwODEyRDY0MjA1MDAwMjAwODEg
LyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi8sCiAJCQkJNDk0QkM0MEMxMkFFREQ5RTAwNzQz
QkQyIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwICovLApAQCAtMjQ1MjksNiArMjQ1MzUs
NyBAQAogCQkJCTJFNDM0NjUzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGMzgyMDg5OTE0N0QzNUY5MDAxMEJDMDYgLyogV29ya2VyUnVudGlt
ZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUE2NDNGMjBFQzA5NzI1MDA3Nzk2NjggLyog
V29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ3MEJBMTMxODA3
NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjM0NzQyRTkxMzQzNjM1MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzk2OURCNjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENJY2VDYW5k
aWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1ODgsNiArMjU1OTUsNyBA
QAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4Q0ZGMDREMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxl
TGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJENzBCQTE1MTgwNzRGODYwMDAx
OTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRENThFQjgx
N0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENH
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNG
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggYjk1ZTkwNC4uYmI0NDgx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAjZW5kaWYKICNpbmNsdWRl
ICJVUkwuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVy
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luLmgiCiAjaW5jbHVkZSAiU29mdExpbmtp
bmcuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAKQEAgLTE1OTIsNyArMTU5Miw3IEBAIFBs
YXRmb3JtTGF5ZXIqIEFWRldyYXBwZXI6OnBsYXRmb3JtTGF5ZXIoKQogICAgIGlmICghbV9sYXll
ckNsaWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX3ZpZGVvTGF5ZXJXcmFwcGVyID0g
UGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwg
bV9sYXllckNsaWVudC5nZXQoKSk7CisgICAgbV92aWRlb0xheWVyV3JhcHBlciA9IFBsYXRmb3Jt
Q0FMYXllcldpbjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5
ZXJDbGllbnQuZ2V0KCkpOwogICAgIGlmICghbV92aWRlb0xheWVyV3JhcHBlcikKICAgICAgICAg
cmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcxMjRhMGYuLjQ1YWVhNGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcApAQCAtNDgsOSArNDgsMTQgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIK
ICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIKKyNlbmRpZgorCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yODEsNiArMjg2LDM1
IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUo
R3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvCiAgICAgcmV0dXJuIGZhY3RvcnktPmNyZWF0ZUdy
YXBoaWNzTGF5ZXIoY2xpZW50KTsKIH0KIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK2Jvb2wg
R3JhcGhpY3NMYXllckNBOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7CisjZWxpZiBQTEFU
Rk9STShXSU4pCisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6ZmlsdGVyc0NhbkJlQ29t
cG9zaXRlZChmaWx0ZXJzKTsKKyNlbmRpZgorfQorI2VuZGlmCisgICAgCitQYXNzUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBOjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVy
TWFjOjpjcmVhdGUobGF5ZXJUeXBlLCBvd25lcik7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAg
cmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKGxheWVyVHlwZSwgb3duZXIpOworI2Vu
ZGlmCit9CisgICAgCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNB
OjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0
dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHBsYXRmb3JtTGF5ZXIsIG93bmVyKTsKKyNl
bGlmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUo
cGxhdGZvcm1MYXllciwgb3duZXIpOworI2VuZGlmCit9CisKIEdyYXBoaWNzTGF5ZXJDQTo6R3Jh
cGhpY3NMYXllckNBKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQogICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShOb0NvbnRlbnRzTGF5
ZXIpCkBAIC0yOTYsNyArMzMwLDcgQEAgR3JhcGhpY3NMYXllckNBOjpHcmFwaGljc0xheWVyQ0Eo
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgICAgICBtX2lzUGFnZVRpbGVkQmFja2lu
Z0xheWVyID0gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2xheWVyID0gUGxhdGZvcm1DQUxheWVyOjpj
cmVhdGUobGF5ZXJUeXBlLCB0aGlzKTsKKyAgICBtX2xheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxh
eWVyKGxheWVyVHlwZSwgdGhpcyk7CiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENvbnRl
bnRzU2NhbGVDaGFuZ2VkKTsKIH0KIApAQCAtNjE3LDcgKzY1MSw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVyT3BlcmF0aW9ucykKIHsKLSAgICBib29sIGNhbkNvbXBvc2l0ZUZpbHRlcnMgPSBQ
bGF0Zm9ybUNBTGF5ZXI6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVyT3BlcmF0aW9ucyk7
CisgICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChm
aWx0ZXJPcGVyYXRpb25zKTsKIAogICAgIGlmIChtX2ZpbHRlcnMgPT0gZmlsdGVyT3BlcmF0aW9u
cykKICAgICAgICAgcmV0dXJuIGNhbkNvbXBvc2l0ZUZpbHRlcnM7CkBAIC03ODEsNyArODE1LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKIAogICAgIGlmIChtX2NvbnRlbnRzU29saWRDb2xvci5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JCYWNrZ3Jv
dW5kQ29sb3I7Ci0gICAgICAgIG1fY29udGVudHNMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3Jl
YXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOworICAgICAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgdGhpcyk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX2NvbnRlbnRzTGF5
ZXItPnNldE5hbWUoIkJhY2tncm91bmQgQ29sb3IgTGF5ZXIiKTsKICNlbmRpZgpAQCAtODQ3LDcg
Kzg4MSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZv
cm1MYXllciogbWVkaWFMYXllcikKICAgICAvLyB0aGUgY3JlYXRvciBvZiB0aGUgcmF3IGxheWVy
IGlzIHVzaW5nIGl0IGZvciBzb21lIG90aGVyIHB1cnBvc2UuCiAgICAgLy8gRm9yIG5vdyB3ZSBk
b24ndCBzdXBwb3J0IHN1Y2ggYSBjYXNlLgogICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1D
QUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobWVkaWFMYXllcik7Ci0g
ICAgbV9jb250ZW50c0xheWVyID0gbWVkaWFMYXllciA/IChwbGF0Zm9ybUNBTGF5ZXIgPyBwbGF0
Zm9ybUNBTGF5ZXIgOiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShtZWRpYUxheWVyLCB0aGlzKSkg
OiAwOworICAgIG1fY29udGVudHNMYXllciA9IG1lZGlhTGF5ZXIgPyAocGxhdGZvcm1DQUxheWVy
ID8gcGxhdGZvcm1DQUxheWVyIDogY3JlYXRlUGxhdGZvcm1DQUxheWVyKG1lZGlhTGF5ZXIsIHRo
aXMpKSA6IDA7CiAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IG1lZGlhTGF5ZXIgPyBDb250
ZW50c0xheWVyRm9yTWVkaWEgOiBOb0NvbnRlbnRzTGF5ZXI7CiAKICAgICBub3RlU3VibGF5ZXJz
Q2hhbmdlZCgpOwpAQCAtODYwLDcgKzg5NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRD
b250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIGNhbnZhc0xheWVyKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgdG8gd3JhcCB0aGUg
aW5jb21pbmcgbGF5ZXIKLSAgICBtX2NvbnRlbnRzTGF5ZXIgPSBjYW52YXNMYXllciA/IFBsYXRm
b3JtQ0FMYXllcjo6Y3JlYXRlKGNhbnZhc0xheWVyLCB0aGlzKSA6IDA7CisgICAgbV9jb250ZW50
c0xheWVyID0gY2FudmFzTGF5ZXIgPyBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoY2FudmFzTGF5ZXIs
IHRoaXMpIDogMDsKICAgICAKICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gY2FudmFzTGF5
ZXIgPyBDb250ZW50c0xheWVyRm9yQ2FudmFzIDogTm9Db250ZW50c0xheWVyOwogCkBAIC0xMDk4
LDcgKzExMzIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyhjb25zdCBDb21taXRTdGF0ZSYgY29tbWl0U3RhdGUsIGNvbgogICAgICAgICBzdGF0aWMgQ29s
b3Igd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKICAgICAgICAgc3RhdGljIENvbG9yIHdh
c2hCb3JkZXJDb2xvcigyNTUsIDAsIDAsIDEwMCk7CiAgICAgICAgIAotICAgICAgICBtX3Zpc2li
bGVUaWxlV2FzaExheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXIg
PSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoY3JlYXRlUGxhdGZvcm1DQUxheWVyLCB0aGlzKTsKICAg
ICAgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiVmlzaWJsZSBUaWxlIFdhc2ggTGF5
ZXIgJXAiLCBtX3Zpc2libGVUaWxlV2FzaExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwogICAgICAg
ICBtX3Zpc2libGVUaWxlV2FzaExheWVyLT5zZXROYW1lKG5hbWUpOwogICAgICAgICBtX3Zpc2li
bGVUaWxlV2FzaExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOwpA
QCAtMTYwNiw3ICsxNjQwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVy
YWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAgICAgICAgICBtX3N0
cnVjdHVyYWxMYXllciA9IDA7CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExh
eWVyKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6
Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsIHRoaXMpOwor
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciwgdGhpcyk7CiAgICAgICAgICAg
ICBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CkBAIC0xNjE0LDcgKzE2NDgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0
dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICAgICAgICAgIG1f
c3RydWN0dXJhbExheWVyID0gMDsKIAogICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyKSB7
Ci0gICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRl
KFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOworICAgICAgICAgICAgbV9z
dHJ1Y3R1cmFsTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVMYXllciwgdGhpcyk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NzgsNyArMTgxMiw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0ltYWdlKCkKIHsKICAgICBpZiAobV9wZW5kaW5n
Q29udGVudHNJbWFnZSkgewogICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSkgewot
ICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgICAgICBtX2NvbnRl
bnRzTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVMYXllciwgdGhpcyk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgbV9jb250ZW50c0xh
eWVyLT5zZXROYW1lKCJJbWFnZSBMYXllciIpOwogI2VuZGlmCkBAIC0xODU5LDcgKzE4OTMsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cygpCiAgICAgYm9vbCBn
YWluZWRPckxvc3RDbGlwcGluZ0xheWVyID0gZmFsc2U7CiAgICAgaWYgKCFtX2NvbnRlbnRzQ2xp
cHBpbmdSZWN0LmNvbnRhaW5zKG1fY29udGVudHNSZWN0KSkgewogICAgICAgICBpZiAoIW1fY29u
dGVudHNDbGlwcGluZ0xheWVyKSB7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzQ2xpcHBpbmdMYXll
ciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5
ZXIsIHRoaXMpOworICAgICAgICAgICAgbV9jb250ZW50c0NsaXBwaW5nTGF5ZXIgPSBjcmVhdGVQ
bGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CiAg
ICAgICAgICAgICBtX2NvbnRlbnRzQ2xpcHBpbmdMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVl
KTsKICAgICAgICAgICAgIG1fY29udGVudHNDbGlwcGluZ0xheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KCkpOwogI2lmbmRlZiBOREVCVUcKQEAgLTIzNjYsNyArMjQwMCw3IEBAIGJvb2wg
R3JhcGhpY3NMYXllckNBOjpjcmVhdGVGaWx0ZXJBbmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25z
dCBLZXlmcmFtZVZhbHVlTGlzCiAgICAgICAgIAogICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IG9wZXJhdGlvbnMgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHZh
bHVlTGlzdC5hdChsaXN0SW5kZXgpKS52YWx1ZSgpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGxh
dGZvcm0gbGF5ZXIgZGlkbid0IGZhbGxiYWNrIHRvIHVzaW5nIHNvZnR3YXJlIGZpbHRlciBjb21w
b3NpdGluZyBpbnN0ZWFkLgotICAgIGlmICghUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVD
b21wb3NpdGVkKG9wZXJhdGlvbnMpKQorICAgIGlmICghZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChv
cGVyYXRpb25zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50IG51bUFuaW1hdGlv
bnMgPSBvcGVyYXRpb25zLnNpemUoKTsKQEAgLTI4OTgsNyArMjkzMiw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKGJvb2wgdXNlVGlsZWRMYXllcikKICAg
ICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUgPSB1c2VUaWxlZExheWVyID8g
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllciA6IFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlV2ViTGF5ZXI7CiAjZW5kaWYKIAotICAgIG1fbGF5ZXIgPSBQbGF0Zm9y
bUNBTGF5ZXI6OmNyZWF0ZShsYXllclR5cGUsIHRoaXMpOworICAgIG1fbGF5ZXIgPSBjcmVhdGVQ
bGF0Zm9ybUNBTGF5ZXIobGF5ZXJUeXBlLCB0aGlzKTsKIAogICAgIG1fdXNpbmdUaWxlZEJhY2tp
bmcgPSB1c2VUaWxlZExheWVyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAppbmRleCBmM2U0YzhiLi44YTEyM2Uw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb24uaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CkBAIC00Myw3ICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGxh
dGZvcm1DQUxheWVyOwogY2xhc3MgVHJhbnNmb3JtU3RhdGU7CiAKIGNsYXNzIEdyYXBoaWNzTGF5
ZXJDQSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgUGxhdGZvcm1DQUxheWVyQ2xpZW50
IHsKQEAgLTk4LDYgKzk4LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
ICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKQEAg
LTE4NSw2ICsxODYsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2
b2lkIHVwZGF0ZUZpbHRlcnMoKTsKICNlbmRpZgorICAgIAorICAgIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpOworICAgIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciosIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpOwogCiAgICAgUGxhdGZvcm1DQUxheWVyKiBwcmltYXJ5TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSA/IG1fc3RydWN0dXJh
bExheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQogICAgIFBsYXRmb3JtQ0FMYXllciogaG9z
dExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKaW5kZXggMDkwZGVm
NS4uOGRiNTAzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaApAQCAtNTMsNiArNTMsMTEgQEAgY2xhc3Mg
VGltaW5nRnVuY3Rpb247CiBjbGFzcyBQbGF0Zm9ybUNBQW5pbWF0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8UGxhdGZvcm1DQUFuaW1hdGlvbj4gewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBQ
bGF0Zm9ybUNBTGF5ZXI7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGZyaWVuZCBjbGFzcyBQbGF0
Zm9ybUNBTGF5ZXJNYWM7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgZnJpZW5kIGNsYXNzIFBs
YXRmb3JtQ0FMYXllcldpbjsKKyNlbmRpZgogICAgIAogICAgIGVudW0gQW5pbWF0aW9uVHlwZSB7
IEJhc2ljLCBLZXlmcmFtZSB9OwogICAgIGVudW0gRmlsbE1vZGVUeXBlIHsgTm9GaWxsTW9kZSwg
Rm9yd2FyZHMsIEJhY2t3YXJkcywgQm90aCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmOGJmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgi
CisKKyNpZiBVU0UoQ0EpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1DQUxheWVy
Ojp+UGxhdGZvcm1DQUxheWVyKCkKK3sKKyAgICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFs
c28gY2xlYXJzIGl0IGluIHRoZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IGF0dGVtcHRzCisgICAgLy8g
dG8gdXNlIHRoZSBHcmFwaGljc0xheWVyQ0EgYWZ0ZXIgaXQgaGFzIGJlZW4gZGVzdHJveWVkLgor
ICAgIHNldE93bmVyKDApOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCmlu
ZGV4IDAzMGNmMTQuLmI2MDk1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgUGxhdGZvcm1DQUxheWVyX2gKQEAgLTUwLDYgKzUw
LDExIEBAIGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+ID4gUGxhdGZvcm1DQUxheWVyTGlzdDsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1DQUxheWVyPiB7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJNYWM7CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbjsKKyNlbmRpZgogcHVi
bGljOgogICAgIHN0YXRpYyBDRlRpbWVJbnRlcnZhbCBjdXJyZW50VGltZVRvTWVkaWFUaW1lKGRv
dWJsZSB0KSB7IHJldHVybiBDQUN1cnJlbnRNZWRpYVRpbWUoKSArIHQgLSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsgfQogCkBAIC02OSwxNzggKzc0LDE0NiBAQCBwdWJsaWM6CiAgICAg
fTsKICAgICBlbnVtIEZpbHRlclR5cGUgeyBMaW5lYXIsIE5lYXJlc3QsIFRyaWxpbmVhciB9Owog
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKLSAgICAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHBh
c3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVj
YXVzZSBQbGF0Zm9ybUxheWVyCi0gICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2Jq
IEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZvaWQqIHBsYXRmb3Jt
TGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsK
IAotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIAotICAgIH5Q
bGF0Zm9ybUNBTGF5ZXIoKTsKLSAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUg
bGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVjYXVzZSBQbGF0
Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMr
Ky4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgogICAgIHN0YXRpYyBQ
bGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKTsKLSAg
ICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotI2Vsc2UKLSAgICBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVBhZ2VUaWxlZEJhY2tpbmdMYXllciB8
fCBtX2xheWVyVHlwZSA9PSBMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcjsgfQotI2VuZGlmCisg
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIu
Z2V0KCk7IH0KIAotICAgIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3Q7Ci0gICAg
Ci0gICAgLy8gQSBsaXN0IG9mIHN1YmxheWVycyB0aGF0IEdyYXBoaWNzTGF5ZXJDQSBzaG91bGQg
bWFpbnRhaW4gYXMgdGhlIGZpcnN0IHN1YmxheWVycy4KLSAgICBjb25zdCBQbGF0Zm9ybUNBTGF5
ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbVN1YmxheWVy
cy5nZXQoKTsgfQotICAgIAotICAgIHN0YXRpYyBib29sIGlzVmFsdWVGdW5jdGlvblN1cHBvcnRl
ZCgpOwotICAgIAotICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyOyB9Ci0gICAgdm9pZCBzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
KTsKKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xheWVyKCkgY29uc3QgPSAwOwog
Ci0gICAgdm9pZCBhbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7Ci0g
ICAgdm9pZCBlbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCk7CisgICAgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgeyBtX293bmVyID0gb3du
ZXI7IH0KIAotICAgIC8vIExheW91dCBzdXBwb3J0Ci0gICAgdm9pZCBzZXROZWVkc0xheW91dCgp
OworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2lu
VGltZSkgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9h
dFJlY3QqIGRpcnR5UmVjdCA9IDApID0gMDsKIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCogZGlydHlSZWN0ID0gMCk7Ci0gICAgCi0gICAgLy8gVGhpcyB0ZWxscyB0
aGUgbGF5ZXIgdHJlZSB0byBjb21taXQgY2hhbmdlcyBhbmQgcGVyZm9ybSBhIHJlbmRlciwgd2l0
aG91dCBkbyBhIHNldE5lZWRzRGlzcGxheSBvbiBhbnkgbGF5ZXIuCi0gICAgdm9pZCBzZXROZWVk
c0NvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0NoYW5nZWQoKSA9IDA7CiAK
LSAgICB2b2lkIHNldENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIAogICAgIExheWVyVHlwZSBsYXll
clR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZTsgfQogCi0gICAgUGxhdGZvcm1DQUxh
eWVyKiBzdXBlcmxheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigp
OwotICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QmKTsKLSAg
ICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpOwotICAgIHZvaWQgYXBwZW5kU3VibGF5ZXIoUGxh
dGZvcm1DQUxheWVyKik7Ci0gICAgdm9pZCBpbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIq
LCBzaXplX3QgaW5kZXgpOwotICAgIHZvaWQgcmVwbGFjZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXll
ciogcmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FM
YXllciogc3VwZXJsYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJv
bVN1cGVybGF5ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQ
bGF0Zm9ybUNBTGF5ZXJMaXN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxTdWJs
YXllcnMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN1YmxheWVyKFBsYXRmb3JtQ0FM
YXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxh
eWVyKiwgc2l6ZV90IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTdWJsYXll
cihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKikgPSAwOworCisg
ICAgLy8gQSBsaXN0IG9mIHN1YmxheWVycyB0aGF0IEdyYXBoaWNzTGF5ZXJDQSBzaG91bGQgbWFp
bnRhaW4gYXMgdGhlIGZpcnN0IHN1YmxheWVycy4KKyAgICB2aXJ0dWFsIGNvbnN0IFBsYXRmb3Jt
Q0FMYXllckxpc3QqIGN1c3RvbVN1YmxheWVycygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRoaXMg
bWV0aG9kIHJlbW92ZXMgdGhlIHN1YmxheWVycyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcGFyZW50
cyB0aGVtIHRvIHRoZSBjdXJyZW50IGxheWVyLgogICAgIC8vIEFueSBzdWJsYXllcnMgcHJldmlv
dXNseSBpbiB0aGUgY3VycmVudCBsYXllciBhcmUgcmVtb3ZlZC4KLSAgICB2b2lkIGFkb3B0U3Vi
bGF5ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKTsKLSAgICAKLSAgICB2b2lkIGFkZEFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0
aW9uKTsgICAgCi0gICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXkpOwotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KTsKLSAgICAKLSAgICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxh
eWVyKik7Ci0gICAgCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0T3Bh
cXVlKGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0OwotICAgIHZvaWQgc2V0
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc09wYXF1ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BhcXVlKGJvb2wpID0gMDsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJvdW5kcygp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKworICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmKSA9IDA7CiAg
ICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIHsgc2V0UG9zaXRpb24o
RmxvYXRQb2ludDNEKHBvcy54KCksIHBvcy55KCksIDApKTsgfQogCi0gICAgRmxvYXRQb2ludDNE
IGFuY2hvclBvaW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmKTsKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNE
JikgPSAwOworCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpID0gMDsKKworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggc3Vi
bGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVy
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwogCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGlkZGVu
KGJvb2wpID0gMDsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCkg
PSAwOwogCi0gICAgdm9pZCBzZXRIaWRkZW4oYm9vbCk7CisgICAgdmlydHVhbCBib29sIGlzRG91
YmxlU2lkZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJv
b2wpID0gMDsKIAotICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wpOworICAgIHZpcnR1
YWwgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRN
YXNrc1RvQm91bmRzKGJvb2wpID0gMDsKIAotICAgIGJvb2wgaXNEb3VibGVTaWRlZCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGFjY2Vs
ZXJhdGVzRHJhd2luZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0
ZXNEcmF3aW5nKGJvb2wpID0gMDsKIAotICAgIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKLSAgICAKLSAgICBib29sIGFjY2VsZXJh
dGVzRHJhd2luZygpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wp
OworICAgIHZpcnR1YWwgQ0ZUeXBlUmVmIGNvbnRlbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVSZWYpID0gMDsKIAotICAgIENGVHlwZVJlZiBjb250
ZW50cygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAotICAgIHZv
aWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpID0gMDsKIAotICAgIHZvaWQgc2V0TWlu
aWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwotICAgIHZvaWQgc2V0TWFnbmlmaWNhdGlvbkZp
bHRlcihGaWx0ZXJUeXBlKTsKKyAgICB2aXJ0dWFsIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
JikgPSAwOwogCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9y
ZGVyV2lkdGgoZmxvYXQpID0gMDsKIAotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpID0gMDsKIAotICAg
IHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIGZsb2F0IG9w
YWNpdHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0g
MDsKIAotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdDsKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxv
YXQpOwotICAgIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldEZpbHRlcnMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNv
bXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHZvaWQgY29weUZpbHRlcnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWx0ZXJz
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGZpbHRlcnND
YW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weUZpbHRlcnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopID0gMDsKICNlbmRp
ZgogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYpID0gMDsKIAotICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKIAotICAgIHZvaWQgc2V0U3BlZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVl
ZChmbG9hdCkgPSAwOwogCi0gICAgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKTsK
LSAgICAKLSAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250
ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGltZU9mZnNldChDRlRpbWVJ
bnRlcnZhbCkgPSAwOwogCi0gICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID4mIGFuaW1hdGlvbnMo
KSB7IHJldHVybiBtX2FuaW1hdGlvbnM7IH0KLSNlbmRpZgorICAgIHZpcnR1YWwgVGlsZWRCYWNr
aW5nKiB0aWxlZEJhY2tpbmcoKSA9IDA7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFkZWZpbmVk
KE5ERUJVRykKLSAgICB2b2lkIHByaW50VHJlZSgpIGNvbnN0OwotI2VuZGlmCisjaWYgUExBVEZP
Uk0oV0lOKQorICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzTGF5b3V0KCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdCgpID0gMDsKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVhbCB2
b2lkIHByaW50VHJlZSgpIGNvbnN0ID0gMDsKKyNlbmRpZiAvLyBOREVCVUcKKyNlbmRpZiAvLyBQ
TEFURk9STShXSU4pCiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzeW5jaHJvbm91c2x5
RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
eW5jaHJvbm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNl
bmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgUGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSwgUGxhdGZv
cm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOwotCi1wcml2YXRlOgotICAgIEFWUGxh
eWVyTGF5ZXIqIHBsYXllckxheWVyKCkgY29uc3Q7CisgICAgUGxhdGZvcm1DQUxheWVyKFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpCisgICAgICAgIDogbV9vd25lcihvd25lcikKKyAgICB7
CiAKLSAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG1fb3duZXI7Ci0gICAgTGF5ZXJUeXBlIG1f
bGF5ZXJUeXBlOwotICAgIAotICAgIE93blB0cjxQbGF0Zm9ybUNBTGF5ZXJMaXN0PiBtX2N1c3Rv
bVN1YmxheWVyczsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV9sYXllcjsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lO
KQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPiBtX2Fu
aW1hdGlvbnM7Ci0jZW5kaWYKKyAgICB9CiAKICNpZiBQTEFURk9STShNQUMpCi0jaWZkZWYgX19P
QkpDX18KLSAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fZGVsZWdhdGU7Ci0jZWxzZQotICAgIFJl
dGFpblB0cjx2b2lkPiBtX2RlbGVnYXRlOwotI2VuZGlmCisgICAgdmlydHVhbCBBVlBsYXllckxh
eWVyKiBwbGF5ZXJMYXllcigpIGNvbnN0ID0gMDsKICNlbmRpZgorCisgICAgTGF5ZXJUeXBlIG1f
bGF5ZXJUeXBlOworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX2xheWVyOworICAgIFBs
YXRmb3JtQ0FMYXllckNsaWVudCogbV9vd25lcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTk0MGM3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1D
QUxheWVyTWFjX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUxheWVyTWFjX2gKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCitP
QkpDX0NMQVNTIE5TT2JqZWN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRm
b3JtQ0FMYXllck1hYyBGSU5BTCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiBwYXNz
ZXMgdGhlIGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJlY2F1
c2UgUGxhdGZvcm1MYXllcgorICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9iaiBD
IGFuZCBDKysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxh
eWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKKworICAgIH5QbGF0Zm9ybUNBTGF5ZXJNYWMo
KTsKKworICAgIHZpcnR1YWwgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBsYXllclR5cGUoKSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5
ZXIgfHwgbGF5ZXJUeXBlKCkgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0
eVJlY3QgPSAwKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0NoYW5n
ZWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiBzdXBlcmxheWVy
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21TdXBlcmxheWVy
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9y
bUNBTGF5ZXJMaXN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbFN1Ymxh
eWVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdWJsYXllcihQbGF0Zm9y
bUNBTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGxh
dGZvcm1DQUxheWVyKiwgc2l6ZV90IGluZGV4KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwbGFjZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciogcmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5
ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QqIGN1
c3RvbVN1YmxheWVycygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY3VzdG9tU3VibGF5ZXJz
LmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFkb3B0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXll
ciogc291cmNlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5p
bWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0T3BhcXVlKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBGbG9hdFJlY3Qg
Ym91bmRzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25z
dCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIHBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBGbG9hdFBvaW50M0QgYW5j
aG9yUG9pbnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9p
bnQoY29uc3QgRmxvYXRQb2ludDNEJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRI
aWRkZW4oYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlw
cGVkKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzRG91YmxlU2lkZWQoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBib29sIGFjY2VsZXJhdGVzRHJhd2luZygpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIENGVHlwZVJlZiBjb250ZW50cygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVSZWYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgdm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE1hZ25pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSkgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCkgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSBPVkVSUklERTsKKworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3B5
RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
ZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVGlsZWRCYWNr
aW5nKiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lcikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZv
cm1DQUxheWVyTWFjKExheWVyVHlwZSwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpOworCisgICAgdmlydHVhbCBBVlBsYXllckxheWVyKiBwbGF5ZXJMYXllcigp
IGNvbnN0IE9WRVJSSURFOworCisgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2RlbGVnYXRlOwor
ICAgIE93blB0cjxQbGF0Zm9ybUNBTGF5ZXJMaXN0PiBtX2N1c3RvbVN1YmxheWVyczsKK307CisK
K30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8v
IFBsYXRmb3JtQ0FMYXllck1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQppbmRleCBmYjdj
ZjRmLi42NjdmMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2ltcG9ydCAiUGxhdGZv
cm1DQUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIKIAogI2ltcG9ydCAi
QW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKQEAgLTQ1
LDE3ICs0NSwzNyBAQAogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUu
aD4KLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQogU09GVF9MSU5L
X0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKIAotdXNpbmcgc3RkOjptaW47Ci11
c2luZyBzdGQ6Om1heDsKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1Bhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShMYXllclR5cGUgbGF5
ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGxhdGZvcm1DQUxheWVyTWFjKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKK30KKwor
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlQ3VzdG9tLCBz
dGF0aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7Cit9CisK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBvaW50ZXIgPSBAIldLUGxh
dGZvcm1DQUxheWVyIjsKK1BsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIodm9pZCogcGxhdGZvcm1MYXllcikKK3sKKyAgICBpZiAoIXBsYXRmb3JtTGF5ZXIp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gUG9pbnRlciB0byBQbGF0Zm9ybUNBTGF5ZXIg
aXMga2VwdCBpbiBhIGtleSBvZiB0aGUgQ0FMYXllcgorICAgIFBsYXRmb3JtQ0FMYXllciogcGxh
dGZvcm1DQUxheWVyID0gbmlsOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAg
IHBsYXRmb3JtQ0FMYXllciA9IHN0YXRpY19jYXN0PFBsYXRmb3JtQ0FMYXllcio+KFtbc3RhdGlj
X2Nhc3Q8Q0FMYXllcio+KHBsYXRmb3JtTGF5ZXIpIHZhbHVlRm9yS2V5OnBsYXRmb3JtQ0FMYXll
clBvaW50ZXJdIHBvaW50ZXJWYWx1ZV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICByZXR1cm4gcGxhdGZvcm1DQUxheWVyOworfQorCiAvLyBUaGlzIHZhbHVlIG11c3QgYmUg
dGhlIHNhbWUgYXMgaW4gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQogc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgV0tOb25aZXJvQmVnaW5UaW1lRmxhZyA9IEAiV0tQbGF0Zm9ybUNBQW5pbWF0aW9u
Tm9uWmVyb0JlZ2luVGltZUZsYWciOwogCkBAIC0xMTIsMTcgKzEzMiw5IEBAIHN0YXRpYyBkb3Vi
bGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQogLSAoQk9PTClhY2Nl
bGVyYXRlc0RyYXdpbmc7CiBAZW5kCiAKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3Jt
Q0FMYXllclBvaW50ZXIgPSBAIldLUGxhdGZvcm1DQUxheWVyIjsKLQotYm9vbCBQbGF0Zm9ybUNB
TGF5ZXI6OmlzVmFsdWVGdW5jdGlvblN1cHBvcnRlZCgpCi17Ci0gICAgc3RhdGljIGJvb2wgc0hh
dmVWYWx1ZUZ1bmN0aW9uID0gW0NBUHJvcGVydHlBbmltYXRpb24gaW5zdGFuY2VzUmVzcG9uZFRv
U2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlRnVuY3Rpb246KV07Ci0gICAgcmV0dXJuIHNIYXZl
VmFsdWVGdW5jdGlvbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE93bmVyKFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0T3du
ZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICBtX293bmVyID0gb3duZXI7
CisgICAgUGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcihvd25lcik7CiAgICAgCiAgICAgLy8gQ2hh
bmdlIHRoZSBkZWxlZ2F0ZSdzIG93bmVyIGlmIG5lZWRlZAogICAgIGlmIChtX2RlbGVnYXRlKQpA
QCAtMTU5LDE4ICsxNzEsOCBAQCBzdGF0aWMgTlNTdHJpbmcqIHRvQ0FGaWx0ZXJUeXBlKFBsYXRm
b3JtQ0FMYXllcjo6RmlsdGVyVHlwZSB0eXBlKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKExheWVyVHlwZSBsYXllclR5cGUs
IFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQbGF0Zm9ybUNBTGF5ZXIobGF5ZXJUeXBlLCAwLCBvd25lcikpOwotfQotCi1QYXNzUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUodm9pZCogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcihMYXllclR5cGVDdXN0b20sIHN0YXRpY19jYXN0PFBsYXRm
b3JtTGF5ZXIqPihwbGF0Zm9ybUxheWVyKSwgb3duZXIpKTsKLX0KLQotUGxhdGZvcm1DQUxheWVy
OjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5
ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQor
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlIGxheWVyVHlw
ZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCisg
ICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiAgICAgaWYgKGxheWVyKSB7CkBAIC0yMzAsMTMgKzIzMiwxMyBAQCBQbGF0Zm9ybUNB
TGF5ZXI6OlBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVy
KiBsYXllciwgUGxhdAogICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgewogICAgICAg
ICBtX2N1c3RvbVN1YmxheWVycyA9IGFkb3B0UHRyKG5ldyBQbGF0Zm9ybUNBTGF5ZXJMaXN0KDEp
KTsKICAgICAgICAgQ0FMYXllciogdGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyID0gW3N0YXRp
Y19jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyICo+KG1fbGF5ZXIuZ2V0KCkpIHRpbGVDb250YWlu
ZXJMYXllcl07Ci0gICAgICAgICgqbV9jdXN0b21TdWJsYXllcnMpWzBdID0gUGxhdGZvcm1DQUxh
eWVyOjpjcmVhdGUodGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyLCAwKTsKKyAgICAgICAgKCpt
X2N1c3RvbVN1YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZSh0aWxlQ2Fj
aGVUaWxlQ29udGFpbmVyTGF5ZXIsIDApOwogICAgIH0KICAgICAKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNB
TGF5ZXI6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyTWFjOjpjbG9uZShQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAogewogICAgIExheWVyVHlwZSB0eXBlOwogICAgIHN3
aXRjaCAobGF5ZXJUeXBlKCkpIHsKQEAgLTI1MSw4ICsyNTMsOCBAQCBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBlTGF5ZXI7CiAgICAgICAgIGJyZWFrOwog
ICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNB
TGF5ZXI6OmNyZWF0ZSh0eXBlLCBvd25lcik7Ci0KKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBuZXdMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKKyAg
ICAKICAgICBuZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24oKSk7CiAgICAgbmV3TGF5ZXIt
PnNldEJvdW5kcyhib3VuZHMoKSk7CiAgICAgbmV3TGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hv
clBvaW50KCkpOwpAQCAtMjc5LDEzICsyODEsOSBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQog
ICAgIHJldHVybiBuZXdMYXllcjsKIH0KIAotUGxhdGZvcm1DQUxheWVyOjp+UGxhdGZvcm1DQUxh
eWVyKCkKK1BsYXRmb3JtQ0FMYXllck1hYzo6flBsYXRmb3JtQ0FMYXllck1hYygpCiB7CiAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0VmFsdWU6bmlsIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVy
XTsKLQotICAgIC8vIENsZWFyIHRoZSBvd25lciwgd2hpY2ggYWxzbyBjbGVhcnMgaXQgaW4gdGhl
IGRlbGVnYXRlIHRvIHByZXZlbnQgYXR0ZW1wdHMgCi0gICAgLy8gdG8gdXNlIHRoZSBHcmFwaGlj
c0xheWVyQ0EgYWZ0ZXIgaXQgaGFzIGJlZW4gZGVzdHJveWVkLgotICAgIHNldE93bmVyKDApOwog
ICAgIAogICAgIC8vIFJlbW92ZSB0aGUgb3duZXIgcG9pbnRlciBmcm9tIHRoZSBkZWxlZ2F0ZSBp
biBjYXNlIHRoZXJlIGlzIGEgcGVuZGluZyBhbmltYXRpb25TdGFydGVkIGV2ZW50LgogICAgIFtz
dGF0aWNfY2FzdDxXZWJBbmltYXRpb25EZWxlZ2F0ZSo+KG1fZGVsZWdhdGUuZ2V0KCkpIHNldE93
bmVyOm5pbF07CkBAIC0yOTQsMzEgKzI5MiwxMyBAQCBQbGF0Zm9ybUNBTGF5ZXI6On5QbGF0Zm9y
bUNBTGF5ZXIoKQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4o
bV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLVBsYXRmb3JtQ0FMYXllciogUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIodm9pZCogcGxhdGZvcm1MYXllcikKLXsKLSAgICBp
ZiAoIXBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAgICAvLyBQ
b2ludGVyIHRvIFBsYXRmb3JtQ0FMYXllciBpcyBrZXB0IGluIGEga2V5IG9mIHRoZSBDQUxheWVy
Ci0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIgPSBuaWw7Ci0gICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgcGxhdGZvcm1DQUxheWVyID0gc3RhdGljX2Nhc3Q8
UGxhdGZvcm1DQUxheWVyKj4oW1tzdGF0aWNfY2FzdDxDQUxheWVyKj4ocGxhdGZvcm1MYXllcikg
dmFsdWVGb3JLZXk6cGxhdGZvcm1DQUxheWVyUG9pbnRlcl0gcG9pbnRlclZhbHVlXSk7Ci0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXI7Ci19
Ci0KLVBsYXRmb3JtTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkK
IHsKICAgICBpZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5p
bWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlSZWN0KQpAQCAt
MzI4LDI2ICszMDgsMjYgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShj
b25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiB9CiAgICAgCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNDaGFuZ2VkKCkKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c0NoYW5nZWQoKQogewogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzQ2hh
bmdlZF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QbGF0Zm9ybUNBTGF5
ZXIqIFBsYXRmb3JtQ0FMYXllcjo6c3VwZXJsYXllcigpIGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIq
IFBsYXRmb3JtQ0FMYXllck1hYzo6c3VwZXJsYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBs
YXRmb3JtQ0FMYXllcihbbV9sYXllci5nZXQoKSBzdXBlcmxheWVyXSk7CiB9CiAKLXZvaWQgUGxh
dGZvcm1DQUxheWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRT
dWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkK
IHsKICAgICAvLyBTaG9ydCBjaXJjdWl0aW5nIGhlcmUgbm90IG9ubHkgYXZvaWRzIHRoZSBhbGxv
Y2F0aW9uIG9mIHN1YmxheWVycywgYnV0IGF2b2lkcyA8cmRhcjovL3Byb2JsZW0vNzM5MDcxNj4g
KHNlZSBiZWxvdykKICAgICBpZiAobGlzdC5zaXplKCkgPT0gMCkgewpAQCAtMzY1LDcgKzM0NSw3
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxh
eWVyTGlzdCYgbGlzdCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpyZW1vdmVBbGxTdWJsYXllcnMoKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnJlbW92ZUFsbFN1YmxheWVycygpCiB7CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzczOTA3MTY+OiAtW0NBTGF5ZXIgc2V0U3VibGF5ZXJzOl0gY3Jhc2hlcyBp
ZiBzdWJsYXllcnMgaXMgYW4gZW1wdHkgYXJyYXksIG9yIG5pbCwgdW5kZXIgR0MuCiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCkBAIC0zNzcsNyArMzU3LDcgQEAgdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVycygpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1D
QUxheWVyKiBsYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjphcHBlbmRTdWJsYXllcihQ
bGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgIEFTU0VSVChtX2xheWVyICE9IGxheWVyLT5tX2xheWVyKTsKQEAgLTM4NSw3ICszNjUs
NyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVy
KiBsYXllcikKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjppbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBzaXplX3Qg
aW5kZXgpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1D
QUxheWVyKiBsYXllciwgc2l6ZV90IGluZGV4KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIEFTU0VSVChtX2xheWVyICE9IGxheWVyLT5tX2xheWVyKTsKQEAgLTM5Myw3
ICszNzMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1D
QUxheWVyKiBsYXllciwgc2l6ZV90IGluZGV4KQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBs
YXRmb3JtQ0FMYXllciogbGF5ZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiAgICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXItPm1fbGF5ZXIpOwpAQCAtNDAxLDcgKzM4MSw3
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVy
KiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxh
eWVyKiBzb3VyY2UpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YWRvcHRTdWJsYXllcnMoUGxh
dGZvcm1DQUxheWVyKiBzb3VyY2UpCiB7CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9w
cm9ibGVtLzczOTA3MTY+OiAtW0NBTGF5ZXIgc2V0U3VibGF5ZXJzOl0gY3Jhc2hlcyBpZiBzdWJs
YXllcnMgaXMgYW4gZW1wdHkgYXJyYXksIG9yIG5pbCwgdW5kZXIgR0MuCiAgICAgTlNBcnJheSog
c3VibGF5ZXJzID0gW3NvdXJjZS0+bV9sYXllci5nZXQoKSBzdWJsYXllcnNdOwpAQCAtNDE5LDcg
KzM5OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNB
TGF5ZXIqIHNvdXJjZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBs
YXRmb3JtQ0FBbmltYXRpb24qIGFuaW1hdGlvbikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjph
ZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24q
IGFuaW1hdGlvbikKIHsKICAgICAvLyBBZGQgdGhlIGRlbGVnYXRlCiAgICAgaWYgKCFtX2RlbGVn
YXRlKSB7CkBAIC00MzcsMTQgKzQxNywxNCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5p
bWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJl
bW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyTWFjOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgcmVtb3ZlQW5p
bWF0aW9uRm9yS2V5OmtleV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1Q
YXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9u
Rm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkK
IHsKICAgICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19j
YXN0PENBUHJvcGVydHlBbmltYXRpb24qPihbbV9sYXllci5nZXQoKSBhbmltYXRpb25Gb3JLZXk6
a2V5XSk7CiAgICAgaWYgKCFwcm9wZXJ0eUFuaW1hdGlvbikKQEAgLTQ1Miw0NCArNDMyLDQ0IEBA
IFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyOjphbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrCiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246
OmNyZWF0ZShwcm9wZXJ0eUFuaW1hdGlvbik7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpz
ZXRNYXNrKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6
c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldE1hc2s6bGF5ZXIgPyBsYXllci0+cGxh
dGZvcm1MYXllcigpIDogMF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1i
b29sIFBsYXRmb3JtQ0FMYXllcjo6aXNPcGFxdWUoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OmlzT3BhcXVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgaXNP
cGFxdWVdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3BhcXVlKGJvb2wgdmFsdWUp
Cit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3BhcXVl
OnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQ
bGF0Zm9ybUNBTGF5ZXI6OmJvdW5kcygpIGNvbnN0CitGbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVy
TWFjOjpib3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBib3VuZHNd
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVj
dCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Qm91bmRzOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBvc2l0aW9uKCkgY29uc3QKK0Zs
b2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBD
R1BvaW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgcG9zaXRpb25dOwogICAgIHJldHVybiBGbG9h
dFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIuZ2V0KCkgelBvc2l0aW9uXSk7CiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0Qm
IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55
KCkpXTsKQEAgLTQ5Nyw3ICs0NzcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29u
c3QKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFuY2hvclBvaW50KCkgY29uc3QK
IHsKICAgICBDR1BvaW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdOwogICAg
IGZsb2F0IHogPSAwOwpAQCAtNTA1LDcgKzQ4NSw3IEBAIEZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNB
TGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50
LngsIHBvaW50LnksIHopOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9p
bnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEFuY2hvclBvaW50OkNH
UG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKV07CkBAIC01MTMsMTE5ICs0OTMsMTE5IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
IHZhbHVlKQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotVHJhbnNmb3JtYXRp
b25NYXRyaXggUGxhdGZvcm1DQUxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRp
b25NYXRyaXggUGxhdGZvcm1DQUxheWVyTWFjOjp0cmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJl
dHVybiBbbV9sYXllci5nZXQoKSB0cmFuc2Zvcm1dOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyTWFjOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xh
eWVyLmdldCgpIHNldFRyYW5zZm9ybTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXI6OnN1YmxheWVy
VHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllck1h
Yzo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQo
KSBzdWJsYXllclRyYW5zZm9ybV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJs
YXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCit2b2lkIFBs
YXRmb3JtQ0FMYXllck1hYzo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAg
IFttX2xheWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOnZhbHVlXTsKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRkZW4o
Ym9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRIaWRkZW4oYm9vbCB2YWx1
ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQo
KSBzZXRIaWRkZW46dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVlKQogewog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEdl
b21ldHJ5RmxpcHBlZDp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQog
Ci1ib29sIFBsYXRmb3JtQ0FMYXllcjo6aXNEb3VibGVTaWRlZCgpIGNvbnN0Citib29sIFBsYXRm
b3JtQ0FMYXllck1hYzo6aXNEb3VibGVTaWRlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xh
eWVyLmdldCgpIGlzRG91YmxlU2lkZWRdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
RG91YmxlU2lkZWQoYm9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXREb3Vi
bGVTaWRlZChib29sIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIFttX2xheWVyLmdldCgpIHNldERvdWJsZVNpZGVkOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjptYXNrc1RvQm91bmRz
KCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjptYXNrc1RvQm91bmRzKCkgY29uc3QK
IHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgbWFza3NUb0JvdW5kc107CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRm
b3JtQ0FMYXllck1hYzo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQogewogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldE1hc2tzVG9Cb3Vu
ZHM6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotYm9vbCBQbGF0
Zm9ybUNBTGF5ZXI6OmFjY2VsZXJhdGVzRHJhd2luZygpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FM
YXllck1hYzo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5
ZXIuZ2V0KCkgYWNjZWxlcmF0ZXNEcmF3aW5nXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyTWFjOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0Ry
YXdpbmcpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOmFjY2VsZXJhdGVzRHJhd2luZ107CiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1DRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyOjpj
b250ZW50cygpIGNvbnN0CitDRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyTWFjOjpjb250ZW50cygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGNvbnRlbnRzXTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzKENGVHlwZVJlZiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50cyhDRlR5cGVSZWYgdmFsdWUpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6
c3RhdGljX2Nhc3Q8aWQ+KGNvbnN0X2Nhc3Q8dm9pZCo+KHZhbHVlKSldOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRz
UmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNl
dENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzUmVjdDp2YWx1
ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRm
b3JtQ0FMYXllck1hYzo6c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
TWluaWZpY2F0aW9uRmlsdGVyOnRvQ0FGaWx0ZXJUeXBlKHZhbHVlKV07CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFnbmlmaWNh
dGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNl
dE1hZ25pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRNYWduaWZpY2F0aW9uRmls
dGVyOnRvQ0FGaWx0ZXJUeXBlKHZhbHVlKV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogfQogCi1Db2xvciBQbGF0Zm9ybUNBTGF5ZXI6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CitD
b2xvciBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFttX2xheWVyLmdldCgpIGJhY2tncm91bmRDb2xvcl07CiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUp
CiB7CiAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwogICAgIHZhbHVlLmdldFJHQkEoY29tcG9u
ZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CkBA
IC02MzgsMTQgKzYxOCwxNCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRCb3Jk
ZXJXaWR0aDp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkK
IHsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0UkdCQShjb21wb25l
bnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKQEAg
LTY1OCwxMiArNjM4LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihj
b25zdCBDb2xvciYgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1m
bG9hdCBQbGF0Zm9ybUNBTGF5ZXI6Om9wYWNpdHkoKSBjb25zdAorZmxvYXQgUGxhdGZvcm1DQUxh
eWVyTWFjOjpvcGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgb3Bh
Y2l0eV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3Bh
Y2l0eTp2YWx1ZV07CkBAIC02NzEsODggKzY1MSw4OCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c2V0T3BhY2l0eShmbG9hdCB2YWx1ZSkKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQogewogICAgIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJz
T25MYXllcih0aGlzLCBmaWx0ZXJzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmNvcHlG
aWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZUxheWVyKQordm9pZCBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OmNvcHlGaWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNv
dXJjZUxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xh
eWVyLmdldCgpIHNldEZpbHRlcnM6W3NvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkgZmlsdGVy
c11dOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNB
TGF5ZXI6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKK2Jvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgLy8gUmV0dXJuIGZhbHNlIGlm
IHRoZXJlIGFyZSBubyBmaWx0ZXJzIHRvIGF2b2lkIG5lZWRsZXNzIHdvcmsKICAgICBpZiAoIWZp
bHRlcnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsK
ICAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNVU1RPTToKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFU
RURfQ1VTVE9NOgogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBG
b3Igbm93IHdlIGNhbiBvbmx5IGhhbmRsZSBkcm9wLXNoYWRvdyBpcyBpZiBpdCdzIGxhc3QgaW4g
dGhlIGxpc3QKLSAgICAgICAgICAgIGlmIChpIDwgKGZpbHRlcnMuc2l6ZSgpIC0gMSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBj
YW4gb25seSBoYW5kbGUgZHJvcC1zaGFkb3cgaXMgaWYgaXQncyBsYXN0IGluIHRoZSBsaXN0Cisg
ICAgICAgICAgICAgICAgaWYgKGkgPCAoZmlsdGVycy5zaXplKCkgLSAxKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6
c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldE5hbWU6dmFsdWVdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZyYW1lKGNv
bnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RnJhbWUo
Y29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRGcmFtZTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0U3BlZWQoZmxvYXQg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
U3BlZWQ6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lk
IFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBz
ZXRUaW1lT2Zmc2V0OnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
LWZsb2F0IFBsYXRmb3JtQ0FMYXllcjo6Y29udGVudHNTY2FsZSgpIGNvbnN0CitmbG9hdCBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSBjb250ZW50c1NjYWxlXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOnZhbHVlXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyOjp0aWxlZEJhY2tpbmcoKQorVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRp
bGVkQmFja2luZygpCiB7CiAgICAgaWYgKCF1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC03NjEsNyArNzQxLDcgQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNB
TGF5ZXI6OnRpbGVkQmFja2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxl
ZEJhY2tpbmddOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25vdXNseURpc3Bs
YXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc3Niw3ICs3NTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1BVlBsYXllckxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXllckxheWVyKCkgY29uc3QKK0FWUGxheWVyTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllck1hYzo6cGxheWVyTGF5ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChbbV9sYXllci5nZXQo
KSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAgICAgcmV0dXJuIChB
VlBsYXllckxheWVyKiltX2xheWVyLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggMWZmZTI5Ny4uNWQwYzM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCkBAIC0zMiw3
ICszMiw3IEBACiAjaW5jbHVkZSAiRGVmV25kUHJvY1dpbmRvd0NsYXNzLmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaGFuZ2VzRmx1c2hlci5oIgogI2luY2x1ZGUgIkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyV2luLmgiCiAjaW5jbHVkZSAiV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSW5zdGFuY2VIYW5kbGUuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTEyMyw3
ICsxMjMsNyBAQCBQYXNzUmVmUHRyPENBQ0ZMYXllclRyZWVIb3N0PiBDQUNGTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKCkKIAogQ0FDRkxheWVyVHJlZUhvc3Q6OkNBQ0ZMYXllclRyZWVIb3N0KCkKICAg
ICA6IG1fY2xpZW50KDApCi0gICAgLCBtX3Jvb3RMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0
ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllciwgMCkpCisgICAgLCBtX3Jvb3RM
YXllcihQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVJvb3RMYXllciwgMCkpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9zaG91bGRGbHVzaFBl
bmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1faXNGbHVzaGluZ0xheWVy
Q2hhbmdlcyhmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXggMzU4NTNhNi4u
OWZlNzlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIlBsYXRmb3Jt
Q0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgogCiAjaW5jbHVkZSAi
QWJzdHJhY3RDQUNGTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTQwLDE0
ICs0MCwxNCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotYm9vbCBQbGF0Zm9ybUNB
TGF5ZXI6OmlzVmFsdWVGdW5jdGlvblN1cHBvcnRlZCgpCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihsYXllclR5cGUsIDAsIG93bmVyKSk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKQorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldp
bjo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpCiB7Ci0gICAgbV9vd25lciA9IG93bmVyOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGxhdGZvcm1DQUxheWVyV2luKExheWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwg
b3duZXIpKTsKIH0KIAogc3RhdGljIENGU3RyaW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpAQCAtODUsMTQgKzg1LDEzIEBAIHN0YXRpYyBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogaW50ZXJuKHZvaWQqIGxheWVyKQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCo+KENBQ0ZMYXllckdldFVzZXJE
YXRhKHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4obGF5ZXIpKSk7CiB9CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShMYXllclR5cGUgbGF5ZXJU
eXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHZvaWQqIHBsYXRm
b3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCitQbGF0Zm9ybUNBTGF5ZXIq
IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlQ3VzdG9t
LCBzdGF0aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7Cisg
ICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXll
cik7CisgICAgcmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwog
fQogCiBzdGF0aWMgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29udGV4dFJlZiBjb250ZXh0KQpAQCAtMTA4LDggKzEwNyw4IEBAIHN0YXRpYyB2b2lkIGxheW91
dFN1YmxheWVyc1Byb2MoQ0FDRkxheWVyUmVmIGNhTGF5ZXIpCiAgICAgICAgIGxheWVyLT5vd25l
cigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKGxheWVyKTsKIH0KIAot
UGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBt
X293bmVyKG93bmVyKQorUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpCisgICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCiB7CiAgICAgaWYgKGxh
eWVyKSB7CiAgICAgICAgIG1fbGF5ZXJUeXBlID0gTGF5ZXJUeXBlQ3VzdG9tOwpAQCAtMTI5LDcg
KzEyOCw3IEBAIFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgfQogfQogCi1QbGF0Zm9ybUNB
TGF5ZXI6On5QbGF0Zm9ybUNBTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1D
QUxheWVyV2luKCkKIHsKICAgICAvLyBUb3NzIGFsbCB0aGUga2lkcwogICAgIHJlbW92ZUFsbFN1
YmxheWVycygpOwpAQCAtMTM4LDI5ICsxMzcsMTYgQEAgUGxhdGZvcm1DQUxheWVyOjp+UGxhdGZv
cm1DQUxheWVyKCkKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4g
PSBpbnRlcm4odGhpcyk7CiAgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5nZXQoKSwg
MCk7CiAKLSAgICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFsc28gY2xlYXJzIGl0IGluIHRo
ZSBkZWxlZ2F0ZSB0byBwcmV2ZW50IGF0dGVtcHRzIAotICAgIC8vIHRvIHVzZSB0aGUgR3JhcGhp
Y3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICBzZXRPd25lcigwKTsK
LQogICAgIENBQ0ZMYXllclJlbW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogCiAg
ICAgZGVsZXRlIGxheWVySW50ZXJuOwogfQogCi1QbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCi17Ci0gICAgaWYgKCFw
bGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXllcik7Ci0gICAg
cmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwotfQotCi1QYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBs
YXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29u
c3QKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgp
ID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAg
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXI7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIg
PSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAKICAgICBuZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24oKSk7CiAgICAgbmV3
TGF5ZXItPnNldEJvdW5kcyhib3VuZHMoKSk7CkBAIC0xODAsMTggKzE2NiwxMyBAQCBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQqIG93bmVyKQogICAgIHJldHVybiBuZXdMYXllcjsKIH0KIAotUGxhdGZvcm1MYXll
ciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9sYXllci5nZXQoKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnJv
b3RMYXllcigpIGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcldpbjo6cm9v
dExheWVyKCkgY29uc3QKIHsKICAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0KiBob3N0ID0g
bGF5ZXJUcmVlSG9zdEZvckxheWVyKHRoaXMpOwogICAgIHJldHVybiBob3N0ID8gaG9zdC0+cm9v
dExheWVyKCkgOiAwOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6YW5p
bWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCiB7CiAgICAgLy8gVXBkYXRl
IHN0YXJ0IHRpbWUgZm9yIGFueSBhbmltYXRpb24gbm90IHlldCBzdGFydGVkCiAgICAgQ0ZUaW1l
SW50ZXJ2YWwgY2FjZkJlZ2luVGltZSA9IGN1cnJlbnRUaW1lVG9NZWRpYVRpbWUoYmVnaW5UaW1l
KTsKQEAgLTIwNCwzNiArMTg1LDE5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25T
dGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKICAgICAgICAgbV9vd25lci0+cGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi1zdGF0aWMgdm9pZCBy
ZXN1Ym1pdEFsbEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKLXsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxheWVyLT5hbmltYXRpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5
ZXItPmFuaW1hdGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIENBQ0ZM
YXllckFkZEFuaW1hdGlvbihsYXllci0+cGxhdGZvcm1MYXllcigpLCBpdC0+a2V5LmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjplbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCkKLXsKLSAgICBy
ZXN1Ym1pdEFsbEFuaW1hdGlvbnModGhpcyk7Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXJMaXN0IGNo
aWxkcmVuOwotICAgIGludGVybih0aGlzKS0+Z2V0U3VibGF5ZXJzKGNoaWxkcmVuKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBjaGls
ZHJlbltpXS0+ZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRp
cnR5UmVjdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3Qp
OwogfQogICAgIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzQ29tbWl0KCkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyV2luOjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQWJzdHJhY3RDQUNG
TGF5ZXJUcmVlSG9zdCogaG9zdCA9IGxheWVyVHJlZUhvc3RGb3JMYXllcih0aGlzKTsKICAgICBp
ZiAoaG9zdCkKICAgICAgICAgaG9zdC0+bGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50c0NoYW5nZWQoKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldENvbnRlbnRzQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5v
IGVxdWl2YWxlbnQgb2Ygc2V0Q29udGVudHNDaGFuZ2VkIGluIENBQ0YuIEZvciBub3cgSSB3aWxs
CiAgICAgLy8gc2V0IGNvbnRlbnRzIHRvIDAgYW5kIHRoZW4gYmFjayB0byBpdHMgb3JpZ2luYWwg
dmFsdWUgdG8gc2VlIGlmIHRoYXQKQEAgLTI0NCw3ICsyMDgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0Q29udGVudHNDaGFuZ2VkKCkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNMYXlvdXQoKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldE5lZWRzTGF5b3V0KCkKIHsKICAgICBpZiAoIW1fb3duZXIgfHwgIW1fb3duZXIt
PnBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI1MywzOSArMjE3LDM5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0xh
eW91dCgpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGxhdGZvcm1DQUxheWVyKiBQbGF0
Zm9ybUNBTGF5ZXI6OnN1cGVybGF5ZXIoKSBjb25zdAorUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNB
TGF5ZXIoQ0FDRkxheWVyR2V0U3VwZXJsYXllcihtX2xheWVyLmdldCgpKSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIENBQ0ZMYXllclJlbW92ZUZy
b21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVy
TGlzdCYgbGlzdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllcnMoY29uc3Qg
UGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldFN1Ymxh
eWVycyhsaXN0KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVy
cygpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAg
ICBpbnRlcm4odGhpcyktPnJlbW92ZUFsbFN1YmxheWVycygpOwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjphcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQog
ewogICAgIC8vIFRoaXMgbXVzdCBiZSBpbiB0ZXJtcyBvZiBpbnNlcnRTdWJsYXllciBpbnN0ZWFk
IG9mIGEgZGlyZWN0IGNhbGwgc28gUGxhdGZvcm1DQUxheWVySW50ZXJuYWwgY2FuIG92ZXJyaWRl
LgogICAgIGluc2VydFN1YmxheWVyKGxheWVyLCBpbnRlcm4odGhpcyktPnN1YmxheWVyQ291bnQo
KSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjppbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6aW5z
ZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllciwgc2l6ZV90IGluZGV4KQogewogICAg
IGludGVybih0aGlzKS0+aW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4KTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5j
ZSwgUGxhdGZvcm1DQUxheWVyKiBuZXdMYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpy
ZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXll
ciogbmV3TGF5ZXIpCiB7CiAgICAgLy8gVGhpcyBtdXN0IG5vdCB1c2UgZGlyZWN0IGNhbGxzIHRv
IGFsbG93IFBsYXRmb3JtQ0FMYXllckludGVybmFsIHRvIG92ZXJyaWRlLgogICAgIEFTU0VSVF9B
UkcocmVmZXJlbmNlLCByZWZlcmVuY2UpOwpAQCAtMzA3LDcgKzI3MSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBs
YXRmb3JtQ0FMYXllCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJs
YXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCiB7CiAgICAgUGxhdGZvcm1D
QUxheWVyTGlzdCBzdWJsYXllcnM7CiAgICAgaW50ZXJuKHNvdXJjZSktPmdldFN1YmxheWVycyhz
dWJsYXllcnMpOwpAQCAtMzE2LDcgKzI4MCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9w
dFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKICAgICBzZXRTdWJsYXllcnMoc3Vi
bGF5ZXJzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwg
UGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQogewogICAgIC8vIEFkZCBpdCB0byB0aGUg
YW5pbWF0aW9uIGxpc3QKICAgICBtX2FuaW1hdGlvbnMuYWRkKGtleSwgYW5pbWF0aW9uKTsKQEAg
LTMzMCw3ICsyOTQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgICAgICBob3N0LT5h
ZGRQZW5kaW5nQW5pbWF0ZWRMYXllcih0aGlzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAg
ICAgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIGFuaW1hdGlvbiBsaXN0CiAgICAgbV9hbmltYXRpb25z
LnJlbW92ZShrZXkpOwpAQCAtMzQ0LDcgKzMwOCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpy
ZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiAgICAgc2V0TmVlZHNDb21t
aXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5
ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Bhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyV2luOjphbmltYXRpb25Gb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXkpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKGtleSk7CiAgICAgaWYg
KGl0ID09IG1fYW5pbWF0aW9ucy5lbmQoKSkKQEAgLTM1MywxNjAgKzMxNywxNjAgQEAgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGsKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBDQUNG
TGF5ZXJTZXRNYXNrKG1fbGF5ZXIuZ2V0KCksIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSA6IDApOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVy
Ojppc09wYXF1ZSgpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllcldpbjo6aXNPcGFxdWUoKSBj
b25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJJc09wYXF1ZShtX2xheWVyLmdldCgpKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1ZShib29sIHZhbHVlKQordm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW46OnNldE9wYXF1ZShib29sIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNl
dE9wYXF1ZShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0K
IAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0Zsb2F0UmVjdCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXll
ckdldEJvdW5kcyhtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+
c2V0Qm91bmRzKHZhbHVlKTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQogCi1GbG9hdFBvaW50
M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitGbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyV2luOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENB
Q0ZMYXllckdldFBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHJldHVybiBGbG9hdFBvaW50
M0QocG9pbnQueCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkp
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbihtX2xheWVy
LmdldCgpLCBDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSkpOwogICAgIENBQ0ZMYXll
clNldFpQb3NpdGlvbihtX2xheWVyLmdldCgpLCB2YWx1ZS56KCkpOwogICAgIHNldE5lZWRzQ29t
bWl0KCk7CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkg
Y29uc3QKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuY2hvclBvaW50KCkgY29u
c3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0QW5jaG9yUG9pbnQobV9sYXll
ci5nZXQoKSk7CiAgICAgZmxvYXQgeiA9IENBQ0ZMYXllckdldEFuY2hvclBvaW50WihtX2xheWVy
LmdldCgpKTsKICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50LnksIHopOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFuY2hvclBvaW50KG1f
bGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKSk7CiAgICAgQ0FD
RkxheWVyU2V0QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnooKSk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVy
Ojp0cmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVy
V2luOjp0cmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRUcmFuc2Zv
cm0obV9sYXllci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7
CiAgICAgQ0FDRkxheWVyU2V0VHJhbnNmb3JtKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBz
ZXROZWVkc0NvbW1pdCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5
ZXI6OnN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRm
b3JtQ0FMYXllcldpbjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBD
QUNGTGF5ZXJHZXRTdWJsYXllclRyYW5zZm9ybShtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVy
U2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRz
Q29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRkZW4oYm9vbCB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRIaWRkZW4oYm9vbCB2YWx1ZSkKIHsKICAg
ICBDQUNGTGF5ZXJTZXRIaWRkZW4obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRz
Q29tbWl0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRHZW9tZXRyeUZsaXBwZWQo
Ym9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRHZW9tZXRyeUZsaXBwZWQo
Ym9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRHZW9tZXRyeUZsaXBwZWQobV9sYXllci5n
ZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1D
QUxheWVyOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luOjpp
c0RvdWJsZVNpZGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVySXNEb3VibGVTaWRl
ZChtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldERvdWJsZVNp
ZGVkKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0RG91YmxlU2lkZWQo
Ym9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXREb3VibGVTaWRlZChtX2xheWVyLmdldCgp
LCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5
ZXI6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46Om1hc2tz
VG9Cb3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRNYXNrc1RvQm91bmRz
KG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFza3NUb0Jv
dW5kcyhib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1hc2tzVG9Cb3Vu
ZHMoYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRNYXNrc1RvQm91bmRzKG1fbGF5ZXIu
Z2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1ib29sIFBsYXRmb3Jt
Q0FMYXllcjo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVy
V2luOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQogewogfQog
Ci1DRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50cygpIGNvbnN0CitDRlR5cGVSZWYg
UGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZM
YXllckdldENvbnRlbnRzKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldENvbnRlbnRzKENGVHlwZVJlZiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRDb250ZW50
cyhtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVl
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldENvbnRlbnRzUmVjdChtX2xheWVyLmdldCgp
LCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewog
ICAgIENBQ0ZMYXllclNldE1pbmlmaWNhdGlvbkZpbHRlcihtX2xheWVyLmdldCgpLCB0b0NBQ0ZG
aWx0ZXJUeXBlKHZhbHVlKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRNYWduaWZp
Y2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewogICAgIENBQ0ZMYXll
clNldE1hZ25pZmljYXRpb25GaWx0ZXIobV9sYXllci5nZXQoKSwgdG9DQUNGRmlsdGVyVHlwZSh2
YWx1ZSkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUNvbG9yIFBsYXRmb3JtQ0FMYXll
cjo6YmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFBsYXRmb3JtQ0FMYXllcldpbjo6YmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0QmFja2dyb3Vu
ZENvbG9yKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewogICAgIENHRmxvYXQg
Y29tcG9uZW50c1s0XTsKICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVu
dHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwpAQCAtNTE4LDEzICs0ODIsMTMg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYg
dmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRo
KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkK
IHsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0UkdCQShjb21wb25l
bnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKQEAg
LTUzNiwxMiArNTAwLDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihj
b25zdCBDb2xvciYgdmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotZmxvYXQgUGxh
dGZvcm1DQUxheWVyOjpvcGFjaXR5KCkgY29uc3QKK2Zsb2F0IFBsYXRmb3JtQ0FMYXllcldpbjo6
b3BhY2l0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldE9wYWNpdHkobV9sYXll
ci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZh
bHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7
CiAgICAgQ0FDRkxheWVyU2V0T3BhY2l0eShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKQEAgLTU0OSw1NyArNTEzLDQ3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKQogewogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNGcm9tKGNvbnN0
IFBsYXRmb3JtQ0FMYXllciopCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6Y29weUZpbHRlcnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FMYXllciopCiB7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVy
OjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgQ0FD
RkxheWVyU2V0TmFtZShtX2xheWVyLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0cmluZygpLmdldCgp
KTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpz
ZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0
RnJhbWUodmFsdWUpOwogICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRTcGVlZChmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpz
ZXRTcGVlZChmbG9hdCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRTcGVlZChtX2xheWVyLmdl
dCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKIHsKICAgICBD
QUNGTGF5ZXJTZXRUaW1lT2Zmc2V0KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVk
c0NvbW1pdCgpOwogfQogCi1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAorZmxvYXQgUGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gMTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzU2Nh
bGUoZmxvYXQpCi17Ci19Ci0KLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyOjp0aWxlZEJh
Y2tpbmcoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQp
CiB7Ci0gICAgcmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03MTEsNyArNjY1LDcg
QEAgc3RhdGljIHZvaWQgcHJpbnRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBp
bnQgaW5kZW50KQogICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjpwcmludFRyZWUoKSBjb25zdAordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnBy
aW50VHJlZSgpIGNvbnN0CiB7CiAgICAgLy8gUHJpbnQgaGVhZGluZyBpbmZvCiAgICAgQ0dSZWN0
IHJvb3RCb3VuZHMgPSBib3VuZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjI5MWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5o
CkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxheWVyV2luX2gKKyNk
ZWZpbmUgUGxhdGZvcm1DQUxheWVyV2luX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBGSU5BTCA6IHB1YmxpYyBQbGF0Zm9ybUNB
TGF5ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4g
Y3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxhdGZvcm1MYXllciosIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCopOworICAgIAorICAgIH5QbGF0Zm9ybUNBTGF5ZXJXaW4oKTsKKworICAg
IHZpcnR1YWwgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzQ2hhbmdlZCgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5
ZXIqIHN1cGVybGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
RnJvbVN1cGVybGF5ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJz
KGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQWxsU3VibGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN1
YmxheWVyKFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnNl
cnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqLCBzaXplX3QgaW5kZXgpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2Us
IFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgY29uc3QgUGxhdGZvcm1D
QUxheWVyTGlzdCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIq
IHNvdXJjZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJv
dW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29uc3Qg
RmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlv
bigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIGFuY2hv
clBvaW50KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGlk
ZGVuKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5RmxpcHBl
ZChib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJsZVNpZGVkKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJ
REU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0xheW91dCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpIE9WRVJSSURFOworCisjaWZuZGVm
IE5ERUJVRworICAgIHZpcnR1YWwgdm9pZCBwcmludFRyZWUoKSBjb25zdCBPVkVSUklERTsKKyNl
bmRpZgorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgUGxhdGZvcm1DQUxheWVyV2luKExheWVyVHlwZSwgUGxhdGZvcm1MYXllciosIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPj4gbV9hbmltYXRpb25zOworfTsKKworfQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyV2lu
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHQzRFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0M0RXaW4uY3BwCmluZGV4IDZhYmIwNDkuLjA1ZTE1MDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHQzRFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dDNEV2luLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRSgzRF9HUkFQ
SElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTg1LDcgKzg2LDcgQEAgR3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMsIEgKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogI2lmIFVTRShDQSkK
LSAgICBtX3dlYkdMTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKKyAgICBtX3dlYkdMTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKICNlbmRp
ZgogCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlck9mZnNjcmVlbikgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCmlu
ZGV4IDlkZDI1ZjIuLmU5MTEzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
QUxheWVyV2luLmgiCiAjaW5jbHVkZSAiV0tDQUltYWdlUXVldWUuaCIKICNlbmRpZgogCkBAIC0x
MTkzLDE0ICsxMTkzLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6Y3JlYXRlTGF5ZXJGb3JNb3ZpZSgpCiAKICAgICAvLyBDcmVhdGUgYSBQbGF0Zm9y
bUNBTGF5ZXIgd2hpY2ggd2lsbCB0cmFuc2Zvcm0gdGhlIGNvbnRlbnRzIG9mIHRoZSB2aWRlbyBs
YXllcgogICAgIC8vIHdoaWNoIGlzIGluIG1fcXRWaWRlb0xheWVyLgotICAgIG1fdHJhbnNmb3Jt
TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgpKTsKKyAgICBtX3RyYW5zZm9ybUxheWVyID0gUGxh
dGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwg
bV9sYXllckNsaWVudC5nZXQoKSk7CiAgICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBhbmNob3JlZCBpbiB0aGUgdG9w
IGxlZnQuCiAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KCkpOwogCi0gICAgbV9xdFZpZGVvTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKKyAgICBtX3F0VmlkZW9MYXllciA9IFBs
YXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIs
IDApOwogICAgIGlmICghbV9xdFZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCmluZGV4IDk0MDU3MWUuLjU2NWQxZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTMtMTAtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyKToKKyAgICAgICAgSW5jbHVkZSBQbGF0Zm9ybUNBTGF5ZXJXaW4uaCBh
bmQgZXhwbGljaXRseSBtYWtlIFBsYXRmb3JtQ0FMYXllcldpbnMgaGVyZS4KKwogMjAxMy0xMC0x
MiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiB0
aGUgdG9IVE1MRWxlbWVudCBoZWxwZXIgZm9yIGNhc3RpbmcgRm9ybUFzc29jaWF0ZWRFbGVtZW50
IHRvIEhUTUxFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIuY3BwCmluZGV4IGZiNDc0NjYuLmVhMDExMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hX
bmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXJXaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KQEAg
LTI0OCw3ICsyNDgsNyBAQCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyKCkKICAgICAsIG1fdGltZXIodGhpcywgJkZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXI6OnRpbWVyRmlyZWQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
ICwgbV9sYXllckNsaWVudChhZG9wdFB0cihuZXcgTGF5ZXJDbGllbnQodGhpcykpKQotICAgICwg
bV9yb290Q2hpbGQoUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbV9sYXllckNsaWVudC5nZXQoKSkpCisgICAgLCBtX3Jvb3RDaGlsZChQbGF0
Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBt
X2xheWVyQ2xpZW50LmdldCgpKSkKICNlbmRpZgogICAgICwgbV9mdWxsc2NyZWVuV2luZG93KGFk
b3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KHRoaXMpKSkKIHsK
</data>
<flag name="commit-queue"
          id="236688"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214178</attachid>
            <date>2013-10-14 12:15:15 -0700</date>
            <delta_ts>2013-10-14 13:16:24 -0700</delta_ts>
            <desc>which broke the build</desc>
            <filename>virtualize.diff</filename>
            <type>text/plain</type>
            <size>95570</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1OTA1N2RlLi4xMjU1ZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYg
QEAKKzIwMTMtMTAtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVmlydHVhbGl6ZSBQbGF0Zm9ybUNBTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9y
aW5nLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIHNldEdlb21ldHJ5Rmxp
cHBlZCBpcyBvbiBQbGF0Zm9ybUNBTGF5ZXJNYWMgbm93LgorCisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgIEFkZCBQbGF0Zm9ybUNBTGF5ZXIuY3BwLCBQbGF0
Zm9ybUNBTGF5ZXJXaW4uaCwgYW5kIGxldCBWUyBkbyBpdHMKKyAgICAgICAgdGhpbmcgd2l0aCBz
b21lIG90aGVyIGZpbGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgUGxhdGZvcm1DQUxheWVyLmNwcCBhbmQgUGxhdGZvcm1DQUxh
eWVyTWFjLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVZGV3JhcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIE1ha2UgYSBQbGF0Zm9ybUNBTGF5
ZXJXaW4gZXhwbGljaXRseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0
ZVBsYXRmb3JtQ0FMYXllcik6CisgICAgICAgIEFkZGVkLiBEZWNpZGUgd2hldGhlciB0byBtYWtl
IGEgUGxhdGZvcm1DQUxheWVye01hYywgV2lufSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0uCisgICAg
ICAgIExhdGVyLCB3ZSB3aWxsIGRlY2lkZSBiZXR3ZWVuIG90aGVyIHN1YmNsYXNzZXMgYmFzZWQg
b24gb3RoZXIgdGhpbmdzLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmZp
bHRlcnNDYW5CZUNvbXBvc2l0ZWQpOgorICAgICAgICBEbyB0aGUgc2FtZSB0aGluZyBmb3IgZmls
dGVyc0NhbkJlQ29tcG9zaXRlZC4KKworICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpHcmFwaGljc0xheWVyQ0EpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpz
ZXRDb250ZW50c1RvU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgVXNlIGNyZWF0
ZVBsYXRmb3JtQ0FMYXllciBpbnN0ZWFkIG9mIFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1t
OgorICAgICAgICBGb3Igbm93LCB1c2UgdGhlIFBsYXRmb3JtQ0FMYXllck1hYyB2ZXJzaW9uIG9m
IGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQsCisgICAgICAgIHNpbmNlIHRoaXMgY29kZSBpcyBoZWF2
aWx5IHRpZWQgdG8gaGF2aW5nIENBTGF5ZXJzIGluIHRoZSBXZWIgcHJvY2Vzcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICBJbmNs
dWRlIFBsYXRmb3JtQ0FMYXllci5oIGhlcmUgc28gd2UgY2FuIGdldCB0aGUgTGF5ZXJUeXBlIGVu
dW0uCisgICAgICAgIChOT1RFLXRvLWJlLXJlbW92ZWQ6IGlmIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5
IHRvIGRvIHRoaXMsIEknbSBvcGVuIHRvCisgICAgICAgIHN1Z2dlc3Rpb25zOyBJIGNvdWxkbid0
IHB1enpsZSBvdXQgbmVzdGVkICdlbnVtIGNsYXNzJyBzdHVmZikuCisKKyAgICAgICAgQWRkIHRo
ZSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oOgorICAgICAgICBGcmllbmQgdGhlIHN1YmNsYXNzZXMg
dG9vLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6On5QbGF0Zm9ybUNB
TGF5ZXIpOgorICAgICAgICBQdWxsIHRoZSBzaGFyZWQgcGFydCBvZiB0aGUgUGxhdGZvcm1DQUxh
eWVyIGRlc3RydWN0b3Igb3V0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlBsYXRmb3JtQ0FMYXllcik6Cisg
ICAgICAgIFZpcnR1YWxpemUgYWxsIHRoZSB0aGluZ3MuIE1vdmUgcGxhdGZvcm0gc3BlY2lmaWMg
bWVtYmVycyB0byB0aGVpciBuZXcgc3ViY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbToKKyAgICAgICAgTW92
ZSB0aGUgUExBVEZPUk0oTUFDKSBpbXBsZW1lbnRhdGlvbnMgZnJvbSBQbGF0Zm9ybUNBTGF5ZXIg
dG8gUGxhdGZvcm1DQUxheWVyTWFjLgorCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRm
b3JtQ0FMYXllcik6CisgICAgICAgIFRoZSBwbGF0Zm9ybUNBTGF5ZXIgbG9va3VwIGZ1bmN0aW9u
IGlzIHN0YXRpYyBvbiBQbGF0Zm9ybUNBTGF5ZXIsIHNvIGl0IGNhbid0CisgICAgICAgIGJlIG1v
dmVkIHRvIHRoZSBzdWJjbGFzc2VzLiBJdCBtaWdodCBiZSBhIGdvb2QgaWRlYSBpbiB0aGUgZnV0
dXJlIHRvIG1vdmUgdG93YXJkcworICAgICAgICBhIHBsYXRmb3JtLWluZGVwZW5kZW50IG1lY2hh
bmlzbSBmb3IgbG9va2luZyB1cCBQbGF0Zm9ybUNBTGF5ZXJzIGZyb20gUGxhdGZvcm1MYXllcnMs
CisgICAgICAgIGFuZCB0byBhdm9pZCBuZWVkaW5nIHRvIGRvIHRoaXMgYXMgb2Z0ZW4gYXMgd2Ug
ZG8gbm93LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FD
RkxheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FDRkxheWVyVHJlZUhvc3Q6
OkNBQ0ZMYXllclRyZWVIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmNwcDoKKyAgICAgICAgTW92ZSB0aGUgUExBVEZPUk0oV0lOKSBp
bXBsZW1lbnRhdGlvbnMgZnJvbSBQbGF0Zm9ybUNBTGF5ZXIgdG8gUGxhdGZvcm1DQUxheWVyV2lu
LgorCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcik6CisgICAgICAgIAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaDogQWRkZWQuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0RXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
VmlzdWFsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0OjpjcmVhdGVMYXllckZvck1vdmllKToKKyAgICAgICAgSW5j
bHVkZSBQbGF0Zm9ybUNBTGF5ZXJXaW4uaCBhbmQgZXhwbGljaXRseSBtYWtlIFBsYXRmb3JtQ0FM
YXllcldpbnMgaGVyZS4KKwogMjAxMy0xMC0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIENUVEU6IEFkZCBtb3JlIG5vZGUgY29udmVyc2lvbiBoZWxwZXJzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCmluZGV4IGE2YWRjOWIuLjhjMGEwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC00ODYsNyArNDg2LDYgQEAgX19aTjdXZWJDb3JlMTVIaXRUZXN0TG9jYXRpb24xMnJlY3RG
b3JQb2ludEVSS05TXzExTGF5b3V0UG9pbnRFampqagogX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRv
d0Jhc2U4Y29tbW9uVk1FdgogX19aTjdXZWJDb3JlMTVQYXN0ZWJvYXJkSW1hZ2VDMUV2CiBfX1pO
N1dlYkNvcmUxNVBhc3RlYm9hcmRJbWFnZUQxRXYKLV9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxh
eWVyMThzZXRHZW9tZXRyeUZsaXBwZWRFYgogX19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VD
MUVSS04zV1RGNlN0cmluZ0VpTlNfMjVQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRVM0X05TXzM1
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVFCiBfX1pON1dlYkNvcmUxNVByb3Rl
Y3Rpb25TcGFjZUMxRXYKIF9fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MjFodHRwUGlwZWxp
bmluZ0VuYWJsZWRFdgpAQCAtNjE0LDYgKzYxMyw3IEBAIF9fWk43V2ViQ29yZTE3b3BlblRlbXBv
cmFyeUZpbGVFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTE3c2V0Q29va2llc0Zyb21E
T01FUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVfUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43V2ViQ29y
ZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVSTlNfMTVET01XcmFwcGVyV29ybGRF
CitfX1pON1dlYkNvcmUxOFBsYXRmb3JtQ0FMYXllck1hYzE4c2V0R2VvbWV0cnlGbGlwcGVkRWIK
IF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTB1bmlxdWVOYW1lRXYKIF9fWk43V2Vi
Q29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNidWZmZXJGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxM3N0cmluZ0ZvclR5cGVFUktOM1dURjZT
dHJpbmdFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agppbmRleCBiYzNkNDEwLi42Y2VjY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTcxNzAsNiArNzE3MCw3IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25cY2ZcSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWQ0YuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3VuZGF0aW9uXGNmXEluYmFuZFRleHRUcmFja1ByaXZhdGVM
ZWdhY3lBVkNGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGF2Zm91bmRhdGlvblxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXFBsYXRmb3JtQ0FM
YXllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xHTENvbnRleHQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2Fpcm9cR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAiPgogICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTE4NjU1LDYgKzE4NjU2
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91
bmRhdGlvblxjZlxJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZDRi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3VuZGF0aW9uXEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGNhXFBsYXRmb3JtQ0FGaWx0ZXJzLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxhdGZvcm1DQUxheWVyV2lu
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHTENv
bnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIj4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycwppbmRleCBmYzZhNmE3Li5kMGFlNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02OTA0LDYgKzY5
MDQsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWVkaWFjb250cm9s
c1xNZWRpYUNvbnRyb2xzSG9zdC5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXG1lZGlhY29u
dHJvbHM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGNzc1xDU1NHcmlkVGVtcGxhdGVWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2FcUGxhdGZvcm1DQUxheWVy
LmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhPC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxDb29yZGluYXRlcy5oIj4KQEAgLTE0
NTE3LDYgKzE0NTIzLDEyIEBACiAgICAgICA8RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcVXNlckFnZW50U2NyaXB0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cY3NzXENTU0dyaWRUZW1wbGF0ZVZhbHVlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dExpbmVCb3hlcy5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxlLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxhdGZvcm1DQUxheWVy
V2luLmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3aW48L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5v
bmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDYxN2UyOC4uZmFiZjcw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtOTQ5LDYgKzk0OSw4IEBACiAJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJ
bWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENUJDNDI3
MTZGODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVCQzQyNTE2Rjg4MkJF
MDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovOyB9OwogCQkyRDZF
NDY4NDE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVD
RjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OworCQkyRDcwQkExMzE4MDc0RERG
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZv
cm1DQUxheWVyTWFjLmggKi87IH07CisJCTJENzBCQTE1MTgwNzRGODYwMDAxOTA4QSAvKiBQbGF0
Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi87
IH07CiAJCTJEODI4N0Y2MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4Mjg3RjQxNkU0
QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5jcHAgKi87IH07CiAJCTJEODI4N0Y3MTZF
NEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODI4N0Y1MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRU
ZXN0TG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyRDhGRUJEQzE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4RkVCREEx
NDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmNwcCAqLzsgfTsKQEAgLTc0Mjgs
NiArNzQzMCw4IEBACiAJCTJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQ1QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4
QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUxheWVyTWFjLmg7
IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGxhdGZvcm1DQUxheWVyLmNw
cDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEODI4N0Y0MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGl0VGVzdExvY2F0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4Mjg3RjUxNkU0QTAzODAwODZCRDAwIC8q
IEhpdFRlc3RMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaXRU
ZXN0TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4RkVCREExNDNF
M0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Nyb3NzZmFkZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE0NjgzLDYgKzE0Njg3LDcgQEAKIAkJCQk0OTU4NzgxRjEyQTU3RERG
MDA3MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSAqLywKIAkJCQkwRjEzMTYzRjE2
RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi8sCiAJCQkJNDk1ODc4
MjAxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSAqLywKKwkJCQkyRDcw
QkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggKi8sCiAJCQkJMUFB
NzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8sCiAJCQkJMUFBNzE2
MDgxNDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovLAogCQkJCTBGNTgwRkEx
MTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovLApAQCAtMTQ3Mjcs
NiArMTQ3MzIsNyBAQAogCQkJCTI5MTdCNTYwMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNo
U2NoZWR1bGVyQ2xpZW50LmggKi8sCiAJCQkJNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBs
YXRmb3JtQ0FBbmltYXRpb24uaCAqLywKIAkJCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyog
UGxhdGZvcm1DQUZpbHRlcnMuaCAqLywKKwkJCQkyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyog
UGxhdGZvcm1DQUxheWVyLmNwcCAqLywKIAkJCQk0OTlCM0VDMzEyOENDQzQ3MDBFNzI2QzIgLyog
UGxhdGZvcm1DQUxheWVyLmggKi8sCiAJCQkJNDkzRTVFMDgxMkQ2NDIwNTAwMDIwMDgxIC8qIFBs
YXRmb3JtQ0FMYXllckNsaWVudC5oICovLAogCQkJCTQ5NEJDNDBDMTJBRUREOUUwMDc0M0JEMiAv
KiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcCAqLywKQEAgLTI0NTI5LDYgKzI0NTM1LDcgQEAK
IAkJCQkyRTQzNDY1MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjM4MjA4OTkxNDdEMzVGOTAwMTBCQzA2IC8qIFdvcmtlclJ1bnRpbWVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBNjQzRjIwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtl
clNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENzBCQTEzMTgwNzREREYw
MDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0
MkU5MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDc5NjlEQjYxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDSWNlQ2FuZGlkYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTg4LDYgKzI1NTk1LDcgQEAKIAkJ
CQk0OUVDRUI2RjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOENGRjA0RDBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDcwQkExNTE4MDc0Rjg2MDAwMTkwOEEg
LyogUGxhdGZvcm1DQUxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0RDU4RUI4MTdCNEVE
ODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCmluZGV4IGI5NWU5MDQuLmJiNDQ4MTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiVVJM
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCkBAIC0xNTkyLDcgKzE1OTIsNyBAQCBQbGF0Zm9y
bUxheWVyKiBBVkZXcmFwcGVyOjpwbGF0Zm9ybUxheWVyKCkKICAgICBpZiAoIW1fbGF5ZXJDbGll
bnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV92aWRlb0xheWVyV3JhcHBlciA9IFBsYXRm
b3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5
ZXJDbGllbnQuZ2V0KCkpOworICAgIG1fdmlkZW9MYXllcldyYXBwZXIgPSBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVyQ2xp
ZW50LmdldCgpKTsKICAgICBpZiAoIW1fdmlkZW9MYXllcldyYXBwZXIpCiAgICAgICAgIHJldHVy
biAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA3MTI0YTBmLi40NWFlYTRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTQ4LDkgKzQ4LDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
ICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyTWFjLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luLmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjgxLDYgKzI4NiwzNSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBmYWN0bwogICAgIHJldHVybiBmYWN0b3J5LT5jcmVhdGVHcmFwaGlj
c0xheWVyKGNsaWVudCk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIEdyYXBo
aWNzTGF5ZXJDQTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxh
eWVyTWFjOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworI2VsaWYgUExBVEZPUk0o
V0lOKQorICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmZpbHRlcnNDYW5CZUNvbXBvc2l0
ZWQoZmlsdGVycyk7CisjZW5kaWYKK30KKyNlbmRpZgorICAgIAorUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6
Y3JlYXRlKGxheWVyVHlwZSwgb3duZXIpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIHJldHVy
biBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKKyNlbmRpZgor
fQorICAgIAorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lcik7CisjZWxpZiBQ
TEFURk9STShXSU4pCisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKHBsYXRm
b3JtTGF5ZXIsIG93bmVyKTsKKyNlbmRpZgorfQorCiBHcmFwaGljc0xheWVyQ0E6OkdyYXBoaWNz
TGF5ZXJDQShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVy
KGNsaWVudCkKICAgICAsIG1fY29udGVudHNMYXllclB1cnBvc2UoTm9Db250ZW50c0xheWVyKQpA
QCAtMjk2LDcgKzMzMCw3IEBAIEdyYXBoaWNzTGF5ZXJDQTo6R3JhcGhpY3NMYXllckNBKEdyYXBo
aWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAgICAgbV9pc1BhZ2VUaWxlZEJhY2tpbmdMYXll
ciA9IHRydWU7CiAgICAgfQogCi0gICAgbV9sYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRl
KGxheWVyVHlwZSwgdGhpcyk7CisgICAgbV9sYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihs
YXllclR5cGUsIHRoaXMpOwogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChDb250ZW50c1Nj
YWxlQ2hhbmdlZCk7CiB9CiAKQEAgLTYxNyw3ICs2NTEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIGJv
b2wgR3JhcGhpY3NMYXllckNBOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlck9wZXJhdGlvbnMpCiB7Ci0gICAgYm9vbCBjYW5Db21wb3NpdGVGaWx0ZXJzID0gUGxhdGZv
cm1DQUxheWVyOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlck9wZXJhdGlvbnMpOworICAg
IGJvb2wgY2FuQ29tcG9zaXRlRmlsdGVycyA9IGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVy
T3BlcmF0aW9ucyk7CiAKICAgICBpZiAobV9maWx0ZXJzID09IGZpbHRlck9wZXJhdGlvbnMpCiAg
ICAgICAgIHJldHVybiBjYW5Db21wb3NpdGVGaWx0ZXJzOwpAQCAtNzgxLDcgKzgxNSw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCiAKICAgICBpZiAobV9jb250ZW50c1NvbGlkQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAg
ICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yQmFja2dyb3VuZENv
bG9yOwotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXIsIHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXROYW1lKCJCYWNrZ3JvdW5kIENvbG9yIExheWVyIik7CiAjZW5kaWYKQEAgLTg0Nyw3ICs4ODEs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5
ZXIqIG1lZGlhTGF5ZXIpCiAgICAgLy8gdGhlIGNyZWF0b3Igb2YgdGhlIHJhdyBsYXllciBpcyB1
c2luZyBpdCBmb3Igc29tZSBvdGhlciBwdXJwb3NlLgogICAgIC8vIEZvciBub3cgd2UgZG9uJ3Qg
c3VwcG9ydCBzdWNoIGEgY2FzZS4KICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXll
ciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1lZGlhTGF5ZXIpOwotICAgIG1f
Y29udGVudHNMYXllciA9IG1lZGlhTGF5ZXIgPyAocGxhdGZvcm1DQUxheWVyID8gcGxhdGZvcm1D
QUxheWVyIDogUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUobWVkaWFMYXllciwgdGhpcykpIDogMDsK
KyAgICBtX2NvbnRlbnRzTGF5ZXIgPSBtZWRpYUxheWVyID8gKHBsYXRmb3JtQ0FMYXllciA/IHBs
YXRmb3JtQ0FMYXllciA6IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihtZWRpYUxheWVyLCB0aGlzKSkg
OiAwOwogICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBtZWRpYUxheWVyID8gQ29udGVudHNM
YXllckZvck1lZGlhIDogTm9Db250ZW50c0xheWVyOwogCiAgICAgbm90ZVN1YmxheWVyc0NoYW5n
ZWQoKTsKQEAgLTg2MCw3ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVu
dHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIC8vIENyZWF0ZSB0aGUgUGxhdGZvcm1DQUxheWVyIHRvIHdyYXAgdGhlIGluY29t
aW5nIGxheWVyCi0gICAgbV9jb250ZW50c0xheWVyID0gY2FudmFzTGF5ZXIgPyBQbGF0Zm9ybUNB
TGF5ZXI6OmNyZWF0ZShjYW52YXNMYXllciwgdGhpcykgOiAwOworICAgIG1fY29udGVudHNMYXll
ciA9IGNhbnZhc0xheWVyID8gY3JlYXRlUGxhdGZvcm1DQUxheWVyKGNhbnZhc0xheWVyLCB0aGlz
KSA6IDA7CiAgICAgCiAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IGNhbnZhc0xheWVyID8g
Q29udGVudHNMYXllckZvckNhbnZhcyA6IE5vQ29udGVudHNMYXllcjsKIApAQCAtMTA5OCw3ICsx
MTMyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29u
c3QgQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb24KICAgICAgICAgc3RhdGljIENvbG9yIHdh
c2hGaWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7CiAgICAgICAgIHN0YXRpYyBDb2xvciB3YXNoQm9y
ZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKLSAgICAgICAgbV92aXNpYmxlVGls
ZVdhc2hMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlTGF5ZXIsIHRoaXMpOworICAgICAgICBtX3Zpc2libGVUaWxlV2FzaExheWVyID0gY3Jl
YXRlUGxhdGZvcm1DQUxheWVyKGNyZWF0ZVBsYXRmb3JtQ0FMYXllciwgdGhpcyk7CiAgICAgICAg
IFN0cmluZyBuYW1lID0gU3RyaW5nOjpmb3JtYXQoIlZpc2libGUgVGlsZSBXYXNoIExheWVyICVw
IiwgbV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKTsKICAgICAgICAgbV92
aXNpYmxlVGlsZVdhc2hMYXllci0+c2V0TmFtZShuYW1lKTsKICAgICAgICAgbV92aXNpYmxlVGls
ZVdhc2hMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKQEAgLTE2
MDYsNyArMTY0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5
ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSBwdXJwb3NlKQogICAgICAgICAgICAgbV9zdHJ1Y3R1
cmFsTGF5ZXIgPSAwOwogICAgICAgICAKICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikg
ewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0
ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyLCB0aGlzKTsKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsIHRoaXMpOwogICAgICAgICAgICAgc3Ry
dWN0dXJhbExheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAt
MTYxNCw3ICsxNjQ4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxM
YXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAgICAgICAgICBtX3N0cnVj
dHVyYWxMYXllciA9IDA7CiAKICAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikgewotICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgICAgIG1fc3RydWN0
dXJhbExheWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlTGF5ZXIsIHRoaXMpOwogICAgICAgICAgICAgc3RydWN0dXJhbExheWVyQ2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzc4LDcgKzE4MTIsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ29udGVudHNJbWFnZSgpCiB7CiAgICAgaWYgKG1fcGVuZGluZ0NvbnRl
bnRzSW1hZ2UpIHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpIHsKLSAgICAg
ICAgICAgIG1fY29udGVudHNMYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOworICAgICAgICAgICAgbV9jb250ZW50c0xh
eWVyID0gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5
ZXIsIHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0TmFtZSgiSW1hZ2UgTGF5ZXIiKTsKICNlbmRpZgpAQCAtMTg1OSw3ICsxODkzLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdHMoKQogICAgIGJvb2wgZ2FpbmVk
T3JMb3N0Q2xpcHBpbmdMYXllciA9IGZhbHNlOwogICAgIGlmICghbV9jb250ZW50c0NsaXBwaW5n
UmVjdC5jb250YWlucyhtX2NvbnRlbnRzUmVjdCkpIHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRz
Q2xpcHBpbmdMYXllcikgewotICAgICAgICAgICAgbV9jb250ZW50c0NsaXBwaW5nTGF5ZXIgPSBQ
bGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCB0
aGlzKTsKKyAgICAgICAgICAgIG1fY29udGVudHNDbGlwcGluZ0xheWVyID0gY3JlYXRlUGxhdGZv
cm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIHRoaXMpOwogICAgICAg
ICAgICAgbV9jb250ZW50c0NsaXBwaW5nTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAg
ICAgICAgICAgICBtX2NvbnRlbnRzQ2xpcHBpbmdMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludCgpKTsKICNpZm5kZWYgTkRFQlVHCkBAIC0yMzY2LDcgKzI0MDAsNyBAQCBib29sIEdyYXBo
aWNzTGF5ZXJDQTo6Y3JlYXRlRmlsdGVyQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpcwogICAgICAgICAKICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVy
YXRpb25zID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPih2YWx1ZUxp
c3QuYXQobGlzdEluZGV4KSkudmFsdWUoKTsKICAgICAvLyBNYWtlIHN1cmUgdGhlIHBsYXRmb3Jt
IGxheWVyIGRpZG4ndCBmYWxsYmFjayB0byB1c2luZyBzb2Z0d2FyZSBmaWx0ZXIgY29tcG9zaXRp
bmcgaW5zdGVhZC4KLSAgICBpZiAoIVBsYXRmb3JtQ0FMYXllcjo6ZmlsdGVyc0NhbkJlQ29tcG9z
aXRlZChvcGVyYXRpb25zKSkKKyAgICBpZiAoIWZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQob3BlcmF0
aW9ucykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBudW1BbmltYXRpb25zID0g
b3BlcmF0aW9ucy5zaXplKCk7CkBAIC0yODk4LDcgKzI5MzIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpCiAgICAgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlID0gdXNlVGlsZWRMYXllciA/IFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIgOiBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVdlYkxheWVyOwogI2VuZGlmCiAKLSAgICBtX2xheWVyID0gUGxhdGZvcm1DQUxh
eWVyOjpjcmVhdGUobGF5ZXJUeXBlLCB0aGlzKTsKKyAgICBtX2xheWVyID0gY3JlYXRlUGxhdGZv
cm1DQUxheWVyKGxheWVyVHlwZSwgdGhpcyk7CiAKICAgICBtX3VzaW5nVGlsZWRCYWNraW5nID0g
dXNlVGlsZWRMYXllcjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggZjNlNGM4Yi4uOGExMjNlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtNDMsNyArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBsYXRmb3Jt
Q0FMYXllcjsKIGNsYXNzIFRyYW5zZm9ybVN0YXRlOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ0Eg
OiBwdWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIFBsYXRmb3JtQ0FMYXllckNsaWVudCB7CkBA
IC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgdmly
dHVhbCBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
OwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0xODUs
NiArMTg2LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdm9pZCB1
cGRhdGVGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICAKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQqIG93bmVyKTsKIAogICAgIFBsYXRmb3JtQ0FMYXllciogcHJpbWFyeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgPyBtX3N0cnVjdHVyYWxMYXll
ci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGhvc3RMYXll
ckZvclN1YmxheWVycygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCmluZGV4IDA5MGRlZjUuLjhk
YjUwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKQEAgLTUzLDYgKzUzLDExIEBAIGNsYXNzIFRpbWlu
Z0Z1bmN0aW9uOwogY2xhc3MgUGxhdGZvcm1DQUFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PFBsYXRmb3JtQ0FBbmltYXRpb24+IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUGxhdGZv
cm1DQUxheWVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1D
QUxheWVyTWFjOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9y
bUNBTGF5ZXJXaW47CisjZW5kaWYKICAgICAKICAgICBlbnVtIEFuaW1hdGlvblR5cGUgeyBCYXNp
YywgS2V5ZnJhbWUgfTsKICAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndh
cmRzLCBCYWNrd2FyZHMsIEJvdGggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNlZjhiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCisj
aWYgVVNFKENBKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtQ0FMYXllcjo6flBs
YXRmb3JtQ0FMYXllcigpCit7CisgICAgLy8gQ2xlYXIgdGhlIG93bmVyLCB3aGljaCBhbHNvIGNs
ZWFycyBpdCBpbiB0aGUgZGVsZWdhdGUgdG8gcHJldmVudCBhdHRlbXB0cworICAgIC8vIHRvIHVz
ZSB0aGUgR3JhcGhpY3NMYXllckNBIGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KKyAgICBz
ZXRPd25lcigwKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAppbmRleCAw
MzBjZjE0Li5kODIwYzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaWZuZGVmIFBsYXRmb3JtQ0FMYXllcl9oCkBAIC01MCw2ICs1MCwxMSBA
QCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiA+IFBsYXRmb3JtQ0FMYXllckxpc3Q7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllciA6
IHB1YmxpYyBSZWZDb3VudGVkPFBsYXRmb3JtQ0FMYXllcj4geworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyTWFjOworI2VsaWYgUExBVEZPUk0oV0lO
KQorICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJXaW47CisjZW5kaWYKIHB1YmxpYzoK
ICAgICBzdGF0aWMgQ0ZUaW1lSW50ZXJ2YWwgY3VycmVudFRpbWVUb01lZGlhVGltZShkb3VibGUg
dCkgeyByZXR1cm4gQ0FDdXJyZW50TWVkaWFUaW1lKCkgKyB0IC0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7IH0KIApAQCAtNjksMTc4ICs3NCwxNDUgQEAgcHVibGljOgogICAgIH07CiAg
ICAgZW51bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIgfTsKIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50Kik7Ci0gICAgCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBwYXNzZXMg
dGhlIGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJlY2F1c2Ug
UGxhdGZvcm1MYXllcgotICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9iaiBDIGFu
ZCBDKysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVy
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyKCk7CiAKLSAgICB+UGxhdGZv
cm1DQUxheWVyKCk7Ci0gICAgCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBwYXNzZXMgdGhlIGxheWVy
IGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJlY2F1c2UgUGxhdGZvcm1M
YXllcgogICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9iaiBDIGFuZCBDKysuIFRo
aXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KICAgICBzdGF0aWMgUGxhdGZv
cm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIodm9pZCogcGxhdGZvcm1MYXllcik7Ci0gICAgCi0g
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCi0jaWYgUExBVEZPUk0o
V0lOKQotICAgIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSNlbHNlCi0gICAgYm9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyVHlwZSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIgfHwgbV9s
YXllclR5cGUgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7IH0KLSNlbmRpZgorICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgp
OyB9CiAKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0OwotICAgIAotICAg
IC8vIEEgbGlzdCBvZiBzdWJsYXllcnMgdGhhdCBHcmFwaGljc0xheWVyQ0Egc2hvdWxkIG1haW50
YWluIGFzIHRoZSBmaXJzdCBzdWJsYXllcnMuCi0gICAgY29uc3QgUGxhdGZvcm1DQUxheWVyTGlz
dCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21TdWJsYXllcnMuZ2V0
KCk7IH0KLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbHVlRnVuY3Rpb25TdXBwb3J0ZWQoKTsK
LSAgICAKLSAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lcjsgfQotICAgIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNvbnN0ID0gMDsKIAotICAg
IHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpOwotICAgIHZv
aWQgZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOworICAgIFBsYXRmb3JtQ0FMYXllckNsaWVu
dCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIHsgbV9vd25lciA9IG93bmVyOyB9
CiAKLSAgICAvLyBMYXlvdXQgc3VwcG9ydAotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0
KiBkaXJ0eVJlY3QgPSAwKSA9IDA7CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QqIGRpcnR5UmVjdCA9IDApOwotICAgIAotICAgIC8vIFRoaXMgdGVsbHMgdGhlIGxh
eWVyIHRyZWUgdG8gY29tbWl0IGNoYW5nZXMgYW5kIHBlcmZvcm0gYSByZW5kZXIsIHdpdGhvdXQg
ZG8gYSBzZXROZWVkc0Rpc3BsYXkgb24gYW55IGxheWVyLgotICAgIHZvaWQgc2V0TmVlZHNDb21t
aXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNDaGFuZ2VkKCkgPSAwOwogCi0gICAg
dm9pZCBzZXRDb250ZW50c0NoYW5nZWQoKTsKLSAgICAKICAgICBMYXllclR5cGUgbGF5ZXJUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KIAotICAgIFBsYXRmb3JtQ0FMYXllciog
c3VwZXJsYXllcigpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAg
ICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7Ci0gICAgdm9p
ZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICB2b2lkIGFwcGVuZFN1YmxheWVyKFBsYXRmb3Jt
Q0FMYXllciopOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiwgc2l6
ZV90IGluZGV4KTsKLSAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJl
ZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKik7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIq
IHN1cGVybGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21TdXBl
cmxheWVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZv
cm1DQUxheWVyTGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJz
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllcios
IHNpemVfdCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU3VibGF5ZXIoUGxh
dGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciopID0gMDsKKworICAgIC8v
IEEgbGlzdCBvZiBzdWJsYXllcnMgdGhhdCBHcmFwaGljc0xheWVyQ0Egc2hvdWxkIG1haW50YWlu
IGFzIHRoZSBmaXJzdCBzdWJsYXllcnMuCisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybUNBTGF5
ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGlzIG1ldGhv
ZCByZW1vdmVzIHRoZSBzdWJsYXllcnMgZnJvbSB0aGUgc291cmNlIGFuZCByZXBhcmVudHMgdGhl
bSB0byB0aGUgY3VycmVudCBsYXllci4KICAgICAvLyBBbnkgc3VibGF5ZXJzIHByZXZpb3VzbHkg
aW4gdGhlIGN1cnJlbnQgbGF5ZXIgYXJlIHJlbW92ZWQuCi0gICAgdm9pZCBhZG9wdFN1YmxheWVy
cyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRBbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFuaW1hdGlvbik7
ICAgIAotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KTsK
LSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25z
dCBTdHJpbmcmIGtleSk7Ci0gICAgCi0gICAgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciop
OwotICAgIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9wYXF1ZShi
b29sKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldEJvdW5k
cyhjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0
OwotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdmlydHVh
bCB2b2lkIGFkb3B0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0
Zm9ybUNBQW5pbWF0aW9uKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxh
dGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dE9wYXF1ZShib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3VuZHMoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEJikgPSAwOwogICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEZsb2F0
UG9pbnQzRChwb3MueCgpLCBwb3MueSgpLCAwKSk7IH0KIAotICAgIEZsb2F0UG9pbnQzRCBhbmNo
b3JQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJik7CisgICAgdmlydHVhbCBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpID0g
MDsKKworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVy
VHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKIAotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEhpZGRlbihib29s
KSA9IDA7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wpID0gMDsK
IAotICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJsZVNp
ZGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREb3VibGVTaWRlZChib29sKSA9
IDA7CiAKLSAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbWFza3NUb0JvdW5kcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NU
b0JvdW5kcyhib29sKSA9IDA7CiAKLSAgICBib29sIGlzRG91YmxlU2lkZWQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRl
c0RyYXdpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVzRHJh
d2luZyhib29sKSA9IDA7CiAKLSAgICBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdDsKLSAgICB2
b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgCi0gICAgYm9vbCBhY2NlbGVyYXRlc0Ry
YXdpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKTsKKyAg
ICB2aXJ0dWFsIENGVHlwZVJlZiBjb250ZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSA9IDA7CiAKLSAgICBDRlR5cGVSZWYgY29udGVudHMo
KSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRzKENGVHlwZVJlZik7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKLSAgICB2b2lkIHNl
dENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWlu
aWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFn
bmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKSA9IDA7CiAKLSAgICB2b2lkIHNldE1pbmlmaWNh
dGlvbkZpbHRlcihGaWx0ZXJUeXBlKTsKLSAgICB2b2lkIHNldE1hZ25pZmljYXRpb25GaWx0ZXIo
RmlsdGVyVHlwZSk7CisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpID0g
MDsKIAotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlcldp
ZHRoKGZsb2F0KSA9IDA7CiAKLSAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKSA9IDA7CiAKLSAgICB2b2lk
IHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAK
LSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsK
LSAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmKTsKLSAgICBzdGF0aWMgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3Np
dGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKLSAgICB2b2lkIGNvcHlGaWx0ZXJzRnJvbShj
b25zdCBQbGF0Zm9ybUNBTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsdGVycyhjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgPSAwOwogI2VuZGlmCiAKLSAgICB2b2lkIHNldE5h
bWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
JikgPSAwOwogCi0gICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgdm9pZCBzZXRT
cGVlZChmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNwZWVkKGZsb2F0KSA9IDA7CiAKLSAg
ICB2b2lkIHNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpOwotICAgIAotICAgIGZsb2F0IGNv
bnRlbnRzU2NhbGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFsKSA9IDA7CiAKLSAg
ICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpOworICAgIHZpcnR1YWwgZmxvYXQgY29udGVu
dHNTY2FsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShm
bG9hdCkgPSAwOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYW5pbWF0
aW9uczsgfQotI2VuZGlmCisgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygp
ID0gMDsKIAotI2lmIFBMQVRGT1JNKFdJTikgJiYgIWRlZmluZWQoTkRFQlVHKQotICAgIHZvaWQg
cHJpbnRUcmVlKCkgY29uc3Q7Ci0jZW5kaWYKKyNpZiBQTEFURk9STShXSU4pCisgICAgdmlydHVh
bCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNMYXlvdXQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0
KCkgPSAwOworI2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRUcmVlKCkgY29u
c3QgPSAwOworI2VuZGlmIC8vIE5ERUJVRworI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAogI2lm
IFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIHN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3VzbHlEaXNwbGF5
VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2VuZGlmCiAKIHByb3RlY3RlZDoK
LSAgICBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgQVZQbGF5ZXJMYXllciogcGxheWVyTGF5
ZXIoKSBjb25zdDsKKyAgICBQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikKKyAgICAgICAgOiBtX293bmVyKG93bmVyKQorICAgIHsKIAotICAgIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogbV9vd25lcjsKLSAgICBMYXllclR5cGUgbV9sYXllclR5cGU7Ci0gICAgCi0g
ICAgT3duUHRyPFBsYXRmb3JtQ0FMYXllckxpc3Q+IG1fY3VzdG9tU3VibGF5ZXJzOwotI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBtX2xheWVyOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKLSNlbmRpZgor
ICAgIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotICAgIFJldGFpblB0
cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKLSNlbHNlCi0gICAgUmV0YWluUHRyPHZvaWQ+IG1fZGVs
ZWdhdGU7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIEFWUGxheWVyTGF5ZXIqIHBsYXllckxheWVyKCkg
Y29uc3QgPSAwOwogI2VuZGlmCisKKyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CisgICAgUmV0
YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXI7CisgICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBtX293bmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tCmluZGV4IDVl
MjE3MTUuLmJjM2Y2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KQEAgLTMzLDcg
KzMzLDcgQEAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW1wb3J0ICJMZW5ndGhGdW5jdGlvbnMuaCIgLy8gVGhpcyBpcyBhIGxheWVy
aW5nIHZpb2xhdGlvbi4KLSNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2ltcG9ydCAiUGxh
dGZvcm1DQUxheWVyTWFjLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgUGxhdGZvcm1D
QUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxh
eWVyLCBjb25zCiAgICAgfQogICAgIAogICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21wb3Np
dGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIHRydWUuCi0gICAgQVNTRVJUKHBsYXRmb3Jt
Q0FMYXllci0+ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKSk7CisgICAgQVNTRVJUKFBs
YXRmb3JtQ0FMYXllck1hYzo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKSk7CiAgICAg
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4NTE0ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0
Zm9ybUNBTGF5ZXJNYWMuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3Jt
Q0FMYXllck1hY19oCisjZGVmaW5lIFBsYXRmb3JtQ0FMYXllck1hY19oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKwor
T0JKQ19DTEFTUyBOU09iamVjdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0
Zm9ybUNBTGF5ZXJNYWMgRklOQUwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUs
IFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gcGFz
c2VzIHRoZSBsYXllciBhcyBhIHZvaWQqIHJhdGhlciB0aGFuIGEgUGxhdGZvcm1MYXllciBiZWNh
dXNlIFBsYXRmb3JtTGF5ZXIKKyAgICAvLyBpcyBkZWZpbmVkIGRpZmZlcmVudGx5IGZvciBPYmog
QyBhbmQgQysrLiBUaGlzIGFsbG93cyBjYWxsZXJzIGZyb20gYm90aCBsYW5ndWFnZXMuCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisKKyAgICB+UGxhdGZvcm1DQUxheWVyTWFj
KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1RpbGVkQmFja2luZ0xheWVyKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbGF5ZXJUeXBlKCkgPT0gTGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xh
eWVyIHx8IGxheWVyVHlwZSgpID09IExheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGly
dHlSZWN0ID0gMCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNDaGFu
Z2VkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogc3VwZXJsYXll
cigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXll
cigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZv
cm1DQUxheWVyTGlzdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxTdWJs
YXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3VibGF5ZXIoUGxhdGZv
cm1DQUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciosIHNpemVfdCBpbmRleCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxh
eWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0KiBj
dXN0b21TdWJsYXllcnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2N1c3RvbVN1YmxheWVy
cy5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5
ZXIqIHNvdXJjZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldE9wYXF1ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGJvdW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29u
c3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3Np
dGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIGFu
Y2hvclBvaW50KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBv
aW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
SGlkZGVuKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5Rmxp
cHBlZChib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJsZVNpZGVkKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYpIE9WRVJSSURFOworICAgIHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1
YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1l
T2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxvYXQgY29u
dGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxl
ZEJhY2tpbmcoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbm91c2x5RGlz
cGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1DQUxheWVy
TWFjKExheWVyVHlwZSwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpOworCisgICAgdmlydHVhbCBBVlBsYXllckxheWVyKiBwbGF5ZXJMYXllcigpIGNvbnN0IE9W
RVJSSURFOworCisgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2RlbGVnYXRlOworICAgIE93blB0
cjxQbGF0Zm9ybUNBTGF5ZXJMaXN0PiBtX2N1c3RvbVN1YmxheWVyczsKK307CisKK30KKworI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFBsYXRmb3Jt
Q0FMYXllck1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQppbmRleCBmYjdjZjRmLi42Njdm
MjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVy
LmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIKIAogI2ltcG9ydCAiQW5pbWF0aW9u
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKQEAgLTQ1LDE3ICs0NSwz
NyBAQAogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbXBv
cnQgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIFNPRlRf
TElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQogU09GVF9MSU5LX0NMQVNTKEFW
Rm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKIAotdXNpbmcgc3RkOjptaW47Ci11c2luZyBzdGQ6
Om1heDsKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1Bhc3NSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UGxhdGZvcm1DQUxheWVyTWFjKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKK30KKworUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHZvaWQqIHBsYXRm
b3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlQ3VzdG9tLCBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7Cit9CisKK3N0YXRpYyBO
U1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBvaW50ZXIgPSBAIldLUGxhdGZvcm1DQUxh
eWVyIjsKK1BsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIo
dm9pZCogcGxhdGZvcm1MYXllcikKK3sKKyAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gUG9pbnRlciB0byBQbGF0Zm9ybUNBTGF5ZXIgaXMga2VwdCBp
biBhIGtleSBvZiB0aGUgQ0FMYXllcgorICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxh
eWVyID0gbmlsOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHBsYXRmb3Jt
Q0FMYXllciA9IHN0YXRpY19jYXN0PFBsYXRmb3JtQ0FMYXllcio+KFtbc3RhdGljX2Nhc3Q8Q0FM
YXllcio+KHBsYXRmb3JtTGF5ZXIpIHZhbHVlRm9yS2V5OnBsYXRmb3JtQ0FMYXllclBvaW50ZXJd
IHBvaW50ZXJWYWx1ZV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1
cm4gcGxhdGZvcm1DQUxheWVyOworfQorCiAvLyBUaGlzIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUg
YXMgaW4gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQogc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
V0tOb25aZXJvQmVnaW5UaW1lRmxhZyA9IEAiV0tQbGF0Zm9ybUNBQW5pbWF0aW9uTm9uWmVyb0Jl
Z2luVGltZUZsYWciOwogCkBAIC0xMTIsMTcgKzEzMiw5IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFU
aW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQogLSAoQk9PTClhY2NlbGVyYXRlc0Ry
YXdpbmc7CiBAZW5kCiAKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBv
aW50ZXIgPSBAIldLUGxhdGZvcm1DQUxheWVyIjsKLQotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6Omlz
VmFsdWVGdW5jdGlvblN1cHBvcnRlZCgpCi17Ci0gICAgc3RhdGljIGJvb2wgc0hhdmVWYWx1ZUZ1
bmN0aW9uID0gW0NBUHJvcGVydHlBbmltYXRpb24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6
QHNlbGVjdG9yKHNldFZhbHVlRnVuY3Rpb246KV07Ci0gICAgcmV0dXJuIHNIYXZlVmFsdWVGdW5j
dGlvbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE93bmVyKFBsYXRmb3JtQ0FMYXll
ckNsaWVudCogb3duZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0T3duZXIoUGxhdGZv
cm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICBtX293bmVyID0gb3duZXI7CisgICAgUGxh
dGZvcm1DQUxheWVyOjpzZXRPd25lcihvd25lcik7CiAgICAgCiAgICAgLy8gQ2hhbmdlIHRoZSBk
ZWxlZ2F0ZSdzIG93bmVyIGlmIG5lZWRlZAogICAgIGlmIChtX2RlbGVnYXRlKQpAQCAtMTU5LDE4
ICsxNzEsOCBAQCBzdGF0aWMgTlNTdHJpbmcqIHRvQ0FGaWx0ZXJUeXBlKFBsYXRmb3JtQ0FMYXll
cjo6RmlsdGVyVHlwZSB0eXBlKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9y
bUNBTGF5ZXIobGF5ZXJUeXBlLCAwLCBvd25lcikpOwotfQotCi1QYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBs
YXRmb3JtQ0FMYXllcihMYXllclR5cGVDdXN0b20sIHN0YXRpY19jYXN0PFBsYXRmb3JtTGF5ZXIq
PihwbGF0Zm9ybUxheWVyKSwgb3duZXIpKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9y
bUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQorUGxhdGZvcm1D
QUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZv
cm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCisgICAgOiBQbGF0
Zm9ybUNBTGF5ZXIob3duZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAg
ICAgaWYgKGxheWVyKSB7CkBAIC0yMzAsMTMgKzIzMiwxMyBAQCBQbGF0Zm9ybUNBTGF5ZXI6OlBs
YXRmb3JtQ0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllciwg
UGxhdAogICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgewogICAgICAgICBtX2N1c3Rv
bVN1YmxheWVycyA9IGFkb3B0UHRyKG5ldyBQbGF0Zm9ybUNBTGF5ZXJMaXN0KDEpKTsKICAgICAg
ICAgQ0FMYXllciogdGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyID0gW3N0YXRpY19jYXN0PFdl
YlRpbGVkQmFja2luZ0xheWVyICo+KG1fbGF5ZXIuZ2V0KCkpIHRpbGVDb250YWluZXJMYXllcl07
Ci0gICAgICAgICgqbV9jdXN0b21TdWJsYXllcnMpWzBdID0gUGxhdGZvcm1DQUxheWVyOjpjcmVh
dGUodGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyLCAwKTsKKyAgICAgICAgKCptX2N1c3RvbVN1
YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29u
dGFpbmVyTGF5ZXIsIDApOwogICAgIH0KICAgICAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNs
b25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyTWFjOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKSBjb25zdAogewogICAgIExheWVyVHlwZSB0eXBlOwogICAgIHN3aXRjaCAobGF5
ZXJUeXBlKCkpIHsKQEAgLTI1MSw4ICsyNTMsOCBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQog
ICAgICAgICB0eXBlID0gTGF5ZXJUeXBlTGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0g
ICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNy
ZWF0ZSh0eXBlLCBvd25lcik7Ci0KKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBuZXdMYXll
ciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKKyAgICAKICAgICBu
ZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24oKSk7CiAgICAgbmV3TGF5ZXItPnNldEJvdW5k
cyhib3VuZHMoKSk7CiAgICAgbmV3TGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkp
OwpAQCAtMjc5LDEzICsyODEsOSBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQogICAgIHJldHVy
biBuZXdMYXllcjsKIH0KIAotUGxhdGZvcm1DQUxheWVyOjp+UGxhdGZvcm1DQUxheWVyKCkKK1Bs
YXRmb3JtQ0FMYXllck1hYzo6flBsYXRmb3JtQ0FMYXllck1hYygpCiB7CiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0VmFsdWU6bmlsIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyXTsKLQotICAg
IC8vIENsZWFyIHRoZSBvd25lciwgd2hpY2ggYWxzbyBjbGVhcnMgaXQgaW4gdGhlIGRlbGVnYXRl
IHRvIHByZXZlbnQgYXR0ZW1wdHMgCi0gICAgLy8gdG8gdXNlIHRoZSBHcmFwaGljc0xheWVyQ0Eg
YWZ0ZXIgaXQgaGFzIGJlZW4gZGVzdHJveWVkLgotICAgIHNldE93bmVyKDApOwogICAgIAogICAg
IC8vIFJlbW92ZSB0aGUgb3duZXIgcG9pbnRlciBmcm9tIHRoZSBkZWxlZ2F0ZSBpbiBjYXNlIHRo
ZXJlIGlzIGEgcGVuZGluZyBhbmltYXRpb25TdGFydGVkIGV2ZW50LgogICAgIFtzdGF0aWNfY2Fz
dDxXZWJBbmltYXRpb25EZWxlZ2F0ZSo+KG1fZGVsZWdhdGUuZ2V0KCkpIHNldE93bmVyOm5pbF07
CkBAIC0yOTQsMzEgKzI5MiwxMyBAQCBQbGF0Zm9ybUNBTGF5ZXI6On5QbGF0Zm9ybUNBTGF5ZXIo
KQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5n
ZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLVBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXIodm9pZCogcGxhdGZvcm1MYXllcikKLXsKLSAgICBpZiAoIXBsYXRm
b3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAgICAvLyBQb2ludGVyIHRv
IFBsYXRmb3JtQ0FMYXllciBpcyBrZXB0IGluIGEga2V5IG9mIHRoZSBDQUxheWVyCi0gICAgUGxh
dGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIgPSBuaWw7Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgcGxhdGZvcm1DQUxheWVyID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1D
QUxheWVyKj4oW1tzdGF0aWNfY2FzdDxDQUxheWVyKj4ocGxhdGZvcm1MYXllcikgdmFsdWVGb3JL
ZXk6cGxhdGZvcm1DQUxheWVyUG9pbnRlcl0gcG9pbnRlclZhbHVlXSk7Ci0gICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXI7Ci19Ci0KLVBsYXRm
b3JtTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbGF5ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVy
TWFjOjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKIHsKICAgICBp
ZiAobV9vd25lcikKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3Rh
cnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNEaXNw
bGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlSZWN0KQpAQCAtMzI4LDI2ICsz
MDgsMjYgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9h
dFJlY3QqIGRpcnR5UmVjdCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAgICAg
Ci12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNDaGFuZ2VkKCkKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjpzZXRDb250ZW50c0NoYW5nZWQoKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzQ2hhbmdlZF07CiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QbGF0Zm9ybUNBTGF5ZXIqIFBsYXRm
b3JtQ0FMYXllcjo6c3VwZXJsYXllcigpIGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3Jt
Q0FMYXllck1hYzo6c3VwZXJsYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ0FM
YXllcihbbV9sYXllci5nZXQoKSBzdXBlcmxheWVyXSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxh
eWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6cmVt
b3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIFttX2xheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMo
Y29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFj
OjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKIHsKICAgICAv
LyBTaG9ydCBjaXJjdWl0aW5nIGhlcmUgbm90IG9ubHkgYXZvaWRzIHRoZSBhbGxvY2F0aW9uIG9m
IHN1YmxheWVycywgYnV0IGF2b2lkcyA8cmRhcjovL3Byb2JsZW0vNzM5MDcxNj4gKHNlZSBiZWxv
dykKICAgICBpZiAobGlzdC5zaXplKCkgPT0gMCkgewpAQCAtMzY1LDcgKzM0NSw3IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYg
bGlzdCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpyZW1vdmVBbGxTdWJsYXllcnMoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnJl
bW92ZUFsbFN1YmxheWVycygpCiB7CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzczOTA3MTY+OiAtW0NBTGF5ZXIgc2V0U3VibGF5ZXJzOl0gY3Jhc2hlcyBpZiBzdWJsYXll
cnMgaXMgYW4gZW1wdHkgYXJyYXksIG9yIG5pbCwgdW5kZXIgR0MuCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCkBAIC0zNzcsNyArMzU3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnJlbW92ZUFsbFN1YmxheWVycygpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQog
Ci12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBs
YXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjphcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNB
TGF5ZXIqIGxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIEFT
U0VSVChtX2xheWVyICE9IGxheWVyLT5tX2xheWVyKTsKQEAgLTM4NSw3ICszNjUsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcjo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjppbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBzaXplX3QgaW5kZXgpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBs
YXllciwgc2l6ZV90IGluZGV4KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIEFTU0VSVChtX2xheWVyICE9IGxheWVyLT5tX2xheWVyKTsKQEAgLTM5Myw3ICszNzMsNyBA
QCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBs
YXllciwgc2l6ZV90IGluZGV4KQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJl
ZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFj
OjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FM
YXllciogbGF5ZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgQVNT
RVJUKG1fbGF5ZXIgIT0gbGF5ZXItPm1fbGF5ZXIpOwpAQCAtNDAxLDcgKzM4MSw3IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVu
Y2UsIFBsYXRmb3JtQ0FMYXllCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3Vy
Y2UpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxh
eWVyKiBzb3VyY2UpCiB7CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzcz
OTA3MTY+OiAtW0NBTGF5ZXIgc2V0U3VibGF5ZXJzOl0gY3Jhc2hlcyBpZiBzdWJsYXllcnMgaXMg
YW4gZW1wdHkgYXJyYXksIG9yIG5pbCwgdW5kZXIgR0MuCiAgICAgTlNBcnJheSogc3VibGF5ZXJz
ID0gW3NvdXJjZS0+bV9sYXllci5nZXQoKSBzdWJsYXllcnNdOwpAQCAtNDE5LDcgKzM5OSw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNv
dXJjZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FB
bmltYXRpb24qIGFuaW1hdGlvbikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjphZGRBbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24qIGFuaW1hdGlv
bikKIHsKICAgICAvLyBBZGQgdGhlIGRlbGVnYXRlCiAgICAgaWYgKCFtX2RlbGVnYXRlKSB7CkBA
IC00MzcsMTQgKzQxNywxNCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpy
ZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgcmVtb3ZlQW5pbWF0aW9uRm9y
S2V5OmtleV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uRm9yS2V5KGNv
bnN0IFN0cmluZyYga2V5KQorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBD
QVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBUHJv
cGVydHlBbmltYXRpb24qPihbbV9sYXllci5nZXQoKSBhbmltYXRpb25Gb3JLZXk6a2V5XSk7CiAg
ICAgaWYgKCFwcm9wZXJ0eUFuaW1hdGlvbikKQEAgLTQ1Miw0NCArNDMyLDQ0IEBAIFBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25Gb3JLZXko
Y29uc3QgU3RyaW5nJiBrCiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OmNyZWF0ZShw
cm9wZXJ0eUFuaW1hdGlvbik7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRNYXNrKFBs
YXRmb3JtQ0FMYXllciogbGF5ZXIpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0TWFzayhQ
bGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgIFttX2xheWVyLmdldCgpIHNldE1hc2s6bGF5ZXIgPyBsYXllci0+cGxhdGZvcm1MYXll
cigpIDogMF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1ib29sIFBsYXRm
b3JtQ0FMYXllcjo6aXNPcGFxdWUoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJNYWM6Omlz
T3BhcXVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgaXNPcGFxdWVdOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCit2b2lkIFBs
YXRmb3JtQ0FMYXllck1hYzo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3BhcXVlOnZhbHVlXTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNB
TGF5ZXI6OmJvdW5kcygpIGNvbnN0CitGbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyTWFjOjpib3Vu
ZHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBib3VuZHNdOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkg
c2V0Qm91bmRzOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZs
b2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBvc2l0aW9uKCkgY29uc3QKK0Zsb2F0UG9pbnQz
RCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBv
aW50ID0gW21fbGF5ZXIuZ2V0KCkgcG9zaXRpb25dOwogICAgIHJldHVybiBGbG9hdFBvaW50M0Qo
cG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIuZ2V0KCkgelBvc2l0aW9uXSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYg
dmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKQEAg
LTQ5Nyw3ICs0NzcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
LUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK0Zsb2F0
UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFuY2hvclBvaW50KCkgY29uc3QKIHsKICAgICBD
R1BvaW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdOwogICAgIGZsb2F0IHog
PSAwOwpAQCAtNTA1LDcgKzQ4NSw3IEBAIEZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFu
Y2hvclBvaW50KCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50
LnksIHopOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtl
KHZhbHVlLngoKSwgdmFsdWUueSgpKV07CkBAIC01MTMsMTE5ICs0OTMsMTE5IEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgg
UGxhdGZvcm1DQUxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXgg
UGxhdGZvcm1DQUxheWVyTWFjOjp0cmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSB0cmFuc2Zvcm1dOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldFRyYW5zZm9ybTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQog
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXI6OnN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllck1hYzo6c3VibGF5
ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBzdWJsYXll
clRyYW5zZm9ybV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRTdWJsYXllclRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FM
YXllck1hYzo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVy
LmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRkZW4oYm9vbCB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRIaWRkZW4oYm9vbCB2YWx1ZSkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRIaWRk
ZW46dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVlKQogewogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEdlb21ldHJ5Rmxp
cHBlZDp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1ib29sIFBs
YXRmb3JtQ0FMYXllcjo6aXNEb3VibGVTaWRlZCgpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXll
ck1hYzo6aXNEb3VibGVTaWRlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgp
IGlzRG91YmxlU2lkZWRdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RG91YmxlU2lk
ZWQoYm9vbCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXREb3VibGVTaWRlZChi
b29sIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xh
eWVyLmdldCgpIHNldERvdWJsZVNpZGVkOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjptYXNrc1RvQm91bmRzKCkgY29uc3QK
K2Jvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjptYXNrc1RvQm91bmRzKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gW21fbGF5ZXIuZ2V0KCkgbWFza3NUb0JvdW5kc107CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldE1hc2tzVG9Cb3VuZHM6dmFsdWVd
OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5
ZXI6OmFjY2VsZXJhdGVzRHJhd2luZygpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllck1hYzo6
YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkg
YWNjZWxlcmF0ZXNEcmF3aW5nXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFjY2Vs
ZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyTWFjOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
QWNjZWxlcmF0ZXNEcmF3aW5nOmFjY2VsZXJhdGVzRHJhd2luZ107CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCi1DRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50cygp
IGNvbnN0CitDRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyTWFjOjpjb250ZW50cygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGNvbnRlbnRzXTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldENvbnRlbnRzKENGVHlwZVJlZiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyTWFjOjpzZXRDb250ZW50cyhDRlR5cGVSZWYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6c3RhdGljX2Nh
c3Q8aWQ+KGNvbnN0X2Nhc3Q8dm9pZCo+KHZhbHVlKSldOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25z
dCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRz
UmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzUmVjdDp2YWx1ZV07CiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0TWluaWZpY2F0
aW9uRmlsdGVyOnRvQ0FGaWx0ZXJUeXBlKHZhbHVlKV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFnbmlmaWNhdGlvbkZpbHRl
cihGaWx0ZXJUeXBlIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE1hZ25pZmlj
YXRpb25GaWx0ZXIoRmlsdGVyVHlwZSB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRNYWduaWZpY2F0aW9uRmlsdGVyOnRvQ0FG
aWx0ZXJUeXBlKHZhbHVlKV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1D
b2xvciBQbGF0Zm9ybUNBTGF5ZXI6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBQbGF0
Zm9ybUNBTGF5ZXJNYWM6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtt
X2xheWVyLmdldCgpIGJhY2tncm91bmRDb2xvcl07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7CiAgICAg
Q0dGbG9hdCBjb21wb25lbnRzWzRdOwogICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwg
Y29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CkBAIC02MzgsMTQg
KzYxOCwxNCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJiB2YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDp2
YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKICAgICBD
R0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBj
b21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKQEAgLTY1OCwxMiAr
NjM4LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xv
ciYgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1mbG9hdCBQbGF0
Zm9ybUNBTGF5ZXI6Om9wYWNpdHkoKSBjb25zdAorZmxvYXQgUGxhdGZvcm1DQUxheWVyTWFjOjpv
cGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgb3BhY2l0eV07CiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTp2YWx1
ZV07CkBAIC02NzEsODggKzY1MSw4OCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3BhY2l0
eShmbG9hdCB2YWx1ZSkKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQogewogICAgIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcih0
aGlzLCBmaWx0ZXJzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmNvcHlGaWx0ZXJzRnJv
bShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZUxheWVyKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OmNvcHlGaWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZUxheWVy
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldEZpbHRlcnM6W3NvdXJjZUxheWVyLT5wbGF0Zm9ybUxheWVyKCkgZmlsdGVyc11dOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmZp
bHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK2Jv
b2wgUGxhdGZvcm1DQUxheWVyTWFjOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGFy
ZSBubyBmaWx0ZXJzIHRvIGF2b2lkIG5lZWRsZXNzIHdvcmsKICAgICBpZiAoIWZpbHRlcnMuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZp
bHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKICAgICAgICAg
c3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRToKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpWQUxJREFURURfQ1VTVE9NOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9N
OgogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGNhbiBvbmx5IGhhbmRsZSBkcm9wLXNoYWRvdyBpcyBpZiBpdCdzIGxhc3QgaW4gdGhlIGxpc3QK
LSAgICAgICAgICAgIGlmIChpIDwgKGZpbHRlcnMuc2l6ZSgpIC0gMSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBjYW4gb25seSBo
YW5kbGUgZHJvcC1zaGFkb3cgaXMgaWYgaXQncyBsYXN0IGluIHRoZSBsaXN0CisgICAgICAgICAg
ICAgICAgaWYgKGkgPCAoZmlsdGVycy5zaXplKCkgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0TmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
ICAgIFttX2xheWVyLmdldCgpIHNldE5hbWU6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZyYW1lKGNvbnN0IEZsb2F0
UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RnJhbWUoY29uc3QgRmxv
YXRSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBb
bV9sYXllci5nZXQoKSBzZXRGcmFtZTp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCit2
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U3BlZWQ6dmFs
dWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllck1hYzo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKIHsKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRUaW1lT2Zm
c2V0OnZhbHVlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLWZsb2F0IFBs
YXRmb3JtQ0FMYXllcjo6Y29udGVudHNTY2FsZSgpIGNvbnN0CitmbG9hdCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQo
KSBjb250ZW50c1NjYWxlXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRz
U2NhbGUoZmxvYXQgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNT
Y2FsZShmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOnZhbHVlXTsKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyOjp0aWxl
ZEJhY2tpbmcoKQorVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFja2lu
ZygpCiB7CiAgICAgaWYgKCF1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC03NjEsNyArNzQxLDcgQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXI6OnRp
bGVkQmFja2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxlZEJhY2tpbmdd
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0lu
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c3lu
Y2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc3Niw3ICs3NTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25v
dXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1BVlBsYXllckxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXllckxheWVyKCkgY29uc3QKK0FWUGxheWVyTGF5ZXIqIFBsYXRmb3JtQ0FMYXllck1hYzo6
cGxheWVyTGF5ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChbbV9sYXllci5nZXQoKSBpc0tpbmRP
ZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAgICAgcmV0dXJuIChBVlBsYXllckxh
eWVyKiltX2xheWVyLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMWZmZTI5
Ny4uNWQwYzM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSAiRGVmV25kUHJvY1dpbmRvd0NsYXNzLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaGFu
Z2VzRmx1c2hlci5oIgogI2luY2x1ZGUgIkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luLmgi
CiAjaW5jbHVkZSAiV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJXZWJDb3Jl
SW5zdGFuY2VIYW5kbGUuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTEyMyw3ICsxMjMsNyBA
QCBQYXNzUmVmUHRyPENBQ0ZMYXllclRyZWVIb3N0PiBDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
KCkKIAogQ0FDRkxheWVyVHJlZUhvc3Q6OkNBQ0ZMYXllclRyZWVIb3N0KCkKICAgICA6IG1fY2xp
ZW50KDApCi0gICAgLCBtX3Jvb3RMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllciwgMCkpCisgICAgLCBtX3Jvb3RMYXllcihQbGF0
Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXll
ciwgMCkpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9zaG91bGRGbHVzaFBlbmRpbmdHcmFw
aGljc0xheWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhm
YWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXggMzU4NTNhNi4uOWZlNzlhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgogCiAjaW5jbHVkZSAiQWJzdHJhY3RD
QUNGTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTQwLDE0ICs0MCwxNCBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6Omlz
VmFsdWVGdW5jdGlvblN1cHBvcnRlZCgpCitQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihsYXllclR5cGUsIDAsIG93bmVyKSk7CiB9CiAKLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVy
KQorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRl
KFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCiB7Ci0gICAgbV9vd25lciA9IG93bmVyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxh
dGZvcm1DQUxheWVyV2luKExheWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsK
IH0KIAogc3RhdGljIENGU3RyaW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZSB0eXBlKQpAQCAtODUsMTQgKzg1LDEzIEBAIHN0YXRpYyBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCogaW50ZXJuKHZvaWQqIGxheWVyKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCo+KENBQ0ZMYXllckdldFVzZXJEYXRhKHN0YXRp
Y19jYXN0PENBQ0ZMYXllclJlZj4obGF5ZXIpKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxh
dGZvcm1DQUxheWVyKGxheWVyVHlwZSwgMCwgb3duZXIpKTsKLX0KLQotUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIs
IFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3Jt
Q0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlQ3VzdG9tLCBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgaWYgKCFw
bGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXllcik7CisgICAg
cmV0dXJuIGxheWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwogfQogCiBzdGF0
aWMgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJl
ZiBjb250ZXh0KQpAQCAtMTA4LDggKzEwNyw4IEBAIHN0YXRpYyB2b2lkIGxheW91dFN1YmxheWVy
c1Byb2MoQ0FDRkxheWVyUmVmIGNhTGF5ZXIpCiAgICAgICAgIGxheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKGxheWVyKTsKIH0KIAotUGxhdGZvcm1D
QUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXll
ciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBtX293bmVyKG93
bmVyKQorUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCisgICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCiB7CiAgICAgaWYgKGxheWVyKSB7CiAg
ICAgICAgIG1fbGF5ZXJUeXBlID0gTGF5ZXJUeXBlQ3VzdG9tOwpAQCAtMTI5LDcgKzEyOCw3IEBA
IFBsYXRmb3JtQ0FMYXllcjo6UGxhdGZvcm1DQUxheWVyKExheWVyVHlwZSBsYXllclR5cGUsIFBs
YXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0CiAgICAgfQogfQogCi1QbGF0Zm9ybUNBTGF5ZXI6On5Q
bGF0Zm9ybUNBTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVyV2lu
KCkKIHsKICAgICAvLyBUb3NzIGFsbCB0aGUga2lkcwogICAgIHJlbW92ZUFsbFN1YmxheWVycygp
OwpAQCAtMTM4LDI5ICsxMzcsMTYgQEAgUGxhdGZvcm1DQUxheWVyOjp+UGxhdGZvcm1DQUxheWVy
KCkKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4o
dGhpcyk7CiAgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5nZXQoKSwgMCk7CiAKLSAg
ICAvLyBDbGVhciB0aGUgb3duZXIsIHdoaWNoIGFsc28gY2xlYXJzIGl0IGluIHRoZSBkZWxlZ2F0
ZSB0byBwcmV2ZW50IGF0dGVtcHRzIAotICAgIC8vIHRvIHVzZSB0aGUgR3JhcGhpY3NMYXllckNB
IGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICBzZXRPd25lcigwKTsKLQogICAgIENB
Q0ZMYXllclJlbW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogCiAgICAgZGVsZXRl
IGxheWVySW50ZXJuOwogfQogCi1QbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKHZvaWQqIHBsYXRmb3JtTGF5ZXIpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUxh
eWVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbCogbGF5ZXJJbnRlcm4gPSBpbnRlcm4ocGxhdGZvcm1MYXllcik7Ci0gICAgcmV0dXJuIGxh
eWVySW50ZXJuID8gbGF5ZXJJbnRlcm4tPm93bmVyKCkgOiAwOwotfQotCi1QYXNzUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKSBjb25zdAorUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FM
YXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAg
ICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlTGF5ZXI7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9y
bUNBTGF5ZXI6OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZSh0eXBlLCBvd25lcik7CiAK
ICAgICBuZXdMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24oKSk7CiAgICAgbmV3TGF5ZXItPnNl
dEJvdW5kcyhib3VuZHMoKSk7CkBAIC0xODAsMTggKzE2NiwxMyBAQCBQYXNzUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKQogICAgIHJldHVybiBuZXdMYXllcjsKIH0KIAotUGxhdGZvcm1MYXllciogUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllci5n
ZXQoKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnJvb3RMYXllcigp
IGNvbnN0CitQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcldpbjo6cm9vdExheWVyKCkg
Y29uc3QKIHsKICAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0KiBob3N0ID0gbGF5ZXJUcmVl
SG9zdEZvckxheWVyKHRoaXMpOwogICAgIHJldHVybiBob3N0ID8gaG9zdC0+cm9vdExheWVyKCkg
OiAwOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJ
bnRlcnZhbCBiZWdpblRpbWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6YW5pbWF0aW9uU3Rh
cnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpCiB7CiAgICAgLy8gVXBkYXRlIHN0YXJ0IHRp
bWUgZm9yIGFueSBhbmltYXRpb24gbm90IHlldCBzdGFydGVkCiAgICAgQ0ZUaW1lSW50ZXJ2YWwg
Y2FjZkJlZ2luVGltZSA9IGN1cnJlbnRUaW1lVG9NZWRpYVRpbWUoYmVnaW5UaW1lKTsKQEAgLTIw
NCwzNiArMTg1LDE5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKENG
VGltZUludGVydmFsIGJlZ2luVGltZSkKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVy
QW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi1zdGF0aWMgdm9pZCByZXN1Ym1pdEFs
bEFuaW1hdGlvbnMoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKLXsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxh
eWVyLT5hbmltYXRpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXItPmFuaW1h
dGlvbnMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIENBQ0ZMYXllckFkZEFu
aW1hdGlvbihsYXllci0+cGxhdGZvcm1MYXllcigpLCBpdC0+a2V5LmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIGl0LT52YWx1ZS0+cGxhdGZvcm1BbmltYXRpb24oKSk7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUxheWVyOjplbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCkKLXsKLSAgICByZXN1Ym1pdEFs
bEFuaW1hdGlvbnModGhpcyk7Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXJMaXN0IGNoaWxkcmVuOwot
ICAgIGludGVybih0aGlzKS0+Z2V0U3VibGF5ZXJzKGNoaWxkcmVuKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZHJlbltpXS0+
ZW5zdXJlQW5pbWF0aW9uc1N1Ym1pdHRlZCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkK
IHsKICAgICBpbnRlcm4odGhpcyktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOwogfQogICAg
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzQ29tbWl0KCkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luOjpzZXROZWVkc0NvbW1pdCgpCiB7CiAgICAgQWJzdHJhY3RDQUNGTGF5ZXJUcmVl
SG9zdCogaG9zdCA9IGxheWVyVHJlZUhvc3RGb3JMYXllcih0aGlzKTsKICAgICBpZiAoaG9zdCkK
ICAgICAgICAgaG9zdC0+bGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRDb250ZW50c0NoYW5nZWQoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dENvbnRlbnRzQ2hhbmdlZCgpCiB7CiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIGVxdWl2YWxl
bnQgb2Ygc2V0Q29udGVudHNDaGFuZ2VkIGluIENBQ0YuIEZvciBub3cgSSB3aWxsCiAgICAgLy8g
c2V0IGNvbnRlbnRzIHRvIDAgYW5kIHRoZW4gYmFjayB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdG8g
c2VlIGlmIHRoYXQKQEAgLTI0NCw3ICsyMDgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
Q29udGVudHNDaGFuZ2VkKCkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0TmVlZHNMYXlvdXQoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dE5lZWRzTGF5b3V0KCkKIHsKICAgICBpZiAoIW1fb3duZXIgfHwgIW1fb3duZXItPnBsYXRmb3Jt
Q0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1
MywzOSArMjE3LDM5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0xheW91dCgpCiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5
ZXI6OnN1cGVybGF5ZXIoKSBjb25zdAorUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXIoQ0FD
RkxheWVyR2V0U3VwZXJsYXllcihtX2xheWVyLmdldCgpKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQogewogICAgIENBQ0ZMYXllclJlbW92ZUZyb21TdXBlcmxh
eWVyKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlz
dCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1D
QUxheWVyTGlzdCYgbGlzdCkKIHsKICAgICBpbnRlcm4odGhpcyktPnNldFN1YmxheWVycyhsaXN0
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFsbFN1YmxheWVycygpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAgICBpbnRlcm4o
dGhpcyktPnJlbW92ZUFsbFN1YmxheWVycygpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6
YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luOjphcHBlbmRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQogewogICAgIC8v
IFRoaXMgbXVzdCBiZSBpbiB0ZXJtcyBvZiBpbnNlcnRTdWJsYXllciBpbnN0ZWFkIG9mIGEgZGly
ZWN0IGNhbGwgc28gUGxhdGZvcm1DQUxheWVySW50ZXJuYWwgY2FuIG92ZXJyaWRlLgogICAgIGlu
c2VydFN1YmxheWVyKGxheWVyLCBpbnRlcm4odGhpcyktPnN1YmxheWVyQ291bnQoKSk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjppbnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxh
eWVyLCBzaXplX3QgaW5kZXgpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6aW5zZXJ0U3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllciwgc2l6ZV90IGluZGV4KQogewogICAgIGludGVybih0
aGlzKS0+aW5zZXJ0U3VibGF5ZXIobGF5ZXIsIGluZGV4KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSwgUGxhdGZv
cm1DQUxheWVyKiBuZXdMYXllcikKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpyZXBsYWNlU3Vi
bGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciogbmV3TGF5
ZXIpCiB7CiAgICAgLy8gVGhpcyBtdXN0IG5vdCB1c2UgZGlyZWN0IGNhbGxzIHRvIGFsbG93IFBs
YXRmb3JtQ0FMYXllckludGVybmFsIHRvIG92ZXJyaWRlLgogICAgIEFTU0VSVF9BUkcocmVmZXJl
bmNlLCByZWZlcmVuY2UpOwpAQCAtMzA3LDcgKzI3MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
OjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FM
YXllCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRvcHRTdWJsYXllcnMoUGxh
dGZvcm1DQUxheWVyKiBzb3VyY2UpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6YWRvcHRTdWJs
YXllcnMoUGxhdGZvcm1DQUxheWVyKiBzb3VyY2UpCiB7CiAgICAgUGxhdGZvcm1DQUxheWVyTGlz
dCBzdWJsYXllcnM7CiAgICAgaW50ZXJuKHNvdXJjZSktPmdldFN1YmxheWVycyhzdWJsYXllcnMp
OwpAQCAtMzE2LDcgKzI4MCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjphZG9wdFN1YmxheWVy
cyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkKICAgICBzZXRTdWJsYXllcnMoc3VibGF5ZXJzKTsK
IH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJp
bmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYW5pbWF0aW9uKQordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW46OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1D
QUFuaW1hdGlvbiogYW5pbWF0aW9uKQogewogICAgIC8vIEFkZCBpdCB0byB0aGUgYW5pbWF0aW9u
IGxpc3QKICAgICBtX2FuaW1hdGlvbnMuYWRkKGtleSwgYW5pbWF0aW9uKTsKQEAgLTMzMCw3ICsy
OTQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0
cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKgogICAgICAgICBob3N0LT5hZGRQZW5kaW5n
QW5pbWF0ZWRMYXllcih0aGlzKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnJlbW92ZUFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
OjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgLy8gUmVt
b3ZlIGl0IGZyb20gdGhlIGFuaW1hdGlvbiBsaXN0CiAgICAgbV9hbmltYXRpb25zLnJlbW92ZShr
ZXkpOwpAQCAtMzQ0LDcgKzMwOCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpyZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0K
IAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4gUGxhdGZvcm1DQUxheWVyV2luOjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXkpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiA+
OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IG1f
YW5pbWF0aW9ucy5lbmQoKSkKQEAgLTM1MywxNjAgKzMxNywxNjAgQEAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXI6OmFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGsKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldE1hc2soUGxhdGZvcm1DQUxheWVyKiBsYXllcikKIHsKICAgICBDQUNGTGF5ZXJTZXRN
YXNrKG1fbGF5ZXIuZ2V0KCksIGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjppc09wYXF1
ZSgpIGNvbnN0Citib29sIFBsYXRmb3JtQ0FMYXllcldpbjo6aXNPcGFxdWUoKSBjb25zdAogewog
ICAgIHJldHVybiBDQUNGTGF5ZXJJc09wYXF1ZShtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1ZShib29sIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldE9wYXF1ZShib29sIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldE9wYXF1ZSht
X2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotRmxvYXRS
ZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0Zsb2F0UmVjdCBQbGF0Zm9ybUNB
TGF5ZXJXaW46OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldEJvdW5k
cyhtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvdW5k
cyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0Qm91bmRz
KHZhbHVlKTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitGbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVy
V2luOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENBQ0ZMYXllckdl
dFBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpOwogICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQu
eCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpKTsKIH0KIAot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dDNEJiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbihtX2xheWVyLmdldCgpLCBD
R1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSkpOwogICAgIENBQ0ZMYXllclNldFpQb3Np
dGlvbihtX2xheWVyLmdldCgpLCB2YWx1ZS56KCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK0Zs
b2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuY2hvclBvaW50KCkgY29uc3QKIHsKICAg
ICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSk7
CiAgICAgZmxvYXQgeiA9IENBQ0ZMYXllckdldEFuY2hvclBvaW50WihtX2xheWVyLmdldCgpKTsK
ICAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50LnksIHopOwogfQogCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFuY2hvclBvaW50KG1fbGF5ZXIuZ2V0
KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKSk7CiAgICAgQ0FDRkxheWVyU2V0
QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnooKSk7CiAgICAgc2V0TmVlZHNDb21t
aXQoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVyOjp0cmFuc2Zv
cm0oKSBjb25zdAorVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVyV2luOjp0cmFu
c2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRUcmFuc2Zvcm0obV9sYXll
ci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQ0FD
RkxheWVyU2V0VHJhbnNmb3JtKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXI6OnN1Ymxh
eWVyVHJhbnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXll
cldpbjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJH
ZXRTdWJsYXllclRyYW5zZm9ybShtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2
YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0U3VibGF5
ZXJUcmFuc2Zvcm0obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRIaWRkZW4oYm9vbCB2YWx1ZSkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyV2luOjpzZXRIaWRkZW4oYm9vbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5
ZXJTZXRIaWRkZW4obV9sYXllci5nZXQoKSwgdmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCB2YWx1
ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRHZW9tZXRyeUZsaXBwZWQobV9sYXllci5nZXQoKSwgdmFs
dWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjpp
c0RvdWJsZVNpZGVkKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luOjppc0RvdWJsZVNp
ZGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVySXNEb3VibGVTaWRlZChtX2xheWVy
LmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldERvdWJsZVNpZGVkKGJvb2wg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0RG91YmxlU2lkZWQoYm9vbCB2YWx1
ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXREb3VibGVTaWRlZChtX2xheWVyLmdldCgpLCB2YWx1ZSk7
CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6Om1hc2tz
VG9Cb3VuZHMoKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46Om1hc2tzVG9Cb3VuZHMo
KSBjb25zdAogewogICAgIHJldHVybiBDQUNGTGF5ZXJHZXRNYXNrc1RvQm91bmRzKG1fbGF5ZXIu
Z2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29s
IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2
YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRNYXNrc1RvQm91bmRzKG1fbGF5ZXIuZ2V0KCksIHZh
bHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1ib29sIFBsYXRmb3JtQ0FMYXllcjo6
YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luOjphY2Nl
bGVyYXRlc0RyYXdpbmcoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKQogewogfQogCi1DRlR5cGVS
ZWYgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50cygpIGNvbnN0CitDRlR5cGVSZWYgUGxhdGZvcm1D
QUxheWVyV2luOjpjb250ZW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldENv
bnRlbnRzKG1fbGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29u
dGVudHMoQ0ZUeXBlUmVmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRl
bnRzKENGVHlwZVJlZiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRDb250ZW50cyhtX2xheWVy
LmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVl
KQogewogICAgIENBQ0ZMYXllclNldENvbnRlbnRzUmVjdChtX2xheWVyLmdldCgpLCB2YWx1ZSk7
CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE1p
bmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewogICAgIENBQ0ZM
YXllclNldE1pbmlmaWNhdGlvbkZpbHRlcihtX2xheWVyLmdldCgpLCB0b0NBQ0ZGaWx0ZXJUeXBl
KHZhbHVlKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRNYWduaWZpY2F0aW9uRmls
dGVyKEZpbHRlclR5cGUgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0TWFnbmlm
aWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldE1hZ25p
ZmljYXRpb25GaWx0ZXIobV9sYXllci5nZXQoKSwgdG9DQUNGRmlsdGVyVHlwZSh2YWx1ZSkpOwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUNvbG9yIFBsYXRmb3JtQ0FMYXllcjo6YmFja2dy
b3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFBsYXRmb3JtQ0FMYXllcldpbjo6YmFja2dyb3VuZENv
bG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0QmFja2dyb3VuZENvbG9yKG1f
bGF5ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewogICAgIENHRmxvYXQgY29tcG9uZW50
c1s0XTsKICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNv
bXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwpAQCAtNTE4LDEzICs0ODIsMTMgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvcmRl
cldpZHRoKGZsb2F0IHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlcldp
ZHRoKGZsb2F0IHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG1fbGF5ZXIu
Z2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKICAgICBD
R0Zsb2F0IGNvbXBvbmVudHNbNF07CiAgICAgdmFsdWUuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBj
b21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKQEAgLTUzNiwxMiAr
NTAwLDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xv
ciYgdmFsdWUpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotZmxvYXQgUGxhdGZvcm1DQUxh
eWVyOjpvcGFjaXR5KCkgY29uc3QKK2Zsb2F0IFBsYXRmb3JtQ0FMYXllcldpbjo6b3BhY2l0eSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldE9wYWNpdHkobV9sYXllci5nZXQoKSk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiB7CiAgICAgQ0FD
RkxheWVyU2V0T3BhY2l0eShtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21t
aXQoKTsKQEAgLTU0OSw1NyArNTEzLDQ3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFj
aXR5KGZsb2F0IHZhbHVlKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKQogewog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6Y29weUZpbHRlcnNGcm9tKGNvbnN0IFBsYXRmb3Jt
Q0FMYXllciopCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6Y29weUZpbHRlcnNGcm9tKGNvbnN0
IFBsYXRmb3JtQ0FMYXllciopCiB7CiB9CiAKLWJvb2wgUGxhdGZvcm1DQUxheWVyOjpmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0
TmFtZShtX2xheWVyLmdldCgpLCB2YWx1ZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKICAgICBz
ZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RnJhbWUoY29u
c3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRGcmFtZShj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0RnJhbWUodmFs
dWUpOwogICAgIHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpz
ZXRTcGVlZChmbG9hdCB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTcGVlZChm
bG9hdCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRTcGVlZChtX2xheWVyLmdldCgpLCB2YWx1
ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bjo6c2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJT
ZXRUaW1lT2Zmc2V0KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCi1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAorZmxv
YXQgUGxhdGZvcm1DQUxheWVyV2luOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gMTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQp
Ci17Ci19Ci0KLVRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyOjp0aWxlZEJhY2tpbmcoKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQpCiB7Ci0gICAg
cmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03MTEsNyArNjY1LDcgQEAgc3RhdGlj
IHZvaWQgcHJpbnRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBpbnQgaW5kZW50
KQogICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
OjpwcmludFRyZWUoKSBjb25zdAordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnByaW50VHJlZSgp
IGNvbnN0CiB7CiAgICAgLy8gUHJpbnQgaGVhZGluZyBpbmZvCiAgICAgQ0dSZWN0IHJvb3RCb3Vu
ZHMgPSBib3VuZHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xNzdmYTdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCkBAIC0wLDAg
KzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxheWVyV2luX2gKKyNkZWZpbmUgUGxh
dGZvcm1DQUxheWVyV2luX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFBsYXRmb3JtQ0FMYXllcldpbiBGSU5BTCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNs
aWVudCopOworICAgIAorICAgIH5QbGF0Zm9ybUNBTGF5ZXJXaW4oKTsKKworICAgIHZpcnR1YWwg
Ym9vbCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3Qq
IGRpcnR5UmVjdCA9IDApIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
Q2hhbmdlZCgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHN1cGVy
bGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVN1cGVy
bGF5ZXIoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFBs
YXRmb3JtQ0FMYXllckxpc3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxs
U3VibGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRTdWJsYXll
cihQbGF0Zm9ybUNBTGF5ZXIqLCBzaXplX3QgaW5kZXgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3Jt
Q0FMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgY29uc3QgUGxhdGZvcm1DQUxheWVyTGlz
dCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIHZpcnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZSkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0
cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlv
blN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBib29sIGlzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE9w
YXF1ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJvdW5kcygpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
M0QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50KCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZs
b2F0UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGlkZGVuKGJvb2wp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJsZVNpZGVkKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBD
RlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHMoQ0ZUeXBlUmVmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisg
ICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJS
SURFOworICAgIHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNvcHlGaWx0
ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAg
dmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U3BlZWQoZmxvYXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNl
dFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBmbG9h
dCBjb250ZW50c1NjYWxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzU2NhbGUoZmxvYXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzTGF5b3V0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQ29tbWl0KCkgT1ZFUlJJREU7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVh
bCB2b2lkIHByaW50VHJlZSgpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybUNBTGF5ZXJX
aW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cik7CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+PiBt
X2FuaW1hdGlvbnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJXaW5faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQz
RFdpbi5jcHAKaW5kZXggNmFiYjA0OS4uMDVlMTUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0RXaW4u
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXJXaW4uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIApAQCAtODUsNyArODYsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSAogICAg
IHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAjaWYgVVNFKENBKQotICAgIG1fd2ViR0xMYXllciA9
IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIs
IDApOworICAgIG1fd2ViR0xMYXllciA9IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlKFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIDApOwogI2VuZGlmCiAKICAgICBpZiAocmVuZGVy
U3R5bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKaW5kZXggOWRkMjVmMi4uZTkxMTM3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcApAQCAtNjIsNyArNjIsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIKICNpbmNs
dWRlICJXS0NBSW1hZ2VRdWV1ZS5oIgogI2VuZGlmCiAKQEAgLTExOTMsMTQgKzExOTMsMTQgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpjcmVhdGVMYXll
ckZvck1vdmllKCkKIAogICAgIC8vIENyZWF0ZSBhIFBsYXRmb3JtQ0FMYXllciB3aGljaCB3aWxs
IHRyYW5zZm9ybSB0aGUgY29udGVudHMgb2YgdGhlIHZpZGVvIGxheWVyCiAgICAgLy8gd2hpY2gg
aXMgaW4gbV9xdFZpZGVvTGF5ZXIuCi0gICAgbV90cmFuc2Zvcm1MYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5ZXJDbGll
bnQuZ2V0KCkpOworICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNy
ZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgp
KTsKICAgICBpZiAoIW1fdHJhbnNmb3JtTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE1hcmsgdGhlIGxheWVyIGFzIGFuY2hvcmVkIGluIHRoZSB0b3AgbGVmdC4KICAgICBtX3RyYW5z
Zm9ybUxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CiAKLSAgICBtX3F0Vmlk
ZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlTGF5ZXIsIDApOworICAgIG1fcXRWaWRlb0xheWVyID0gUGxhdGZvcm1DQUxheWVyV2luOjpj
cmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgMCk7CiAgICAgaWYgKCFtX3F0
VmlkZW9MYXllcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggOTQwNTcx
ZS4uNTY1ZDFkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0xMC0x
NCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0
dWFsaXplIFBsYXRmb3JtQ0FMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIyNjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpOgor
ICAgICAgICBJbmNsdWRlIFBsYXRmb3JtQ0FMYXllcldpbi5oIGFuZCBleHBsaWNpdGx5IG1ha2Ug
UGxhdGZvcm1DQUxheWVyV2lucyBoZXJlLgorCiAyMDEzLTEwLTEyICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIHRoZSB0b0hUTUxFbGVtZW50IGhl
bHBlciBmb3IgY2FzdGluZyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgdG8gSFRNTEVsZW1lbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKaW5kZXgg
ZmI0NzQ2Ni4uZWEwMTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllcldpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dFJ1bi5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgpAQCAtMjQ4LDcgKzI0OCw3IEBAIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIoKQogICAg
ICwgbV90aW1lcih0aGlzLCAmRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6dGltZXJGaXJlZCkK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBtX2xheWVyQ2xpZW50KGFk
b3B0UHRyKG5ldyBMYXllckNsaWVudCh0aGlzKSkpCi0gICAgLCBtX3Jvb3RDaGlsZChQbGF0Zm9y
bUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVy
Q2xpZW50LmdldCgpKSkKKyAgICAsIG1fcm9vdENoaWxkKFBsYXRmb3JtQ0FMYXllcldpbjo6Y3Jl
YXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5ZXJDbGllbnQuZ2V0KCkp
KQogI2VuZGlmCiAgICAgLCBtX2Z1bGxzY3JlZW5XaW5kb3coYWRvcHRQdHIobmV3IE1lZGlhUGxh
eWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3codGhpcykpKQogewo=
</data>
<flag name="review"
          id="236689"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>