<?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>145572</bug_id>
          
          <creation_ts>2015-06-02 15:08:53 -0700</creation_ts>
          <short_desc>Combine tiny DFAs into slightly larger ones</short_desc>
          <delta_ts>2015-06-04 18:02:24 -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>New Bugs</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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098921</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-02 15:08:53 -0700</bug_when>
    <thetext>Combine tiny DFAs into slightly larger ones</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098926</commentid>
    <comment_count>1</comment_count>
      <attachid>254109</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-02 15:16:05 -0700</bug_when>
    <thetext>Created attachment 254109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098933</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-02 15:19:17 -0700</bug_when>
    <thetext>Attachment 254109 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebCore/DFAHelpers.h:31:  Do not use &apos;using namespace WebCore;&apos;.  [build/using_namespace] [4]
ERROR: Source/WebCore/contentextensions/DFACombiner.cpp:86:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/contentextensions/DFACombiner.cpp:87:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 3 in 16 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>1099024</commentid>
    <comment_count>3</comment_count>
      <attachid>254109</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-02 20:03:48 -0700</bug_when>
    <thetext>Comment on attachment 254109
Patch

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

This seems good.  I&apos;ll have to look closer later.

&gt; Source/WebCore/contentextensions/DFA.cpp:130
&gt; +unsigned DFA::graphSize() const

I think there are places where we use nodes.size().  Put a FIXME: make nodes private

&gt; Source/WebCore/contentextensions/DFACombiner.cpp:53
&gt; +            memset(m_transitionTargets, 0xff, sizeof(m_transitionTargets));

0xFF

&gt; Source/WebCore/contentextensions/DFACombiner.cpp:83
&gt; +    uint32_t invalidNodeIndex = 0xffffffff;

const, capital F&apos;s here and elsewhere.

&gt; Source/WebCore/contentextensions/DFACombiner.cpp:87
&gt; +    enum class WhichDFA {
&gt; +        A,
&gt; +        B

Are there really not better names than this?

&gt; Source/WebCore/contentextensions/DFACombiner.cpp:253
&gt; +            // Minimizing is somewhat expensive. We only do it in bulk when we reach the threshold
&gt; +            // to reduce the load.

I think we should always minimize combined DFAs unless it is catastrophic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099026</commentid>
    <comment_count>4</comment_count>
      <attachid>254109</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-02 20:33:35 -0700</bug_when>
    <thetext>Comment on attachment 254109
Patch

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

&gt;&gt; Source/WebCore/contentextensions/DFACombiner.cpp:253
&gt;&gt; +            // to reduce the load.
&gt; 
&gt; I think we should always minimize combined DFAs unless it is catastrophic.

We do minimize them systematically, but only after they got big.

If we do it at every step, it doubles compile time for no additional gain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099096</commentid>
    <comment_count>5</comment_count>
      <attachid>254109</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-02 23:31:17 -0700</bug_when>
    <thetext>Comment on attachment 254109
Patch

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

I&apos;m not entirely convinced that fewer DFAs is worth the additional memory used for the byte code size.  I think this patch might hurt overall performance.

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:252
&gt; +    auto lowerFiltersWithoutDomainsDFAToBytecode = [&amp;](DFA&amp;&amp; dfa)

This should probably be refactored even more.  This is almost identical to lowerFiltersWithDomainsDFAToBytecode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099278</commentid>
    <comment_count>6</comment_count>
      <attachid>254109</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-03 14:25:26 -0700</bug_when>
    <thetext>Comment on attachment 254109
Patch

Let&apos;s land this.  We can always disable or tweak when we combine small DFAs to help performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099698</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-04 18:02:24 -0700</bug_when>
    <thetext>Committed r185230: &lt;http://trac.webkit.org/changeset/185230&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254109</attachid>
            <date>2015-06-02 15:16:05 -0700</date>
            <delta_ts>2015-06-03 14:25:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145572-20150602151546.patch</filename>
            <type>text/plain</type>
            <size>52720</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE1NTY3NmZhYmQzMmYz
ZThiZWQ3ZjkzNTlhZTc1YjE1OWVlNjMzZi4uNjc2MDAxZWRmZTJmYTM5ZGMwNjA3OWQ5YWYyM2E2
OTMxYWRmNjE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE1LTA2LTAyICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIENvbWJpbmUgdGlu
eSBERkFzIGludG8gc2xpZ2h0bHkgbGFyZ2VyIG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgQ29udGVudEV4
dGVuc2lvbnMgY29tcGlsZXIgdG8gY29tYmluZSB0aW55IERGQQorICAgICAgICB1bnRpbCB0aGV5
IHJlYWNoIGEgbWluaW11bSBzaXplLgorCisgICAgICAgIFRoZSBtYWluIHRvb2wgaW50cm9kdWNl
ZCBoZXJlIGlzIERGQU1lcmdlci4gSXQgY29tYmluZXMgMiBERkFzIGludG8KKyAgICAgICAgYSBz
aW5nbGUgREZBIHRoYXQgcmVwcmVzZW50IHRoZSB1bmlvbiBvZiB0aGUgdHdvIG1hY2hpbmVzLgor
ICAgICAgICBUaGF0IGlzIGRvbmUgYnkgYSBzaW1wbGUgc3Vic2V0IGNvbnN0cnVjdGlvbiBvbiB0
aGUgIm5hbWUiIG9mIHRoZSBub2RlcworICAgICAgICBpbiBlYWNoIERGQXMuCisKKyAgICAgICAg
U2luY2Ugd2Ugb25seSBtZXJnZSAyIG1hY2hpbmVzLCBhbmQgdGhleSBhcmUgYm90aCBkZXRlcm1p
bmlzdGljLCB3ZSBrbm93IHRoYXQKKyAgICAgICAgd2UgY2FuIG9ubHkgYmUgaW4gb25lIHN0YXRl
IG9mIGVhY2ggbWFjaGluZSwgb3IgYSBzdGF0ZSBpbiBvbmUgbWFjaGluZSB3aXRob3V0CisgICAg
ICAgIGVxdWl2YWxlbnQgaW4gdGhlIG90aGVyIG1hY2hpbmUuCisgICAgICAgIFdlIGV4cGxvaXQg
dGhhdCB0byBpZGVudGlmeSB0aGUgbWFwcGluZyBiZXR3ZWVuIG5vZGVzLiBUbyBpZGVudGlmeSBh
IG5vZGUgaW4KKyAgICAgICAgdGhlIG5ldyBtYWNoaW5lIGZyb20gbm9kZXMgaW4gdGhlIG9yaWdp
bmFsIG1hY2hpbmVzLCB3ZSBqdXN0IGNvbmNhdGVuYXRlIHRoZSBub2RlCisgICAgICAgIElEcyBp
bnRvIGEgc2luZ2xlIDY0IGJpdHMgbnVtYmVyLiBJZiB0aGVyZSBpcyBubyBub2RlIGluIG9uZSBv
ZiB0aGUgbWFjaGluZSwgd2UKKyAgICAgICAgdXNlIGEgc3BlY2lhbCB0YWcuCisKKyAgICAgICAg
VGhlIGN1cnJlbnQgYWxnb3JpdGhtIGRvZXMgbm90IGhhdmUgYW55IHN1YmdyYXBoIHBydW5pbmcs
IG1hY2hpbmVzIGdyb3cgdmVyeSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuIEJlY2F1c2Ugb2YgdGhh
dCwgd2Ugb25seSBtZXJnZSB2ZXJ5IHNtYWxsIERGQXMgYXQgdGhlIG1vbWVudC4KKworICAgICAg
ICBUZXN0OiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2ZpbHRlcnMtd2l0aC1xdWFudGlm
aWVycy1jb21iaW5lZC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNv
bXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxl
UnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25z
RGVidWdnaW5nLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6OmdyYXBoU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFDb21iaW5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1lcmdlcjo6REZBTWVyZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFNZXJnZXI6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFNZXJnZXI6OnNpZ25hdHVyZUZvckluZGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1lcmdlcjo6ZXh0cmFjdEluZGV4QSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWVyZ2VyOjpleHRyYWN0SW5kZXhC
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNZXJnZXI6OmdldE9y
Q3JlYXRlQ29tYmluZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpERkFNZXJnZXI6OnNldEhhbGZTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQU1lcmdlcjo6cG9wdWxhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWVyZ2VyOjpwb3B1bGF0ZUZyb21GYWxsYmFj
a1RyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFN
ZXJnZXI6OmNyZWF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFNZXJnZXI6OmNyZWF0ZUZhbGxiYWNrVHJhbnNpdGlvbklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFDb21iaW5lcjo6Y29tYmluZURG
QXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUNvbWJpbmVyLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUNvbWJpbmVyOjphZGRERkEpOgorCiAyMDE1LTA2
LTAxICBIdW5zZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBV
c2UgbW9kZXJuIGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAxCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWY5YzMyZWE3
ZmMyZmY1OWZiNjA5YjRhYjQxZDU2MzYxMmVmN2RlMi4uNWRkMDlmZDkxNWUzMTBkNTcwNDRmNTFh
YmRjNDczYzIwYTMwZjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAxNiw2ICsxMDE2LDggQEAKIAkJMjY5Mzk3MjYxQTRB
NUZCRDAwRTgzNDlEIC8qIE5GQS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLzsgfTsK
IAkJMjZBNTE3RkQxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkE1MTdGQjFBQjkyMjM4MDA2
MzM1REYgLyogREZBTWluaW1pemVyLmNwcCAqLzsgfTsKIAkJMjZBNTE3RkUxQUI5MjIzODAwNjMz
NURGIC8qIERGQU1pbmltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2QTgwNzg0
MUIxOEY5NzcwMEUyMTlCRSAvKiBERkFDb21iaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkE4MDc4MjFCMThGOTc3MDBFMjE5QkUgLyogREZB
Q29tYmluZXIuY3BwICovOyB9OworCQkyNkE4MDc4NTFCMThGOTc3MDBFMjE5QkUgLyogREZBQ29t
YmluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
QTgwNzgzMUIxOEY5NzcwMEUyMTlCRSAvKiBERkFDb21iaW5lci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2QUEwRjlFMThEMkExOEIwMDQxOTM4
MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QUEwRjlEMThEMkExOEIwMDQxOTM4MSAvKiBT
ZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCAqLzsgfTsKIAkJMjZCOTk5OEYxODAzQUU3
MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkI5OTk4RTE4MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0
ZXJBbGxvY2F0b3IuaCAqLzsgfTsKIAkJMjZCOTk5OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNr
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNkI5OTk5MDE4MDNCM0M5MDBEMDExMjEgLyogU3RhY2tBbGxvY2F0b3IuaCAqLzsgfTsKQEAg
LTgxMzAsNiArODEzMiw4IEBACiAJCTI2OTM5NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTkZBLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZBNTE3RkIxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmlt
aXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFNaW5pbWl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkE1MTdGQzFBQjkyMjM4MDA2
MzM1REYgLyogREZBTWluaW1pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERGQU1pbmltaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkE4MDc4MjFC
MThGOTc3MDBFMjE5QkUgLyogREZBQ29tYmluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gREZBQ29tYmluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyNkE4MDc4MzFCMThGOTc3MDBFMjE5QkUgLyogREZBQ29tYmluZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQ29tYmluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjZBQTBGOTkxOEQyOTczRDAwNDE5MzgxIC8qIG1ha2VTZWxlY3RvclBzZXVk
b0VsZW1lbnRzTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gbWFrZVNlbGVjdG9yUHNldWRvRWxl
bWVudHNNYXAucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QUEwRjlBMThEMjk3
M0QwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlbGVj
dG9yUHNldWRvRWxlbWVudFR5cGVNYXAuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2QUEwRjlEMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yUHNldWRv
RWxlbWVudFR5cGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2MTUs
NiArMTU2MTksOCBAQAogCQkJCTVDMzkzMDVGMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29k
ZUNvbXBpbGVyLmggKi8sCiAJCQkJNUMzOTMwNjAxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuY3BwICovLAogCQkJCTVDMzkzMDYxMUFBMEY2QTkwMDI5QzgxNiAvKiBE
RkFCeXRlY29kZUludGVycHJldGVyLmggKi8sCisJCQkJMjZBODA3ODIxQjE4Rjk3NzAwRTIxOUJF
IC8qIERGQUNvbWJpbmVyLmNwcCAqLywKKwkJCQkyNkE4MDc4MzFCMThGOTc3MDBFMjE5QkUgLyog
REZBQ29tYmluZXIuaCAqLywKIAkJCQkyNkE1MTdGQjFBQjkyMjM4MDA2MzM1REYgLyogREZBTWlu
aW1pemVyLmNwcCAqLywKIAkJCQkyNkE1MTdGQzFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1p
emVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCAqLywK
QEAgLTI0MTI3LDYgKzI0MTMzLDcgQEAKIAkJCQlGOThGRkY0NTExQTI2NzYyMDBGNTQ4RTggLyog
Q1NTT01VdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDAwQTE5ODlDQTAwN0ZCOEM1
IC8qIENTU1BhZ2VSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkIzRTBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkE4MDc4NTFCMThGOTc3
MDBFMjE5QkUgLyogREZBQ29tYmluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCNzhBRDJFMTUx
QkY1RTYwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAy
QTRCNzBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzdCMzg2MzEyMjg4M0U5MDBCODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjgyNDAsNiArMjgyNDcsNyBAQAogCQkJCTJFRjFCRkVBMTIxQzlGNDIw
MEMyNzYyNyAvKiBGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1N0ZFREUxMTIx
MkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjAz
MDZDMENDNDM2MjMwMEM4QUMyNSAvKiBGaWxlU3lzdGVtQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMjZBODA3ODQxQjE4Rjk3NzAwRTIxOUJFIC8qIERGQUNvbWJpbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE0QjNGNzYwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1N
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmls
ZVN5c3RlbVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAK
aW5kZXggMjAyY2M3Y2I4Y2JkMzZlZjdmZWQ1ZjJjOTgzYjEzNDlkYWUyYTY0MS4uZjk2ZjUwMWFl
OTgxODlhY2MwMTYyZjEwMDE5NDA1MzQ5NGEyNDI2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
Y3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIK
ICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgIkRGQUJ5
dGVjb2RlQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkFDb21iaW5lci5oIgogI2luY2x1ZGUgIk5G
QS5oIgogI2luY2x1ZGUgIk5GQVRvREZBLmgiCiAjaW5jbHVkZSAiVVJMRmlsdGVyUGFyc2VyLmgi
CkBAIC0yMzUsNiArMjM2LDEwIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIFN0cmluCiAgICAgTE9HX0xB
UkdFX1NUUlVDVFVSRVMoZG9tYWluRmlsdGVycywgZG9tYWluRmlsdGVycy5tZW1vcnlVc2VkKCkp
OwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORworICAgIHVu
c2lnbmVkIG1hY2hpbmVzV2l0aG91dERvbWFpbnNDb3VudCA9IDA7CisgICAgdW5zaWduZWQgdG90
YWxCeXRlY29kZVNpemVGb3JNYWNoaW5lc1dpdGhvdXREb21haW5zID0gMDsKKyAgICB1bnNpZ25l
ZCBtYWNoaW5lc1dpdGhEb21haW5zQ291bnQgPSAwOworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZWNv
ZGVTaXplRm9yTWFjaGluZXNXaXRoRG9tYWlucyA9IDA7CiAgICAgZG91YmxlIHRvdGFsTkZBVG9C
eXRlQ29kZUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAj
ZW5kaWYKIApAQCAtMjQzLDIwICsyNDgsOSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVM
aXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbgogICAg
IGNvbnN0IHVuc2lnbmVkIG1heE5GQVNpemUgPSAzMDAwMDsKICAgICAKICAgICBib29sIGZpcnN0
TkZBV2l0aG91dERvbWFpbnNTZWVuID0gZmFsc2U7Ci0gICAgLy8gRklYTUU6IENvbWJpbmUgc21h
bGwgTkZBcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBORkFzLgotICAgIGZpbHRlcnNXaXRob3V0
RG9tYWlucy5wcm9jZXNzTkZBcyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7Ci0jaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgICAgIGRhdGFMb2dG
KCJmaWx0ZXJzV2l0aG91dERvbWFpbnMgTkZBXG4iKTsKLSAgICAgICAgbmZhLmRlYnVnUHJpbnRE
b3QoKTsKLSNlbmRpZgotCi0gICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKG5mYSwgbmZhLm1l
bW9yeVVzZWQoKSk7Ci0KLSAgICAgICAgREZBIGRmYSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7
Ci0gICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7Ci0K
LSAgICAgICAgZGZhLm1pbmltaXplKCk7CiAKKyAgICBhdXRvIGxvd2VyRmlsdGVyc1dpdGhvdXRE
b21haW5zREZBVG9CeXRlY29kZSA9IFsmXShERkEmJiBkZmEpCisgICAgewogI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgICAgICBkYXRhTG9nRigiZmls
dGVyc1dpdGhvdXREb21haW5zIERGQVxuIik7CiAgICAgICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7
CkBAIC0yNzIsMTAgKzI2Niw0MSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbgogICAgICAgICBE
RkFCeXRlY29kZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOwogICAgICAgICBjb21w
aWxlci5jb21waWxlKCk7CiAgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBi
eXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgICAgICsrbWFjaGluZXNXaXRob3V0RG9t
YWluc0NvdW50OworICAgICAgICB0b3RhbEJ5dGVjb2RlU2l6ZUZvck1hY2hpbmVzV2l0aG91dERv
bWFpbnMgKz0gYnl0ZWNvZGUuc2l6ZSgpOworI2VuZGlmCiAgICAgICAgIGNsaWVudC53cml0ZUZp
bHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogCiAgICAg
ICAgIGZpcnN0TkZBV2l0aG91dERvbWFpbnNTZWVuID0gdHJ1ZTsKKyAgICB9OworCisgICAgY29u
c3QgdW5zaWduZWQgc21hbGxERkFTaXplID0gMTAwOworICAgIERGQUNvbWJpbmVyIHNtYWxsRmls
dGVyc1dpdGhvdXREb21haW5zREZBQ29tYmluZXI7CisgICAgZmlsdGVyc1dpdGhvdXREb21haW5z
LnByb2Nlc3NORkFzKG1heE5GQVNpemUsIFsmXShORkEmJiBuZmEpIHsKKyNpZiBDT05URU5UX0VY
VEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKKyAgICAgICAgZGF0YUxvZ0YoImZpbHRl
cnNXaXRob3V0RG9tYWlucyBORkFcbiIpOworICAgICAgICBuZmEuZGVidWdQcmludERvdCgpOwor
I2VuZGlmCisKKyAgICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMobmZhLCBuZmEubWVtb3J5VXNl
ZCgpKTsKKyAgICAgICAgREZBIGRmYSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7CisgICAgICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7CisKKyAgICAgICAg
aWYgKGRmYS5ncmFwaFNpemUoKSA8IHNtYWxsREZBU2l6ZSkKKyAgICAgICAgICAgIHNtYWxsRmls
dGVyc1dpdGhvdXREb21haW5zREZBQ29tYmluZXIuYWRkREZBKFdURjo6bW92ZShkZmEpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBkZmEubWluaW1pemUoKTsKKyAgICAgICAgICAgIGxv
d2VyRmlsdGVyc1dpdGhvdXREb21haW5zREZBVG9CeXRlY29kZShXVEY6Om1vdmUoZGZhKSk7Cisg
ICAgICAgIH0KICAgICB9KTsKKworCisgICAgc21hbGxGaWx0ZXJzV2l0aG91dERvbWFpbnNERkFD
b21iaW5lci5jb21iaW5lREZBcyhzbWFsbERGQVNpemUsIFsmXShERkEmJiBkZmEpIHsKKyAgICAg
ICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoZGZhLCBkZmEubWVtb3J5VXNlZCgpKTsKKyAgICAgICAg
bG93ZXJGaWx0ZXJzV2l0aG91dERvbWFpbnNERkFUb0J5dGVjb2RlKFdURjo6bW92ZShkZmEpKTsK
KyAgICB9KTsKKwogICAgIEFTU0VSVChmaWx0ZXJzV2l0aG91dERvbWFpbnMuaXNFbXB0eSgpKTsK
IAogICAgIGlmICghZmlyc3RORkFXaXRob3V0RG9tYWluc1NlZW4pIHsKQEAgLTI5Nyw2ICszMjIs
MjcgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQmIGNsaWVudCwgU3RyaW4KICAgICB1bml2ZXJzYWxBY3Rpb25zV2l0aG91
dERvbWFpbnMuY2xlYXIoKTsKICAgICAKICAgICBib29sIGZpcnN0TkZBV2l0aERvbWFpbnNTZWVu
ID0gZmFsc2U7CisgICAgYXV0byBsb3dlckZpbHRlcnNXaXRoRG9tYWluc0RGQVRvQnl0ZWNvZGUg
PSBbJl0oREZBJiYgZGZhKQorICAgIHsKKyAgICAgICAgaWYgKCFmaXJzdE5GQVdpdGhEb21haW5z
U2VlbikgeworICAgICAgICAgICAgLy8gUHV0IGFsbCB0aGUgdW5pdmVyc2FsIGFjdGlvbnMgb24g
dGhlIGZpcnN0IERGQS4KKyAgICAgICAgICAgIGFkZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkZmEs
IHVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyk7CisgICAgICAgIH0KKworICAgICAgICBWZWN0
b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNv
bXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgICAgICBjb21waWxlci5jb21waWxlKCk7CisgICAg
ICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICog
c2l6ZW9mKHVpbnQ4X3QpKTsKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQ
T1JUSU5HCisgICAgICAgICsrbWFjaGluZXNXaXRoRG9tYWluc0NvdW50OworICAgICAgICB0b3Rh
bEJ5dGVjb2RlU2l6ZUZvck1hY2hpbmVzV2l0aERvbWFpbnMgKz0gYnl0ZWNvZGUuc2l6ZSgpOwor
I2VuZGlmCisgICAgICAgIGNsaWVudC53cml0ZUZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKFdU
Rjo6bW92ZShieXRlY29kZSkpOworCisgICAgICAgIGZpcnN0TkZBV2l0aERvbWFpbnNTZWVuID0g
dHJ1ZTsKKyAgICB9OworCisgICAgREZBQ29tYmluZXIgc21hbGxGaWx0ZXJzV2l0aERvbWFpbnNE
RkFDb21iaW5lcjsKICAgICBmaWx0ZXJzV2l0aERvbWFpbnMucHJvY2Vzc05GQXMobWF4TkZBU2l6
ZSwgWyZdKE5GQSYmIG5mYSkgewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwogICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21haW5zIE5GQVxuIik7
CkBAIC0zMDksMjUgKzM1NSwxOSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENv
bnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbgogICAgICAgICBk
ZmEuZGVidWdQcmludERvdCgpOwogI2VuZGlmCiAgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVT
KGRmYSwgZGZhLm1lbW9yeVVzZWQoKSk7Ci0gICAgICAgIC8vIE1pbmltaXppbmcgdGhpcyBERkEg
d291bGQgbm90IGJlIGVmZmVjdGl2ZSBiZWNhdXNlIGFsbCBhY3Rpb25zIHdpdGggZG9tYWlucyBh
cmUgdW5pcXVlLgotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lO
RwotICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21haW5zIFBPU1QgTUlOSU1JWklORyBE
RkFcbiIpOwotICAgICAgICBkZmEuZGVidWdQcmludERvdCgpOwotI2VuZGlmCisKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghZGZhLm5vZGVzW2RmYS5yb290XS5oYXNBY3Rpb25zKCksICJG
aWx0ZXJzIHdpdGggZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG5vdCBhbGxvd2Vk
IHJpZ2h0IG5vdy4iKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZmlyc3RORkFXaXRoRG9tYWlu
c1NlZW4pIHsKLSAgICAgICAgICAgIC8vIFB1dCBhbGwgdGhlIHVuaXZlcnNhbCBhY3Rpb25zIG9u
IHRoZSBmaXJzdCBERkEuCi0gICAgICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZGZh
LCB1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOworCisgICAgICAgIGlmIChkZmEuZ3JhcGhT
aXplKCkgPCBzbWFsbERGQVNpemUpCisgICAgICAgICAgICBzbWFsbEZpbHRlcnNXaXRoRG9tYWlu
c0RGQUNvbWJpbmVyLmFkZERGQShXVEY6Om1vdmUoZGZhKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgZGZhLm1pbmltaXplKCk7CisgICAgICAgICAgICBsb3dlckZpbHRlcnNXaXRoRG9t
YWluc0RGQVRvQnl0ZWNvZGUoV1RGOjptb3ZlKGRmYSkpOwogICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwotICAgICAgICBERkFCeXRlY29k
ZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOwotICAgICAgICBjb21waWxlci5jb21w
aWxlKCk7Ci0gICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5j
YXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICAgICAgY2xpZW50LndyaXRlRmlsdGVy
c1dpdGhEb21haW5zQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7Ci0gICAgICAgIAotICAg
ICAgICBmaXJzdE5GQVdpdGhEb21haW5zU2VlbiA9IHRydWU7CisgICAgfSk7CisgICAgc21hbGxG
aWx0ZXJzV2l0aERvbWFpbnNERkFDb21iaW5lci5jb21iaW5lREZBcyhzbWFsbERGQVNpemUsIFsm
XShERkEmJiBkZmEpIHsKKyAgICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoZGZhLCBkZmEubWVt
b3J5VXNlZCgpKTsKKyAgICAgICAgbG93ZXJGaWx0ZXJzV2l0aERvbWFpbnNERkFUb0J5dGVjb2Rl
KFdURjo6bW92ZShkZmEpKTsKICAgICB9KTsKICAgICBBU1NFUlQoZmlsdGVyc1dpdGhEb21haW5z
LmlzRW1wdHkoKSk7CiAgICAgCkBAIC0zNjQsNyArNDA0LDcgQEAgc3RkOjplcnJvcl9jb2RlIGNv
bXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQmIGNsaWVudCwg
U3RyaW4KICAgICAgICAgLy8gTWluaW1pemluZyB0aGlzIERGQSB3b3VsZCBub3QgYmUgZWZmZWN0
aXZlIGJlY2F1c2UgYWxsIGFjdGlvbnMgYXJlIHVuaXF1ZQogICAgICAgICAvLyBhbmQgYmVjYXVz
ZSBvZiB0aGUgdHJlZS1saWtlIHN0cnVjdHVyZSBvZiB0aGlzIERGQS4KICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghZGZhLm5vZGVzW2RmYS5yb290XS5oYXNBY3Rpb25zKCksICJUaGVyZSBz
aG91bGQgbm90IGJlIGFueSBkb21haW5zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZy4iKTsKLSAgICAg
ICAgCisKICAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAgICAgICAgREZB
Qnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICAgICAgY29tcGls
ZXIuY29tcGlsZSgpOwpAQCAtMzc2LDYgKzQxNiw5IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxl
UnVsZUxpc3QoQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIFN0cmlu
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJs
ZSB0b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVFbmQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKICAgICBkYXRhTG9nRigiICAgIFRpbWUgc3BlbnQgYnVpbGRpbmcgYW5kIGNvbXBp
bGluZyB0aGUgREZBczogJWZcbiIsICh0b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVFbmQgLSB0
b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVTdGFydCkpOworCisgICAgZGF0YUxvZ0YoIiAgICBO
dW1iZXIgb2YgbWFjaGluZXMgd2l0aG91dCBkb21haW4gZmlsdGVyczogJWQgKHRvdGFsIGJ5dGVj
b2RlIHNpemUgPSAlZClcbiIsIG1hY2hpbmVzV2l0aG91dERvbWFpbnNDb3VudCwgdG90YWxCeXRl
Y29kZVNpemVGb3JNYWNoaW5lc1dpdGhvdXREb21haW5zKTsKKyAgICBkYXRhTG9nRigiICAgIE51
bWJlciBvZiBtYWNoaW5lcyB3aXRoIGRvbWFpbiBmaWx0ZXJzOiAlZCAodG90YWwgYnl0ZWNvZGUg
c2l6ZSA9ICVkKVxuIiwgbWFjaGluZXNXaXRoRG9tYWluc0NvdW50LCB0b3RhbEJ5dGVjb2RlU2l6
ZUZvck1hY2hpbmVzV2l0aERvbWFpbnMpOwogI2VuZGlmCiAKICAgICBjbGllbnQuZmluYWxpemUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCmluZGV4IGM0NDE4YWEx
NDc2YjI2ZDA3ODA5MzdiNDE3YWVlOTAzM2VmNWI3NjMuLjVjM2QzNjUxNjkzYjU5NmFjOGMwMzE0
NWMyZmQ0OGVkNTEwZjIzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
LmNwcApAQCAtMTI3LDYgKzEyNywxNiBAQCB2b2lkIERGQTo6bWluaW1pemUoKQogICAgIERGQU1p
bmltaXplcjo6bWluaW1pemUoKnRoaXMpOwogfQogCit1bnNpZ25lZCBERkE6OmdyYXBoU2l6ZSgp
IGNvbnN0Cit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgREZBTm9k
ZSYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGlmICghbm9kZS5pc0tpbGxlZCgpKQorICAgICAg
ICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCiAjaWYgQ09OVEVO
VF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmludFJh
bmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQogewpA
QCAtMjEyLDE0ICsyMjIsMTQgQEAgdm9pZCBERkE6OmRlYnVnUHJpbnREb3QoKSBjb25zdAogICAg
ICAgICB9CiAKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBjb3JyZXNwb25kaW5nTkZBTm9kZXMg
PSBub2Rlc1tpXS5jb3JyZXNwb25kaW5nTkZBTm9kZXM7Ci0gICAgICAgIEFTU0VSVCghY29ycmVz
cG9uZGluZ05GQU5vZGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIGRhdGFMb2dGKCI8QlIvPk5GQSBO
b2RlczogIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY29ycmVzcG9uZGluZ0RGQU5vZGVJbmRl
eCA9IDA7IGNvcnJlc3BvbmRpbmdERkFOb2RlSW5kZXggPCBjb3JyZXNwb25kaW5nTkZBTm9kZXMu
c2l6ZSgpOyArK2NvcnJlc3BvbmRpbmdERkFOb2RlSW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChj
b3JyZXNwb25kaW5nREZBTm9kZUluZGV4KQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIsICIp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIiVkIiwgY29ycmVzcG9uZGluZ05GQU5vZGVzW2NvcnJl
c3BvbmRpbmdERkFOb2RlSW5kZXhdKTsKKyAgICAgICAgaWYgKCFjb3JyZXNwb25kaW5nTkZBTm9k
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiPEJSLz5ORkEgTm9kZXM6ICIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3JyZXNwb25kaW5nREZBTm9kZUluZGV4ID0g
MDsgY29ycmVzcG9uZGluZ0RGQU5vZGVJbmRleCA8IGNvcnJlc3BvbmRpbmdORkFOb2Rlcy5zaXpl
KCk7ICsrY29ycmVzcG9uZGluZ0RGQU5vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChj
b3JyZXNwb25kaW5nREZBTm9kZUluZGV4KQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
LCAiKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQiLCBjb3JyZXNwb25kaW5nTkZBTm9k
ZXNbY29ycmVzcG9uZGluZ0RGQU5vZGVJbmRleF0pOworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0KICAgICAgICAgZGF0YUxvZ0YoIj5dIik7CiAKICAgICAgICAgaWYgKCFhY3Rpb25zLmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5o
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKaW5kZXggMzZlOGQxOTEy
MTAwMzgwOGYxOWRjZmNjOTk2YzUwNDRmZDY2ZjY3Yi4uM2ViY2E3MTYwMWUyNDNhOThmMTJlNDc5
OTg4YThhYWM5OTlkZjI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgK
QEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIC8vIFRoZSBE
RkEgYWJzdHJhY3QgYSBwYXJ0aWFsIERGQSBncmFwaCBpbiBhIGNvbXBhY3QgZm9ybS4KIHN0cnVj
dCBXRUJDT1JFX0VYUE9SVCBERkEgewogICAgIHZvaWQgbWluaW1pemUoKTsKKyAgICB1bnNpZ25l
ZCBncmFwaFNpemUoKSBjb25zdDsKICAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNvbnN0OwogCiAj
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFDb21iaW5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFDb21iaW5lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTNmNjQ2OGExOGZmYzY2MDkyNTdhYWZjYTliZTY3NzNmOWVhYzdhMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbWJpbmVyLmNwcApAQCAt
MCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkFDb21iaW5lci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CisKK2NsYXNzIERGQU1lcmdlciB7CitwdWJsaWM6CisgICAgREZBTWVyZ2Vy
KGNvbnN0IERGQSYgYSwgY29uc3QgREZBJiBiKQorICAgICAgICA6IG1fZGZhQShhKQorICAgICAg
ICAsIG1fZGZhQihiKQorICAgIHsKKyAgICB9CisKKyAgICBERkEgbWVyZ2UoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX25vZGVNYXBwaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBt
X291dHB1dDsKKworICAgICAgICB1aW50NjRfdCByb290U2lnbmF0dXJlID0gc2lnbmF0dXJlRm9y
SW5kaWNlcyhtX2RmYUEucm9vdCwgbV9kZmFCLnJvb3QpOworICAgICAgICBnZXRPckNyZWF0ZUNv
bWJpbmVkTm9kZShyb290U2lnbmF0dXJlKTsKKworICAgICAgICB3aGlsZSAoIW1fdW5wcm9jZXNz
ZWROb2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lbXNldChtX3RyYW5zaXRpb25UYXJn
ZXRzLCAweGZmLCBzaXplb2YobV90cmFuc2l0aW9uVGFyZ2V0cykpOworCisgICAgICAgICAgICB1
aW50NjRfdCB1bnByb2Nlc3NlZE5vZGUgPSBtX3VucHJvY2Vzc2VkTm9kZXMudGFrZUxhc3QoKTsK
KworICAgICAgICAgICAgLy8gV2UgY2Fubm90IGNhY2hlIHRoZSBzb3VyY2Ugbm9kZSBpdHNlbGYg
c2luY2Ugd2UgbW9kaWZ5IHRoZSBtYWNoaW5lLiBXZSBvbmx5IG1hbmlwdWxhdGUgdGhlIElEcy4K
KyAgICAgICAgICAgIHVpbnQzMl90IHNvdXJjZU5vZGVJZCA9IG1fbm9kZU1hcHBpbmcuZ2V0KHVu
cHJvY2Vzc2VkTm9kZSk7CisKKyAgICAgICAgICAgIC8vIFBvcHVsYXRlIHRoZSB1bmlxdWUgdHJh
bnNpdGlvbnMuCisgICAgICAgICAgICB1aW50MzJfdCBpbmRleEEgPSBleHRyYWN0SW5kZXhBKHVu
cHJvY2Vzc2VkTm9kZSk7CisgICAgICAgICAgICBpZiAoaW5kZXhBICE9IGludmFsaWROb2RlSW5k
ZXgpCisgICAgICAgICAgICAgICAgcG9wdWxhdGVUcmFuc2l0aW9uczxXaGljaERGQTo6QT4oaW5k
ZXhBKTsKKworICAgICAgICAgICAgdWludDMyX3QgaW5kZXhCID0gZXh0cmFjdEluZGV4Qih1bnBy
b2Nlc3NlZE5vZGUpOworICAgICAgICAgICAgaWYgKGluZGV4QiAhPSBpbnZhbGlkTm9kZUluZGV4
KQorICAgICAgICAgICAgICAgIHBvcHVsYXRlVHJhbnNpdGlvbnM8V2hpY2hERkE6OkI+KGluZGV4
Qik7CisKKyAgICAgICAgICAgIC8vIFNwcmVhZCB0aGUgZmFsbGJhY2sgdHJhbnNpdGlvbnMgb3Zl
ciB0aGUgdW5pcXVlIHRyYW5zaXRpb25zIGFuZCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBmYWxs
YmFjayB0cmFuc2l0aW9uLgorICAgICAgICAgICAgdWludDY0X3QgZmFsbGJhY2tUcmFuc2l0aW9u
U2lnbmF0dXJlID0gc2lnbmF0dXJlRm9ySW5kaWNlcyhpbnZhbGlkTm9kZUluZGV4LCBpbnZhbGlk
Tm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChpbmRleEEgIT0gaW52YWxpZE5vZGVJbmRleCkK
KyAgICAgICAgICAgICAgICBwb3B1bGF0ZUZyb21GYWxsYmFja1RyYW5zaXRpb25zPFdoaWNoREZB
OjpBPihpbmRleEEsIGZhbGxiYWNrVHJhbnNpdGlvblNpZ25hdHVyZSk7CisgICAgICAgICAgICBp
ZiAoaW5kZXhCICE9IGludmFsaWROb2RlSW5kZXgpCisgICAgICAgICAgICAgICAgcG9wdWxhdGVG
cm9tRmFsbGJhY2tUcmFuc2l0aW9uczxXaGljaERGQTo6Qj4oaW5kZXhCLCBmYWxsYmFja1RyYW5z
aXRpb25TaWduYXR1cmUpOworCisgICAgICAgICAgICBjcmVhdGVUcmFuc2l0aW9ucyhzb3VyY2VO
b2RlSWQpOworICAgICAgICAgICAgY3JlYXRlRmFsbGJhY2tUcmFuc2l0aW9uSWZOZWVkZWQoc291
cmNlTm9kZUlkLCBmYWxsYmFja1RyYW5zaXRpb25TaWduYXR1cmUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX291dHB1dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgaW52
YWxpZE5vZGVJbmRleCA9IDB4ZmZmZmZmZmY7CisKKyAgICBlbnVtIGNsYXNzIFdoaWNoREZBIHsK
KyAgICAgICAgQSwKKyAgICAgICAgQgorICAgIH07CisKKyAgICBzdGF0aWMgdWludDY0X3Qgc2ln
bmF0dXJlRm9ySW5kaWNlcyh1aW50MzJfdCBhSW5kZXgsIHVpbnQzMl90IGJJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYUluZGV4KSA8PCAzMiB8IGJJ
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDMyX3QgZXh0cmFjdEluZGV4QSh1aW50NjRf
dCBzaWduYXR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHNpZ25hdHVyZSA+PiAzMik7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90IGV4dHJhY3RJ
bmRleEIodWludDY0X3Qgc2lnbmF0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVpbnQzMl90PihzaWduYXR1cmUpOworICAgIH0KKworICAgIHVpbnQzMl90IGdldE9yQ3Jl
YXRlQ29tYmluZWROb2RlKHVpbnQ2NF90IG5ld05vZGVTaWduYXR1cmUpCisgICAgeworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fbm9kZU1hcHBpbmcuYWRkKG5ld05vZGVTaWduYXR1cmUsIGlu
dmFsaWROb2RlSW5kZXgpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgbV9v
dXRwdXQubm9kZXMuYXBwZW5kKERGQU5vZGUoKSk7CisgICAgICAgIHVpbnQzMl90IG5ld05vZGVJ
bmRleCA9IG1fb3V0cHV0Lm5vZGVzLnNpemUoKSAtIDE7CisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBuZXdOb2RlSW5kZXg7CisgICAgICAgIG1fdW5wcm9jZXNzZWROb2Rlcy5h
cHBlbmQobmV3Tm9kZVNpZ25hdHVyZSk7CisKKyAgICAgICAgdWludDMyX3QgaW5kZXhBID0gZXh0
cmFjdEluZGV4QShuZXdOb2RlU2lnbmF0dXJlKTsKKyAgICAgICAgdWludDMyX3QgaW5kZXhCID0g
ZXh0cmFjdEluZGV4QihuZXdOb2RlU2lnbmF0dXJlKTsKKworICAgICAgICBIYXNoU2V0PHVpbnQ2
NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDY0X3Q+PiBhY3Rpb25zOworICAgICAgICBpZiAoaW5kZXhBICE9IGlu
dmFsaWROb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2Rm
YUEubm9kZXNbaW5kZXhBXTsKKyAgICAgICAgICAgIHVpbnQzMl90IGFjdGlvbnNTdGFydCA9IG5v
ZGUuYWN0aW9uc1N0YXJ0KCk7CisgICAgICAgICAgICB1aW50MzJfdCBhY3Rpb25zRW5kID0gYWN0
aW9uc1N0YXJ0ICsgbm9kZS5hY3Rpb25zTGVuZ3RoKCk7CisgICAgICAgICAgICBmb3IgKHVpbnQz
Ml90IGkgPSBhY3Rpb25zU3RhcnQ7IGkgPCBhY3Rpb25zRW5kOyArK2kpCisgICAgICAgICAgICBh
Y3Rpb25zLmFkZChtX2RmYUEuYWN0aW9uc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
ZGV4QiAhPSBpbnZhbGlkTm9kZUluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBERkFOb2RlJiBu
b2RlID0gbV9kZmFCLm5vZGVzW2luZGV4Ql07CisgICAgICAgICAgICB1aW50MzJfdCBhY3Rpb25z
U3RhcnQgPSBub2RlLmFjdGlvbnNTdGFydCgpOworICAgICAgICAgICAgdWludDMyX3QgYWN0aW9u
c0VuZCA9IGFjdGlvbnNTdGFydCArIG5vZGUuYWN0aW9uc0xlbmd0aCgpOworICAgICAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gYWN0aW9uc1N0YXJ0OyBpIDwgYWN0aW9uc0VuZDsgKytpKQorICAg
ICAgICAgICAgYWN0aW9ucy5hZGQobV9kZmFCLmFjdGlvbnNbaV0pOworICAgICAgICB9CisKKyAg
ICAgICAgdWludDMyX3QgYWN0aW9uc1N0YXJ0ID0gbV9vdXRwdXQuYWN0aW9ucy5zaXplKCk7Cisg
ICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogYWN0aW9ucykKKyAgICAgICAgICAgIG1fb3V0
cHV0LmFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgICAgIHVpbnQzMl90IGFjdGlvbnNFbmQg
PSBtX291dHB1dC5hY3Rpb25zLnNpemUoKTsKKyAgICAgICAgdWludDE2X3QgYWN0aW9uc0xlbmd0
aCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb25zRW5kIC0gYWN0aW9uc1N0YXJ0KTsKKwor
ICAgICAgICBtX291dHB1dC5ub2Rlcy5sYXN0KCkuc2V0QWN0aW9ucyhhY3Rpb25zU3RhcnQsIGFj
dGlvbnNMZW5ndGgpOworICAgICAgICByZXR1cm4gbmV3Tm9kZUluZGV4OworICAgIH0KKworICAg
IHRlbXBsYXRlPFdoaWNoREZBIHdoaWNoREZBPgorICAgIHZvaWQgc2V0SGFsZlNpZ25hdHVyZSh1
aW50NjRfdCYgc2lnbmF0dXJlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIHNoaWZ0QW1vdW50ID0gKHdoaWNoREZBID09IFdoaWNoREZBOjpBKSA/IDMyIDogMDsKKyAg
ICAgICAgdWludDY0X3QgbWFzayA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigweGZmZmZmZmZmKSA8
PCAoMzIgLSBzaGlmdEFtb3VudCk7CisgICAgICAgIHNpZ25hdHVyZSA9IChzaWduYXR1cmUgJiBt
YXNrKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgPDwgc2hpZnRBbW91bnQ7CisgICAg
fQorCisgICAgdGVtcGxhdGU8V2hpY2hERkEgd2hpY2hERkE+CisgICAgdm9pZCBwb3B1bGF0ZVRy
YW5zaXRpb25zKHVpbnQzMl90IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGNvbnN0IERGQSYg
ZGZhID0gKHdoaWNoREZBID09IFdoaWNoREZBOjpBKSA/IG1fZGZhQSA6IG1fZGZhQjsKKyAgICAg
ICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IGRmYS5ub2Rlc1tub2RlSW5kZXhdOworICAgICAgICB1
aW50MzJfdCB0cmFuc2l0aW9uc1N0YXJ0ID0gbm9kZS50cmFuc2l0aW9uc1N0YXJ0KCk7CisgICAg
ICAgIHVpbnQzMl90IHRyYW5zaXRpb25zRW5kID0gdHJhbnNpdGlvbnNTdGFydCArIG5vZGUudHJh
bnNpdGlvbnNMZW5ndGgoKTsKKworICAgICAgICAvLyBFeHRyYWN0IHRyYW5zaXRpb25zLgorICAg
ICAgICBmb3IgKHVpbnQzMl90IHRyYW5zaXRpb25JbmRleCA9IHRyYW5zaXRpb25zU3RhcnQ7IHRy
YW5zaXRpb25JbmRleCA8IHRyYW5zaXRpb25zRW5kOyArK3RyYW5zaXRpb25JbmRleCkgeworICAg
ICAgICAgICAgdWludDhfdCB0cmFuc2l0aW9uQ2hhcmFjdGVyID0gZGZhLnRyYW5zaXRpb25DaGFy
YWN0ZXJzW3RyYW5zaXRpb25JbmRleF07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFu
c2l0aW9uQ2hhcmFjdGVyIDwgV1RGX0FSUkFZX0xFTkdUSChtX3RyYW5zaXRpb25UYXJnZXRzKSk7
CisKKyAgICAgICAgICAgIHVpbnQzMl90IHRyYW5zaXRpb25EZXN0aW5hdGlvbiA9IGRmYS50cmFu
c2l0aW9uRGVzdGluYXRpb25zW3RyYW5zaXRpb25JbmRleF07CisgICAgICAgICAgICBzZXRIYWxm
U2lnbmF0dXJlPHdoaWNoREZBPihtX3RyYW5zaXRpb25UYXJnZXRzW3RyYW5zaXRpb25DaGFyYWN0
ZXJdLCB0cmFuc2l0aW9uRGVzdGluYXRpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgdGVt
cGxhdGU8V2hpY2hERkEgd2hpY2hERkE+CisgICAgdm9pZCBwb3B1bGF0ZUZyb21GYWxsYmFja1Ry
YW5zaXRpb25zKHVpbnQzMl90IG5vZGVJbmRleCwgdWludDY0X3QmIGZhbGxiYWNrVHJhbnNpdGlv
blNpZ25hdHVyZSkKKyAgICB7CisgICAgICAgIGNvbnN0IERGQSYgZGZhID0gKHdoaWNoREZBID09
IFdoaWNoREZBOjpBKSA/IG1fZGZhQSA6IG1fZGZhQjsKKyAgICAgICAgY29uc3QgREZBTm9kZSYg
bm9kZSA9IGRmYS5ub2Rlc1tub2RlSW5kZXhdOworICAgICAgICBpZiAoIW5vZGUuaGFzRmFsbGJh
Y2tUcmFuc2l0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdWludDMyX3Qg
ZmFsbGJhY2tUYXJnZXQgPSBub2RlLmZhbGxiYWNrVHJhbnNpdGlvbkRlc3RpbmF0aW9uKGRmYSk7
CisgICAgICAgIHNldEhhbGZTaWduYXR1cmU8d2hpY2hERkE+KGZhbGxiYWNrVHJhbnNpdGlvblNp
Z25hdHVyZSwgZmFsbGJhY2tUYXJnZXQpOworCisgICAgICAgIC8vIFNwcmVhZCB0aGUgZmFsbGJh
Y2sgb3ZlciB0cmFuc2l0aW9ucyB3aGVyZSB0aGUgb3RoZXIgaGFzIHNvbWV0aGluZyBhbmQgd2Ug
ZG9uJ3QuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RI
KG1fdHJhbnNpdGlvblRhcmdldHMpOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90JiB0YXJn
ZXRTaWduYXR1cmUgPSBtX3RyYW5zaXRpb25UYXJnZXRzW2ldOworCisgICAgICAgICAgICB1aW50
MzJfdCBvdGhlclRhcmdldCA9ICh3aGljaERGQSA9PSBXaGljaERGQTo6QSkgPyBleHRyYWN0SW5k
ZXhCKHRhcmdldFNpZ25hdHVyZSkgOiBleHRyYWN0SW5kZXhBKHRhcmdldFNpZ25hdHVyZSk7Cisg
ICAgICAgICAgICB1aW50MzJfdCBzZWxmVGFyZ2V0ID0gKHdoaWNoREZBID09IFdoaWNoREZBOjpB
KSA/IGV4dHJhY3RJbmRleEEodGFyZ2V0U2lnbmF0dXJlKSA6IGV4dHJhY3RJbmRleEIodGFyZ2V0
U2lnbmF0dXJlKTsKKworICAgICAgICAgICAgaWYgKG90aGVyVGFyZ2V0ICE9IGludmFsaWROb2Rl
SW5kZXggJiYgc2VsZlRhcmdldCA9PSBpbnZhbGlkTm9kZUluZGV4KQorICAgICAgICAgICAgICAg
IHNldEhhbGZTaWduYXR1cmU8d2hpY2hERkE+KHRhcmdldFNpZ25hdHVyZSwgZmFsbGJhY2tUYXJn
ZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVUcmFuc2l0aW9ucyh1aW50
MzJfdCBzb3VyY2VOb2RlSWQpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdHJhbnNpdGlvbnMg
b3V0IG9mIHRoZSBzb3VyY2Ugbm9kZSwgY3JlYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC4KKyAg
ICAgICAgdWludDMyX3QgdHJhbnNpdGlvbnNTdGFydCA9IG1fb3V0cHV0LnRyYW5zaXRpb25DaGFy
YWN0ZXJzLnNpemUoKTsKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgV1RGX0FSUkFZ
X0xFTkdUSChtX3RyYW5zaXRpb25UYXJnZXRzKTsgKytpKSB7CisgICAgICAgICAgICB1aW50NjRf
dCBzaWduYXR1cmUgPSBtX3RyYW5zaXRpb25UYXJnZXRzW2ldOworICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZSA9PSBzaWduYXR1cmVGb3JJbmRpY2VzKGludmFsaWROb2RlSW5kZXgsIGludmFsaWRO
b2RlSW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdWludDMy
X3Qgbm9kZUlkID0gZ2V0T3JDcmVhdGVDb21iaW5lZE5vZGUoc2lnbmF0dXJlKTsKKyAgICAgICAg
ICAgIG1fb3V0cHV0LnRyYW5zaXRpb25DaGFyYWN0ZXJzLmFwcGVuZChpKTsKKyAgICAgICAgICAg
IG1fb3V0cHV0LnRyYW5zaXRpb25EZXN0aW5hdGlvbnMuYXBwZW5kKG5vZGVJZCk7CisgICAgICAg
IH0KKyAgICAgICAgdWludDMyX3QgdHJhbnNpdGlvbnNFbmQgPSBtX291dHB1dC50cmFuc2l0aW9u
Q2hhcmFjdGVycy5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QgdHJhbnNpdGlvbnNMZW5ndGggPSBz
dGF0aWNfY2FzdDx1aW50OF90Pih0cmFuc2l0aW9uc0VuZCAtIHRyYW5zaXRpb25zU3RhcnQpOwor
CisgICAgICAgIG1fb3V0cHV0Lm5vZGVzW3NvdXJjZU5vZGVJZF0uc2V0VHJhbnNpdGlvbnModHJh
bnNpdGlvbnNTdGFydCwgdHJhbnNpdGlvbnNMZW5ndGgpOworICAgIH0KKworICAgIHZvaWQgY3Jl
YXRlRmFsbGJhY2tUcmFuc2l0aW9uSWZOZWVkZWQodWludDMyX3Qgc291cmNlTm9kZUlkLCB1aW50
NjRfdCBmYWxsYmFja1RyYW5zaXRpb25TaWduYXR1cmUpCisgICAgeworICAgICAgICBpZiAoZmFs
bGJhY2tUcmFuc2l0aW9uU2lnbmF0dXJlICE9IHNpZ25hdHVyZUZvckluZGljZXMoaW52YWxpZE5v
ZGVJbmRleCwgaW52YWxpZE5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG5vZGVJ
ZCA9IGdldE9yQ3JlYXRlQ29tYmluZWROb2RlKGZhbGxiYWNrVHJhbnNpdGlvblNpZ25hdHVyZSk7
CisgICAgICAgICAgICBtX291dHB1dC5ub2Rlc1tzb3VyY2VOb2RlSWRdLmFkZEZhbGxiYWNrVHJh
bnNpdGlvbihtX291dHB1dCwgbm9kZUlkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0
IERGQSYgbV9kZmFBOworICAgIGNvbnN0IERGQSYgbV9kZmFCOworICAgIERGQSBtX291dHB1dDsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50MzJfdCwgRGVmYXVsdEhhc2g8dWludDY0X3Q+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4gbV9ub2Rl
TWFwcGluZzsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1fdW5wcm9jZXNzZWROb2RlczsKKyAgICB1
aW50NjRfdCBtX3RyYW5zaXRpb25UYXJnZXRzWzEyOF07Cit9OworCit2b2lkIERGQUNvbWJpbmVy
Ojpjb21iaW5lREZBcyh1bnNpZ25lZCBtaW5pbXVtU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKERG
QSYmKT4gaGFuZGxlcikKK3sKKyAgICBpZiAobV9kZmFzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9kZmFzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICBpZiAobV9kZmFzW2ldLmdyYXBoU2l6ZSgpID4gbWluaW11bVNpemUpIHsKKyAgICAgICAg
ICAgIGhhbmRsZXIoV1RGOjptb3ZlKG1fZGZhc1tpXSkpOworICAgICAgICAgICAgbV9kZmFzLnJl
bW92ZShpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICghbV9kZmFzLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAobV9kZmFzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICBoYW5k
bGVyKFdURjo6bW92ZShtX2RmYXMuZmlyc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgREZBIGEgPSBtX2RmYXMudGFrZUxhc3QoKTsKKyAgICAgICAgREZB
IGIgPSBtX2RmYXMudGFrZUxhc3QoKTsKKyAgICAgICAgREZBTWVyZ2VyIGRmYU1lcmdlcihhLCBi
KTsKKyAgICAgICAgREZBIGMgPSBkZmFNZXJnZXIubWVyZ2UoKTsKKworICAgICAgICBpZiAoYy5n
cmFwaFNpemUoKSA+IG1pbmltdW1TaXplKSB7CisgICAgICAgICAgICAvLyBNaW5pbWl6aW5nIGlz
IHNvbWV3aGF0IGV4cGVuc2l2ZS4gV2Ugb25seSBkbyBpdCBpbiBidWxrIHdoZW4gd2UgcmVhY2gg
dGhlIHRocmVzaG9sZAorICAgICAgICAgICAgLy8gdG8gcmVkdWNlIHRoZSBsb2FkLgorICAgICAg
ICAgICAgYy5taW5pbWl6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMuZ3JhcGhTaXpl
KCkgPiBtaW5pbXVtU2l6ZSkKKyAgICAgICAgICAgIGhhbmRsZXIoV1RGOjptb3ZlKGMpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9kZmFzLmFwcGVuZChjKTsKKyAgICB9Cit9CisKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQ29tYmluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUNvbWJpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTc4ZWY5MDMxNTI4MmNkMWQ1ODA2NDMx
MWIzMDJhYTk4M2YyMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUNvbWJpbmVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgREZBQ29tYmluZXJfaAorI2RlZmluZSBERkFDb21iaW5lcl9oCisKKyNpbmNsdWRl
ICJERkEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
REZBQ29tYmluZXIgeworcHVibGljOgorICAgIHZvaWQgYWRkREZBKERGQSYmKTsKKyAgICB2b2lk
IGNvbWJpbmVERkFzKHVuc2lnbmVkIG1pbmltdW1TaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoREZB
JiYpPiBoYW5kbGVyKTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8REZBPiBtX2RmYXM7Cit9Owor
CitpbmxpbmUgdm9pZCBERkFDb21iaW5lcjo6YWRkREZBKERGQSYmIGRmYSkKK3sKKyAgICBkZmEu
bWluaW1pemUoKTsKKyAgICBtX2RmYXMuYXBwZW5kKFdURjo6bW92ZShkZmEpKTsKK30KKworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ1M2M4MGY1YzkzNWJiZmI4MjVhMjUxMDQx
NDRkMWU0MTQ2N2FjNWIuLjk1NTYyNmVhOGExNzJkM2M2OTNjY2ZlYzM1NzUxODA0ZDFjNjcyNzMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNS0wNi0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBDb21iaW5lIHRpbnkgREZBcyBpbnRvIHNsaWdodGx5IGxhcmdlciBv
bmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1
NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFDb21iaW5lci5jcHA6IEFkZGVk
LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6REZBQ29tYmluZXJUZXN0OjpTZXRVcCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpjb21iaW5lKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQUhlbHBlcnMu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmguCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb3VudExpdmVOb2Rlcyk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpjcmVhdGVORkFzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmJ1aWxkREZBRnJv
bVBhdHRlcm5zKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWlu
aW1pemVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNvdW50TGl2ZU5vZGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZU5GQXMpOiBEZWxldGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6YnVpbGRERkFGcm9tUGF0dGVybnMpOiBEZWxldGVkLgorCiAy
MDE1LTA2LTAxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBO
b3RpZnkgY2xpZW50IHRoYXQgd2UgYmVnYW4gZWRpdGluZyB3aGVuIHRleHQgZmllbGQgaXMgZm9j
dXNlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjOTQ4NjgwMTNiOWRhZGIxMTE0MWUwZDlh
ZWUzOGZiOWUzODFiYmM4Li5kZWQyODdlZjM3ZTczNTgxNTBmY2ZhZjJjMTE5YjIyOWFlODg3YjIy
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTksNiArMTksNyBAQAogCQkxQURCRUZFMzEz
MEM2QUExMDBENjFEMTkgLyogc2ltcGxlLWFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFEQkVG
QkMxMzBDNkEwMTAwRDYxRDE5IC8qIHNpbXBsZS1hY2NlbGVyYXRlZC1jb21wb3NpdGluZy5odG1s
ICovOyB9OwogCQkxQUVERTIyNjEzRTVFN0U3MDBFNjJGRTggLyogSW5qZWN0ZWRCdW5kbGVDb250
cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFFREUyMjQxM0U1RTdBMDAwRTYyRkU4IC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlck1h
Yy5tbSAqLzsgfTsKIAkJMUNCOUJDMzgxQTY3NDgyMzAwRkU1Njc4IC8qIFdlYWtQdHIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCOUJDMzcxQTY3
NDgyMzAwRkU1Njc4IC8qIFdlYWtQdHIuY3BwICovOyB9OworCQkyNjBCQTU3OTFCMUQyRTdCMDA0
RkEwN0MgLyogREZBQ29tYmluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjYwQkE1NzgxQjFEMkU3QjAwNEZBMDdDIC8qIERGQUNvbWJpbmVyLmNw
cCAqLzsgfTsKIAkJMjZERjVBNjMxNUEyQTI3RTAwMzY4OUMyIC8qIENhbmNlbExvYWRGcm9tUmVz
b3VyY2VMb2FkRGVsZWdhdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkRGNUE2MTE1QTJBMjJCMDAzNjg5QzIgLyogQ2FuY2VsTG9h
ZEZyb21SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sICovOyB9OwogCQkyNkY1MkVBRDE4Mjg4MjdC
MDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb24uaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY1MkVBQzE4Mjg4
MjBFMDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25HZXRDdXJyZW50UG9zaXRpb24uaHRtbCAqLzsgfTsK
IAkJMjZGNTJFQUYxODI4OEMyMzAwMjNENDEyIC8qIGdlb2xvY2F0aW9uR2V0Q3VycmVudFBvc2l0
aW9uV2l0aEhpZ2hBY2N1cmFjeS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjUyRUFFMTgyODhDMDQwMDIzRDQxMiAvKiBnZW9sb2Nh
dGlvbkdldEN1cnJlbnRQb3NpdGlvbldpdGhIaWdoQWNjdXJhY3kuaHRtbCAqLzsgfTsKQEAgLTQz
Myw2ICs0MzQsOCBAQAogCQkxQUVGOTk0ODE3QTA5RjUzMDA5OThFRjAgLyogR2V0UElEQWZ0ZXJB
Ym9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFGREU2NTQxOTUzQjJDMDAwQzQ4RkZBIC8qIE9wdGlvbmFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbmFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCOUJDMzcxQTY3NDgyMzAwRkU1Njc4IC8qIFdlYWtQ
dHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha1B0ci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2MEJBNTc4MUIxRDJFN0IwMDRGQTA3QyAv
KiBERkFDb21iaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
RkFDb21iaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2MEJBNTdBMUIx
RDJFRTIwMDRGQTA3QyAvKiBERkFIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERGQUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNTE2
RDUxNUIwRTYwNTAwQTJDMjAxIC8qIFNldEFuZFVwZGF0ZUNhY2hlTW9kZWwubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXRBbmRVcGRhdGVDYWNoZU1vZGVsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjMwMEIxNzE2NzU1Q0Q5MDA2Njg4NkQg
LyogTGlzdEhhc2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGlzdEhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjVBRjU0RjE1
RDFFNDhBMDBCMENCNEEgLyogV1RGU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdURlN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04NTgsNiArODYxLDggQEAKIAkJCQk5M0E3MjBFNTE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJN0NCMTg0QzQxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRl
bnRFeHRlbnNpb25zLmNwcCAqLywKIAkJCQlDRDU0NTFFOTE5RTQxRjlEMDAxNjkzNkYgLyogQ1NT
UGFyc2VyLmNwcCAqLywKKwkJCQkyNjBCQTU3ODFCMUQyRTdCMDA0RkEwN0MgLyogREZBQ29tYmlu
ZXIuY3BwICovLAorCQkJCTI2MEJBNTdBMUIxRDJFRTIwMDRGQTA3QyAvKiBERkFIZWxwZXJzLmgg
Ki8sCiAJCQkJMjZGNkUxRUYxQURDNzQ5QjAwREU2OTZCIC8qIERGQU1pbmltaXplci5jcHAgKi8s
CiAJCQkJNDE5NzNCNUExQUYyMjg2QTAwNkM3QjM2IC8qIEZpbGVTeXN0ZW0uY3BwICovLAogCQkJ
CTE0NDY0MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLywKQEAgLTE2MDIs
NiArMTYwNyw3IEBACiAJCQkJNDE5NzNCNUIxQUYyMjg2QTAwNkM3QjM2IC8qIEZpbGVTeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E1NjIzMTExQUQ1QUYzRTAwOTZCOTIwIC8qIE1lbnVU
eXBlc0Zvck1vdXNlRXZlbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2RjZFMUYwMUFEQzc0
OUIwMERFNjk2QiAvKiBERkFNaW5pbWl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjYwQkE1
NzkxQjFEMkU3QjAwNEZBMDdDIC8qIERGQUNvbWJpbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdBOTlEOTk0MUFENEEyOUQwMDM3MzE0MSAvKiBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RG
QUNvbWJpbmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFDb21i
aW5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzBiYzg1OTk3YmU1NTZjODI0ZjdmZWJjNDY5OTQ0MzM2MmRh
NmI0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9ERkFDb21iaW5lci5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJERkFIZWxwZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9ERkFDb21iaW5lci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zOworCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIERGQUNvbWJpbmVyVGVzdCA6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAg
IHsKKyAgICAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOworICAgIH0KK307CisKK1Zl
Y3RvcjxERkE+IGNvbWJpbmUoVmVjdG9yPERGQT4gZGZhcywgdW5zaWduZWQgbWluaW11bVNpemUp
Cit7CisgICAgREZBQ29tYmluZXIgY29tYmluZXI7CisgICAgZm9yIChERkEmIGRmYSA6IGRmYXMp
CisgICAgICAgIGNvbWJpbmVyLmFkZERGQShXVEY6Om1vdmUoZGZhKSk7CisKKyAgICBWZWN0b3I8
REZBPiBvdXRwdXQ7CisgICAgY29tYmluZXIuY29tYmluZURGQXMobWluaW11bVNpemUsIFsmb3V0
cHV0XShERkEmJiBkZmEpIHsKKyAgICAgICAgb3V0cHV0LmFwcGVuZChkZmEpOworICAgIH0pOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK1RFU1RfRihERkFDb21iaW5lclRlc3QsIEJhc2ljKQor
eworICAgIFZlY3RvcjxERkE+IGRmYXMgPSB7IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgImZvbyJ9
KSwgYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiYmFyIn0pIH07CisgICAgVmVjdG9yPERGQT4gY29t
YmluZWRERkFzID0gY29tYmluZShkZmFzLCAxMDAwMCk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PHNpemVfdD4oMSksIGNvbWJpbmVkREZBcy5zaXplKCkpOworCisgICAgREZBIHJlZmVyZW5j
ZSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgImZvbyIsICJiYXIifSk7CisgICAgcmVmZXJlbmNl
Lm1pbmltaXplKCk7CisgICAgRVhQRUNUX0VRKGNvdW50TGl2ZU5vZGVzKHJlZmVyZW5jZSksIGNv
dW50TGl2ZU5vZGVzKGNvbWJpbmVkREZBcy5maXJzdCgpKSk7Cit9CisKKworVEVTVF9GKERGQUNv
bWJpbmVyVGVzdCwgSWRlbnRpY2FsREZBcykKK3sKKyAgICBWZWN0b3I8REZBPiBkZmFzID0geyBi
dWlsZERGQUZyb21QYXR0ZXJucyh7ICJmb28ifSksIGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgImZv
byJ9KSB9OworICAgIFZlY3RvcjxERkE+IGNvbWJpbmVkREZBcyA9IGNvbWJpbmUoZGZhcywgMTAw
MDApOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBjb21iaW5lZERGQXMu
c2l6ZSgpKTsKKworICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGhhdmUgdGhlIGV4YWN0IHNhbWUg
c2l6ZSBhcyB0aGUgbWluaW1pemVkIGlucHV0LgorICAgIERGQSByZWZlcmVuY2UgPSBidWlsZERG
QUZyb21QYXR0ZXJucyh7ICJmb28ifSk7CisgICAgcmVmZXJlbmNlLm1pbmltaXplKCk7CisgICAg
RVhQRUNUX0VRKGNvdW50TGl2ZU5vZGVzKHJlZmVyZW5jZSksIGNvdW50TGl2ZU5vZGVzKGNvbWJp
bmVkREZBcy5maXJzdCgpKSk7Cit9CisKK1RFU1RfRihERkFDb21iaW5lclRlc3QsIE5vSW5wdXQp
Cit7CisgICAgREZBQ29tYmluZXIgY29tYmluZXI7CisgICAgdW5zaWduZWQgY291bnRlciA9IDA7
CisgICAgY29tYmluZXIuY29tYmluZURGQXMoMTAwMDAwLCBbJmNvdW50ZXJdKERGQSYmIGRmYSkg
eworICAgICAgICArK2NvdW50ZXI7CisgICAgfSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHVuc2lnbmVkPigwKSwgY291bnRlcik7Cit9CisKK1RFU1RfRihERkFDb21iaW5lclRlc3QsIFNp
bmdsZUlucHV0KQoreworICAgIFZlY3RvcjxERkE+IGRmYXMgPSB7IGJ1aWxkREZBRnJvbVBhdHRl
cm5zKHsgIldlYktpdCJ9KSB9OworICAgIFZlY3RvcjxERkE+IGNvbWJpbmVkREZBcyA9IGNvbWJp
bmUoZGZhcywgMTAwMDApOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEpLCBj
b21iaW5lZERGQXMuc2l6ZSgpKTsKKworICAgIERGQSByZWZlcmVuY2UgPSBidWlsZERGQUZyb21Q
YXR0ZXJucyh7ICJXZWJLaXQifSk7CisgICAgcmVmZXJlbmNlLm1pbmltaXplKCk7CisgICAgRVhQ
RUNUX0VRKGNvdW50TGl2ZU5vZGVzKHJlZmVyZW5jZSksIGNvdW50TGl2ZU5vZGVzKGNvbWJpbmVk
REZBcy5maXJzdCgpKSk7Cit9CisKK1RFU1RfRihERkFDb21iaW5lclRlc3QsIElucHV0VG9vTGFy
Z2VGb3JNaW5pbXVtU2l6ZSkKK3sKKyAgICBWZWN0b3I8REZBPiBkZmFzID0geyBidWlsZERGQUZy
b21QYXR0ZXJucyh7ICJmb28ifSksIGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgImJhciJ9KSB9Owor
ICAgIFZlY3RvcjxERkE+IGNvbWJpbmVkREZBcyA9IGNvbWJpbmUoZGZhcywgMik7CisgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNvbWJpbmVkREZBcy5zaXplKCkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBjb3VudExpdmVOb2Rlcyhjb21iaW5l
ZERGQXNbMF0pKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgY291bnRM
aXZlTm9kZXMoY29tYmluZWRERkFzWzFdKSk7Cit9CisKK1RFU1RfRihERkFDb21iaW5lclRlc3Qs
IENvbWJpbmVkSW5wdXRSZWFjaGVzTWluaW11bVNpemUpCit7CisgICAgVmVjdG9yPERGQT4gZGZh
cyA9IHsgYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiZm9vIn0pLCBidWlsZERGQUZyb21QYXR0ZXJu
cyh7ICJiYXIifSksIGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIldlYktpdCJ9KSB9OworICAgIFZl
Y3RvcjxERkE+IGNvbWJpbmVkREZBcyA9IGNvbWJpbmUoZGZhcywgNSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMiksIGNvbWJpbmVkREZBcy5zaXplKCkpOworICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCBjb3VudExpdmVOb2Rlcyhjb21iaW5lZERGQXNb
MF0pKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9k
ZXMoY29tYmluZWRERkFzWzFdKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFIZWxwZXJz
LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQzMmFmMjNjYWY0NzY1YTk0NmI4NzMxYmMwNmJjNjVlNzg0N2U2YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBSGVscGVycy5o
CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8V2ViQ29yZS9Db21iaW5l
ZFVSTEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05GQS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvTkZBVG9ERkEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTEZpbHRlclBhcnNlci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitz
dGF0aWMgdW5zaWduZWQgY291bnRMaXZlTm9kZXMoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkRG
QSYgZGZhKQoreworICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworICAgIGZvciAoY29uc3QgYXV0
byYgbm9kZSA6IGRmYS5ub2RlcykgeworICAgICAgICBpZiAoIW5vZGUuaXNLaWxsZWQoKSkKKyAg
ICAgICAgICAgICsrY291bnRlcjsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50ZXI7Cit9CisKK3N0
YXRpYyBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6Ok5GQT4gY3JlYXRlTkZBcyhDb250ZW50RXh0
ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzJiBjb21iaW5lZFVSTEZpbHRlcnMpCit7CisgICAg
VmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpORkE+IG5mYXM7CisKKyAgICBjb21iaW5lZFVSTEZp
bHRlcnMucHJvY2Vzc05GQXMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgWyZd
KENvbnRlbnRFeHRlbnNpb25zOjpORkEmJiBuZmEpIHsKKyAgICAgICAgbmZhcy5hcHBlbmQoV1RG
Ojptb3ZlKG5mYSkpOworICAgIH0pOworCisgICAgcmV0dXJuIG5mYXM7Cit9CisKK3N0YXRpYyBD
b250ZW50RXh0ZW5zaW9uczo6REZBIGJ1aWxkREZBRnJvbVBhdHRlcm5zKFZlY3Rvcjxjb25zdCBj
aGFyKj4gcGF0dGVybnMpCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmls
dGVycyBjb21iaW5lZFVSTEZpbHRlcnM7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRl
clBhcnNlciBwYXJzZXIoY29tYmluZWRVUkxGaWx0ZXJzKTsKKworICAgIGZvciAoY29uc3QgY2hh
ciogcGF0dGVybiA6IHBhdHRlcm5zKQorICAgICAgICBwYXJzZXIuYWRkUGF0dGVybihwYXR0ZXJu
LCBmYWxzZSwgMCk7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpORkE+IG5mYXMgPSBj
cmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNp
b25zOjpORkFUb0RGQTo6Y29udmVydChuZmFzWzBdKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0RGQU1pbmltaXplci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZB
TWluaW1pemVyLmNwcAppbmRleCA0NWZmYWJiNTUzYWRhMjg0YmExYzI3ZTI2OTZiNjQzZWJlYjUy
ZjQ3Li4zZDQwY2IwMDViNzZiZDE3YmRmMmVlMTBhNTM1NWE5Zjc1NWRiMjc4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcApAQCAt
MjUsMTQgKzI1LDkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8V2ViQ29y
ZS9Db21iaW5lZFVSTEZpbHRlcnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05GQS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvTkZBVG9ERkEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VSTEZpbHRlclBhcnNl
ci5oPgorI2luY2x1ZGUgIkRGQUhlbHBlcnMuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
ewogCiBjbGFzcyBERkFNaW5pbWl6ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewpAQCAt
NDMsMzggKzM4LDYgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjb3Vu
dExpdmVOb2Rlcyhjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBJiBkZmEpCi17Ci0gICAgdW5z
aWduZWQgY291bnRlciA9IDA7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBub2RlIDogZGZhLm5vZGVz
KSB7Ci0gICAgICAgIGlmICghbm9kZS5pc0tpbGxlZCgpKQotICAgICAgICAgICAgKytjb3VudGVy
OwotICAgIH0KLSAgICByZXR1cm4gY291bnRlcjsKLX0KLQotc3RhdGljIFZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uczo6TkZBPiBjcmVhdGVORkFzKENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVS
TEZpbHRlcnMmIGNvbWJpbmVkVVJMRmlsdGVycykKLXsKLSAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvbnM6Ok5GQT4gbmZhczsKLQotICAgIGNvbWJpbmVkVVJMRmlsdGVycy5wcm9jZXNzTkZBcyhz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBbJl0oQ29udGVudEV4dGVuc2lvbnM6
Ok5GQSYmIG5mYSkgewotICAgICAgICBuZmFzLmFwcGVuZChXVEY6Om1vdmUobmZhKSk7Ci0gICAg
fSk7Ci0KLSAgICByZXR1cm4gbmZhczsKLX0KLQotQ29udGVudEV4dGVuc2lvbnM6OkRGQSBidWls
ZERGQUZyb21QYXR0ZXJucyhWZWN0b3I8Y29uc3QgY2hhcio+IHBhdHRlcm5zKQotewotICAgIENv
bnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRlcnMgY29tYmluZWRVUkxGaWx0ZXJzOwot
ICAgIENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXIgcGFyc2VyKGNvbWJpbmVkVVJM
RmlsdGVycyk7Ci0KLSAgICBmb3IgKGNvbnN0IGNoYXIqIHBhdHRlcm4gOiBwYXR0ZXJucykKLSAg
ICAgICAgcGFyc2VyLmFkZFBhdHRlcm4ocGF0dGVybiwgZmFsc2UsIDApOwotICAgIFZlY3RvcjxD
b250ZW50RXh0ZW5zaW9uczo6TkZBPiBuZmFzID0gY3JlYXRlTkZBcyhjb21iaW5lZFVSTEZpbHRl
cnMpOwotICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQobmZh
c1swXSk7Ci19Ci0KIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBCYXNpY1NlYXJjaCkKIHsKICAg
ICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIi4q
Zm9vIiwgIi4qYmFyIiwgIi4qYmFuZyJ9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMzlhMTc2NDM5ODdlNjkyZDUyYzQ2
ZTMxOTQxZmE0ZWY0MGY1NmFmLi40NjY3NzlkOGIwZjBhN2QyZmU1ZDk3ZmU1MjAzZWYxNGZlZDEw
OTA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDYtMDIgIEJlbmphbWluIFBvdWxhaW4g
IDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29tYmluZSB0aW55IERGQXMgaW50byBz
bGlnaHRseSBsYXJnZXIgb25lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ1NTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2ZpbHRlcnMtd2l0aC1x
dWFudGlmaWVycy1jb21iaW5lZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvY29udGVudGV4dGVuc2lvbnMvZmlsdGVycy13aXRoLXF1YW50aWZpZXJzLWNvbWJpbmVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZmls
dGVycy13aXRoLXF1YW50aWZpZXJzLWNvbWJpbmVkLmh0bWwuanNvbjogQWRkZWQuCisKIDIwMTUt
MDYtMDEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbU1ZHIC0+IE9URiBDb252ZXJ0ZXJdIFJlbW92ZSB1bm5lY2Vzc2FyeSBoYWNrcwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9maWx0ZXJzLXdp
dGgtcXVhbnRpZmllcnMtY29tYmluZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9maWx0ZXJzLXdpdGgtcXVhbnRpZmllcnMtY29tYmluZWQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3M2VjOTAxMDEwNDI1YWJkYzk4ZTNmZTNjNjY2YjUz
Nzg1MzczYTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRl
bnRleHRlbnNpb25zL2ZpbHRlcnMtd2l0aC1xdWFudGlmaWVycy1jb21iaW5lZC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1MyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODV4OTUyCisgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA3ODV4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDc4NXg5NTIK
KyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgNzg1eDk1MgorICAgIFJlbmRlckJv
ZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzY5eDkzNgorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMjAweDE4CisgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIw
MDogIlRoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGxvYWQuIgorICAgICAgUmVuZGVyQlIge0JSfSBh
dCAoMTk5LDE0KSBzaXplIDF4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsMTgpIHNp
emUgMTAweDEwMAorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMTAwLDExOCkgc2l6ZSAweDAKKyAg
ICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDExOCkgc2l6ZSAxMDB4MTAwCisgICAgICBSZW5k
ZXJCUiB7QlJ9IGF0ICgxMDAsMjE4KSBzaXplIDB4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30g
YXQgKDAsMjE4KSBzaXplIDEwMHgxMDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDEwMCwzMTgp
IHNpemUgMHgwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwzMTgpIHNpemUgMTAweDEw
MAorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMTAwLDQxOCkgc2l6ZSAweDAKKyAgICAgIFJlbmRl
ckltYWdlIHtJTUd9IGF0ICgwLDQxOCkgc2l6ZSAxMDB4MTAwCisgICAgICBSZW5kZXJCUiB7QlJ9
IGF0ICgxMDAsNTE4KSBzaXplIDB4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsNTE4
KSBzaXplIDEwMHgxMDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDEwMCw2MTgpIHNpemUgMHgw
CisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw2MTgpIHNpemUgMTAweDEwMAorICAgICAg
UmVuZGVyQlIge0JSfSBhdCAoMTAwLDcxOCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlckltYWdlIHtJ
TUd9IGF0ICgwLDcxOCkgc2l6ZSAxMDB4MTAwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgxMDAs
ODE4KSBzaXplIDB4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsODE4KSBzaXplIDEw
MHgxMDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDEwMCw5MTgpIHNpemUgMHgwCisgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsOTE4KSBzaXplIDI0MngxOAorICAgICAgICB0ZXh0IHJ1
biBhdCAoMCw5MTgpIHdpZHRoIDI0MjogIlRoZSBpbWFnZXMgYmVsb3cgc2hvdWxkIGJlIGJsb2Nr
ZWQuIgorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMjQxLDkzMikgc2l6ZSAxeDAKKyAgICAgIFJl
bmRlckltYWdlIHtJTUd9IGF0ICgwLDkzNikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0g
YXQgKDAsOTM2KSBzaXplIDB4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsOTM2KSBz
aXplIDB4MAorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAgICBS
ZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7QlJ9
IGF0ICgwLDkzNikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDkzNikg
c2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDAsOTM2KSBzaXplIDB4MAorICAgICAg
UmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsOTM2KSBzaXplIDB4MAorICAgICAgUmVuZGVyQlIge0JS
fSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw5MzYp
IHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDkzNikgc2l6ZSAweDAKKyAgICAg
IFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDkzNikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtC
Un0gYXQgKDAsOTM2KSBzaXplIDB4MAorICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsOTM2
KSBzaXplIDB4MAorICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAg
ICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7
QlJ9IGF0ICgwLDkzNikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDkz
Nikgc2l6ZSAweDAKKyAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDAsOTM2KSBzaXplIDB4MAorICAg
ICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsOTM2KSBzaXplIDB4MAorICAgICAgUmVuZGVyQlIg
e0JSfSBhdCAoMCw5MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCw5
MzYpIHNpemUgMHgwCisgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDkzNikgc2l6ZSAweDAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvZmlsdGVy
cy13aXRoLXF1YW50aWZpZXJzLWNvbWJpbmVkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NvbnRlbnRleHRlbnNpb25zL2ZpbHRlcnMtd2l0aC1xdWFudGlmaWVycy1jb21iaW5lZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE1MDM5OWM1NjNmOTk0MzBhYjkwZDYzMjAxMGMyZDhmMjc2NDhkYzcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25z
L2ZpbHRlcnMtd2l0aC1xdWFudGlmaWVycy1jb21iaW5lZC5odG1sCkBAIC0wLDAgKzEsMjYgQEAK
Kzxib2R5PgorVGhlIGltYWdlcyBiZWxvdyBzaG91bGQgbG9hZC48YnI+Cis8aW1nIHNyYz0iaHR0
cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nIj48YnI+Cis8aW1nIHNy
Yz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP2FiY2FiY2R3
aGl0ZWxpc3QiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2Vz
L3NxdWFyZTEwMC5wbmc/YWJjY2NjY2NjIj48YnI+Cis8aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAu
MTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP2RlZmZmZmZmZiI+PGJyPgorPGltZyBzcmM9
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9qa2xqa2xqa2wi
Pjxicj4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEw
MC5wbmc/cHFyYWJjZGVmIj48YnI+Cis8aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jl
c291cmNlcy9zcXVhcmUxMDAucG5nP3d4eWJjIj48YnI+Cis8aW1nIHNyYz0iaHR0cDovLzEyNy4w
LjAuMTo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP2FjYnh5eHl4eXh5eHkiPjxicj4KKzxp
bWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/YWJj
ZGVmamtscHFyd3h5YWNkYWNiYmNnaG1vc3ZhYmFjYnh5Ij48YnI+CisKK1RoZSBpbWFnZXMgYmVs
b3cgc2hvdWxkIGJlIGJsb2NrZWQuPGJyPgorPGltZyBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9hYmNhYmMiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/YWJjY2FiYyI+PGJyPgorPGlt
ZyBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9kZWZn
aGkiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3NxdWFy
ZTEwMC5wbmc/ZGVmZ2doaSI+PGJyPgorPGltZyBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9y
ZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9qa2xtbm8iPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAvcmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/amtsamtsbW5vIj48YnI+Cis8aW1n
IHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP3BxcnN0
diI+PGJyPgorPGltZyBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvc3F1YXJl
MTAwLnBuZz9wcXJhYmNzdHYiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAv
cmVzb3VyY2VzL3NxdWFyZTEwMC5wbmc/d3h5YWJjIj48YnI+Cis8aW1nIHNyYz0iaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3Jlc291cmNlcy9zcXVhcmUxMDAucG5nP3d4eWRlZmFiYyI+PGJyPgorPGlt
ZyBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvc3F1YXJlMTAwLnBuZz9hY2J3
eHkiPjxicj4KKzxpbWcgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3NxdWFy
ZTEwMC5wbmc/YWJjYWNiZGVmYWJjZGprbHdoaXRlbGlzdHd4eSI+PGJyPgorPC9ib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9maWx0ZXJz
LXdpdGgtcXVhbnRpZmllcnMtY29tYmluZWQuaHRtbC5qc29uIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9maWx0ZXJzLXdpdGgtcXVhbnRpZmllcnMtY29tYmluZWQu
aHRtbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwNWUyNzBmYjdlMjA5YjQzYTc2OTQwZmY3NjM4ZDc0ZWE3
NDU4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRl
eHRlbnNpb25zL2ZpbHRlcnMtd2l0aC1xdWFudGlmaWVycy1jb21iaW5lZC5odG1sLmpzb24KQEAg
LTAsMCArMSw1OCBAQAorWworICAgIHsKKyAgICAgICAgImFjdGlvbiI6IHsKKyAgICAgICAgICAg
ICJ0eXBlIjogImJsb2NrIgorICAgICAgICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAg
ICAgICAgICJ1cmwtZmlsdGVyIjogImFiYy4qYWJjIgorICAgICAgICB9CisgICAgfSwKKyAgICB7
CisgICAgICAgICJhY3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAg
ICAgfSwKKyAgICAgICAgInRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJk
ZWYuKmdoaSIKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogewor
ICAgICAgICAgICAgInR5cGUiOiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2Vy
IjogeworICAgICAgICAgICAgInVybC1maWx0ZXIiOiAiamtsLiptbm8iCisgICAgICAgIH0KKyAg
ICB9LAorICAgIHsKKyAgICAgICAgImFjdGlvbiI6IHsKKyAgICAgICAgICAgICJ0eXBlIjogImJs
b2NrIgorICAgICAgICB9LAorICAgICAgICAidHJpZ2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwt
ZmlsdGVyIjogInBxci4qc3R2IgorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJh
Y3Rpb24iOiB7CisgICAgICAgICAgICAidHlwZSI6ICJibG9jayIKKyAgICAgICAgfSwKKyAgICAg
ICAgInRyaWdnZXIiOiB7CisgICAgICAgICAgICAidXJsLWZpbHRlciI6ICJ3eHkuKmFiYyIKKyAg
ICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAgICAgICAg
InR5cGUiOiAiaWdub3JlLXByZXZpb3VzLXJ1bGVzIgorICAgICAgICB9LAorICAgICAgICAidHJp
Z2dlciI6IHsKKyAgICAgICAgICAgICJ1cmwtZmlsdGVyIjogImFiY2QuKndoaXRlbGlzdCIKKyAg
ICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICAiYWN0aW9uIjogeworICAgICAgICAgICAg
InR5cGUiOiAiYmxvY2siCisgICAgICAgIH0sCisgICAgICAgICJ0cmlnZ2VyIjogeworICAgICAg
ICAgICAgInVybC1maWx0ZXIiOiAiYWNiLip3eHkiCisgICAgICAgIH0KKyAgICB9CitdCg==
</data>
<flag name="review"
          id="279087"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>